graphicsdriver/metal: Bug fix: Had to set the vsync state again at resetting

Fixes #1364
This commit is contained in:
Hajime Hoshi 2020-10-14 01:55:32 +09:00
parent 9fdf60a7ed
commit 2afeb86985
2 changed files with 11 additions and 1 deletions

View File

@ -231,7 +231,12 @@ func (g *game) Update() error {
} else {
ebiten.SetCursorMode(ebiten.CursorModeHidden)
}
ebiten.SetVsyncEnabled(vsyncEnabled)
// Set vsync enabled only when this is needed.
// This makes a bug around vsync initialization more explicit (#1364).
if vsyncEnabled != ebiten.IsVsyncEnabled() {
ebiten.SetVsyncEnabled(vsyncEnabled)
}
ebiten.SetMaxTPS(tps)
ebiten.SetWindowDecorated(decorated)
ebiten.SetWindowPosition(positionX, positionY)

View File

@ -28,6 +28,7 @@ type view struct {
uiview uintptr
windowChanged bool
vsync bool
device mtl.Device
ml ca.MetalLayer
@ -48,6 +49,7 @@ func (v *view) setDisplaySyncEnabled(enabled bool) {
// recursive function call via Run is forbidden.
// Fix this to use d.t.Run to avoid confusion.
v.ml.SetDisplaySyncEnabled(enabled)
v.vsync = enabled
}
func (v *view) colorPixelFormat() mtl.PixelFormat {
@ -70,6 +72,9 @@ func (v *view) reset() error {
// MTLPixelFormatBGRA10_XR_sRGB.
v.ml.SetPixelFormat(mtl.PixelFormatBGRA8UNorm)
v.ml.SetMaximumDrawableCount(3)
// The vsync state might be reset. Set the state again (#1364).
v.ml.SetDisplaySyncEnabled(v.vsync)
return nil
}