From 1d9d3346c52f7f3138be49125afed534a85dd2c7 Mon Sep 17 00:00:00 2001 From: Sasha Szpakowski Date: Fri, 5 Apr 2024 22:30:58 -0300 Subject: [PATCH] windows: prefer regular vsync instead of dwm flush syncs. The latter can cause stuttering issues on some setups. --- src/modules/window/sdl/Window.cpp | 8 +++++++- src/modules/window/sdl/Window.h | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/modules/window/sdl/Window.cpp b/src/modules/window/sdl/Window.cpp index 424d14d36..19095da07 100644 --- a/src/modules/window/sdl/Window.cpp +++ b/src/modules/window/sdl/Window.cpp @@ -106,6 +106,12 @@ Window::Window() // Make sure the screensaver doesn't activate by default. setDisplaySleepEnabled(false); + +#ifdef LOVE_WINDOWS + // Turned off by default, because it (ironically) causes stuttering issues + // on some setups. More investigation is needed before enabling it. + canUseDwmFlush = SDL_GetHintBoolean("LOVE_GRAPHICS_VSYNC_DWM", SDL_FALSE) != SDL_FALSE; +#endif } Window::~Window() @@ -1458,7 +1464,7 @@ void Window::swapBuffers() // - DWM refreshes don't always match the refresh rate of the monitor the window is in (or the requested swap // interval), so we only use it when they do match. // - The user may force GL vsync, and DwmFlush shouldn't be used together with GL vsync. - if (!settings.fullscreen && swapInterval == 1) + if (canUseDwmFlush && !settings.fullscreen && swapInterval == 1) { // Desktop composition is always enabled in Windows 8+. But DwmIsCompositionEnabled won't always return true... // (see DwmIsCompositionEnabled docs). diff --git a/src/modules/window/sdl/Window.h b/src/modules/window/sdl/Window.h index ca71bc37f..96b857357 100644 --- a/src/modules/window/sdl/Window.h +++ b/src/modules/window/sdl/Window.h @@ -162,6 +162,10 @@ private: WindowSettings settings; StrongRef icon; +#ifdef LOVE_WINDOWS + bool canUseDwmFlush = false; +#endif + bool open; bool mouseGrabbed;