internal/ui: disable the optimization to skip rendering offscreen

This caused some issues in various environments. Until we find a good
solution, let's disable this.

Updates #2341
Updates #2342
Closes #2518
This commit is contained in:
Hajime Hoshi 2023-01-02 22:16:48 +09:00
parent 4d270de75e
commit a049acd94e

View File

@ -198,20 +198,20 @@ func (c *context) drawGame(graphicsDriver graphicsdriver.Graphics, forceDraw boo
c.skipCount = 0 c.skipCount = 0
} }
// If the offscreen is not updated and the framebuffers don't have to be updated, skip rendering to save GPU power. // TODO: If the offscreen is not updated and the framebuffers don't have to be updated, skip rendering to save GPU power
if c.skipCount < maxSkipCount { // (#2341, #2342). The condition would be `c.skipCount < maxSkipCount`.
if graphicsDriver.NeedsClearingScreen() { // However, Metal (and maybe DirectX) cannot vsync without swapping the buffer by rendering the screen framebuffer (#2520).
// This clear is needed for fullscreen mode or some mobile platforms (#622). if graphicsDriver.NeedsClearingScreen() {
c.screen.clear() // This clear is needed for fullscreen mode or some mobile platforms (#622).
} c.screen.clear()
c.game.DrawFinalScreen(c.screenScaleAndOffsets())
// The final screen is never used as the rendering source.
// Flush its buffer here just in case.
c.screen.flushBufferIfNeeded()
} }
c.game.DrawFinalScreen(c.screenScaleAndOffsets())
// The final screen is never used as the rendering source.
// Flush its buffer here just in case.
c.screen.flushBufferIfNeeded()
return nil return nil
} }