diff --git a/src/dd.c b/src/dd.c index 9027306..37ffb2a 100644 --- a/src/dd.c +++ b/src/dd.c @@ -1189,7 +1189,9 @@ HRESULT dd_WaitForVerticalBlank(DWORD dwFlags, HANDLE hEvent) { if (g_config.maxgameticks == -2) { - if (fpsl_dwm_flush() || fpsl_wait_for_vblank(g_config.maxfps >= 0 && !g_config.vsync)) + BOOL open = !(g_config.maxfps < 0 || (g_config.vsync && g_config.maxfps >= g_ddraw->mode.dmDisplayFrequency)); + + if (fpsl_dwm_flush() || fpsl_wait_for_vblank(open)) return DD_OK; } diff --git a/src/fps_limiter.c b/src/fps_limiter.c index 094f902..d157612 100644 --- a/src/fps_limiter.c +++ b/src/fps_limiter.c @@ -14,7 +14,7 @@ void fpsl_init() g_fpsl.tick_length_ns = 0; g_fpsl.tick_length = 0; - if (max_fps < 0 || g_config.vsync) + if (max_fps < 0 || (g_config.vsync && g_config.maxfps >= g_ddraw->mode.dmDisplayFrequency)) max_fps = g_ddraw->mode.dmDisplayFrequency; if (max_fps > 1000) @@ -125,7 +125,7 @@ void fpsl_frame_start() void fpsl_frame_end() { - if (g_config.maxfps < 0 || g_config.vsync) + if (g_config.maxfps < 0 || (g_config.vsync && g_config.maxfps >= g_ddraw->mode.dmDisplayFrequency)) { if (fpsl_dwm_flush() || fpsl_wait_for_vblank(TRUE)) return; @@ -135,7 +135,7 @@ void fpsl_frame_end() { if (g_fpsl.htimer) { - if (g_config.vsync) + if (g_config.vsync && g_config.maxfps >= g_ddraw->mode.dmDisplayFrequency) { WaitForSingleObject(g_fpsl.htimer, g_fpsl.tick_length * 2); LARGE_INTEGER due_time = { .QuadPart = -g_fpsl.tick_length_ns };