From d7ebc19d04d2772b48dcc78367b4fcf745b52bd8 Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Sun, 17 Dec 2023 15:36:12 +0900 Subject: [PATCH] internal/ui: refactoring: reduce usages of renderThread Updates #2714 --- internal/graphicscommand/commandqueue.go | 6 +++++- internal/ui/ui.go | 4 +++- internal/ui/ui_glfw.go | 6 ++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/internal/graphicscommand/commandqueue.go b/internal/graphicscommand/commandqueue.go index 5021fed05..8eb8ed796 100644 --- a/internal/graphicscommand/commandqueue.go +++ b/internal/graphicscommand/commandqueue.go @@ -45,12 +45,16 @@ const ( var vsyncEnabled int32 = 1 -func SetVsyncEnabled(enabled bool) { +func SetVsyncEnabled(enabled bool, graphicsDriver graphicsdriver.Graphics) { if enabled { atomic.StoreInt32(&vsyncEnabled, 1) } else { atomic.StoreInt32(&vsyncEnabled, 0) } + + runOnRenderThread(func() { + graphicsDriver.SetVsyncEnabled(enabled) + }, true) } // FlushCommands flushes the command queue and present the screen if needed. diff --git a/internal/ui/ui.go b/internal/ui/ui.go index bcb30af66..b5243f23c 100644 --- a/internal/ui/ui.go +++ b/internal/ui/ui.go @@ -80,7 +80,9 @@ type UserInterface struct { whiteImage *Image - mainThread thread.Thread + mainThread thread.Thread + + // TODO: Remove this (#2714). renderThread thread.Thread userInterfaceImpl diff --git a/internal/ui/ui_glfw.go b/internal/ui/ui_glfw.go index 65cefeb47..8e31cbaa0 100644 --- a/internal/ui/ui_glfw.go +++ b/internal/ui/ui_glfw.go @@ -1287,10 +1287,7 @@ func (u *UserInterface) setFPSMode(fpsMode FPSModeType) error { } vsyncEnabled := u.fpsMode == FPSModeVsyncOn - graphicscommand.SetVsyncEnabled(vsyncEnabled) - u.renderThread.CallAsync(func() { - u.graphicsDriver.SetVsyncEnabled(vsyncEnabled) - }) + graphicscommand.SetVsyncEnabled(vsyncEnabled, u.graphicsDriver) return nil } @@ -1341,6 +1338,7 @@ func (u *UserInterface) update() (float64, float64, error) { // Initialize vsync after SetMonitor is called. See the comment in updateVsync. // Calling this inside setWindowSize didn't work (#1363). + // Also, setFPSMode has to be called after graphicscommand.SetRenderThread is called (#2714). if !u.fpsModeInited { if err := u.setFPSMode(u.fpsMode); err != nil { return 0, 0, err