[Java] Stänga av vsync i fullscreen

Permalänk
Medlem

[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++;