Skip to content

Commit

Permalink
windows: prefer regular vsync instead of dwm flush syncs.
Browse files Browse the repository at this point in the history
The latter can cause stuttering issues on some setups.
  • Loading branch information
slime73 committed Apr 6, 2024
1 parent e08004d commit 1d9d334
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/modules/window/sdl/Window.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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).
Expand Down
4 changes: 4 additions & 0 deletions src/modules/window/sdl/Window.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,10 @@ class Window final : public love::window::Window
WindowSettings settings;
StrongRef<love::image::ImageData> icon;

#ifdef LOVE_WINDOWS
bool canUseDwmFlush = false;
#endif

bool open;

bool mouseGrabbed;
Expand Down

0 comments on commit 1d9d334

Please sign in to comment.