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
}
// 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 {
if graphicsDriver.NeedsClearingScreen() {
// 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()
// TODO: If the offscreen is not updated and the framebuffers don't have to be updated, skip rendering to save GPU power
// (#2341, #2342). The condition would be `c.skipCount < maxSkipCount`.
// However, Metal (and maybe DirectX) cannot vsync without swapping the buffer by rendering the screen framebuffer (#2520).
if graphicsDriver.NeedsClearingScreen() {
// 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()
return nil
}