windows: prefer regular vsync instead of dwm flush syncs.

The latter can cause stuttering issues on some setups.
This commit is contained in:
Sasha Szpakowski
2024-04-05 22:30:58 -03:00
parent e08004d338
commit 1d9d3346c5
2 changed files with 11 additions and 1 deletions
+7 -1
View File
@@ -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).
+4
View File
@@ -162,6 +162,10 @@ private:
WindowSettings settings;
StrongRef<love::image::ImageData> icon;
#ifdef LOVE_WINDOWS
bool canUseDwmFlush = false;
#endif
bool open;
bool mouseGrabbed;