From 45c2206946407c42e67611e46700cc4198e950d0 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Fri, 30 Nov 2018 05:18:44 +0100 Subject: [PATCH] adjust gdi renderer for accurateTimers --- inc/main.h | 1 + src/render_soft.c | 2 +- src/settings.c | 9 ++++----- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/inc/main.h b/inc/main.h index 72ddacb..4599e17 100644 --- a/inc/main.h +++ b/inc/main.h @@ -124,6 +124,7 @@ typedef struct IDirectDrawImpl LONG minimized; BOOL altenter; BOOL hidecursor; + BOOL accurateTimers; SpeedLimiter ticksLimiter; SpeedLimiter flipLimiter; SpeedLimiter fpsLimiter; diff --git a/src/render_soft.c b/src/render_soft.c index ae8e87d..4ab7203 100644 --- a/src/render_soft.c +++ b/src/render_soft.c @@ -55,7 +55,7 @@ DWORD WINAPI render_soft_main(void) { float len = 1000.0f / maxFPS; ddraw->fpsLimiter.tickLengthNs = len * 10000; - ddraw->fpsLimiter.ticklength = len;// + 0.5f; + ddraw->fpsLimiter.ticklength = len + (ddraw->accurateTimers ? 0.5f : 0.0f); } while (ddraw->render.run && WaitForSingleObject(ddraw->render.sem, INFINITE) != WAIT_FAILED) diff --git a/src/settings.c b/src/settings.c index b8ffc90..24b3651 100644 --- a/src/settings.c +++ b/src/settings.c @@ -40,18 +40,17 @@ void Settings_Load() ddraw->vsync = GetBool("vsync", FALSE); ddraw->noactivateapp = GetBool("noactivateapp", FALSE); ddraw->vhack = GetBool("vhack", FALSE); + ddraw->accurateTimers = GetBool("accuratetimers", FALSE); WindowRect.right = GetInt("width", 0); WindowRect.bottom = GetInt("height", 0); WindowRect.left = GetInt("posX", -32000); WindowRect.top = GetInt("posY", -32000); - BOOL accurateTimers = GetBool("accuratetimers", FALSE); - ddraw->render.maxfps = GetInt("maxfps", 125); if (ddraw->render.maxfps <= 1000) { - if (accurateTimers) + if (ddraw->accurateTimers) ddraw->fpsLimiter.hTimer = CreateWaitableTimer(NULL, TRUE, NULL); //can't fully set it up here due to missing ddraw->mode.dmDisplayFrequency } @@ -59,7 +58,7 @@ void Settings_Load() int maxTicks = GetInt("maxgameticks", 0); if (maxTicks > 0 && maxTicks <= 1000) { - if (accurateTimers) + if (ddraw->accurateTimers) ddraw->ticksLimiter.hTimer = CreateWaitableTimer(NULL, TRUE, NULL); float len = 1000.0f / maxTicks; @@ -68,7 +67,7 @@ void Settings_Load() } //always using 60 fps for flip... - if (accurateTimers) + if (ddraw->accurateTimers) ddraw->flipLimiter.hTimer = CreateWaitableTimer(NULL, TRUE, NULL); float flipLen = 1000.0f / 60;