[Java] Stänga av vsync i fullscreen
Jag håller för närvarande på med ett litet spel som renderas i javas full screen exclusive mode.
Tekniken beskrivs närmre här.
Jag har dock ett problem. När jag använder tekniken som beskrivs ovan synkas min framerate mot monitorns refreshrate (vertically synchronization). Jag vill INTE att den ska göra det. I alla fall inte när jag fortfarande gör prestandatester.
Mina fråga är alltså:
Hur stänger jag av vsync? Går det att köra dubbelbuffrat utan vsync? hur?
Så här ser den relevanta koden ut för renderingsloopen
try {
// Clear back buffer...
canvasG2D = canvas.createGraphics();
canvasG2D.setColor(Color.GRAY);
canvasG2D.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
if (MenuSystem.active) {
MenuSystem.run();
MenuSystem.draw(canvasG2D, resolutionWidth, resolutionHeight);
lastUpdate = System.currentTimeMillis();
} else if (session != null) {
long delta = System.currentTimeMillis() - lastUpdate;
lastUpdate = System.currentTimeMillis();
session.run(delta);
session.draw(canvasG2D);
}
// Calculate and draw FPS
long now = System.currentTimeMillis();
long delta = now - lastFPSUpdate;
if (delta > 1000) {
lastFPSUpdate = now;
fps = (framesThisSecond * delta) / 1000;
framesThisSecond = 0;
}
drawFPS(canvasG2D, fps);
// Blit image and flip...
graphics = bufferStrat.getDrawGraphics();
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, resolutionWidth, resolutionHeight);
graphics.drawImage(canvas, xOffset, yOffset, null);
if (!bufferStrat.contentsLost()) {
bufferStrat.show();
}
} finally {
// release resources
if (graphics != null) {
graphics.dispose();
}
if (canvasG2D != null) {
canvasG2D.dispose();
}
}
framesThisSecond++;