From 14304ff330e5c58c5267328a25b24884e51b4b2b Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Wed, 28 Nov 2018 13:40:29 +0100 Subject: [PATCH] only limit game ticks via unlock if there was never any blt or flip --- inc/main.h | 1 + src/surface.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/inc/main.h b/inc/main.h index e936fd6..d5ca136 100644 --- a/inc/main.h +++ b/inc/main.h @@ -116,6 +116,7 @@ typedef struct IDirectDrawImpl DWORD ticklength; BOOL altenter; BOOL hidecursor; + BOOL limitTicksOnBltOrFlip; } IDirectDrawImpl; diff --git a/src/surface.c b/src/surface.c index e736012..f96bc85 100644 --- a/src/surface.c +++ b/src/surface.c @@ -445,7 +445,10 @@ HRESULT __stdcall ddraw_surface_Blt(IDirectDrawSurfaceImpl *This, LPRECT lpDestR } if (ddraw->ticklength > 0) + { + ddraw->limitTicksOnBltOrFlip = TRUE; LimitGameTicks(); + } } return DD_OK; @@ -688,7 +691,10 @@ HRESULT __stdcall ddraw_surface_Flip(IDirectDrawSurfaceImpl *This, LPDIRECTDRAWS */ if (ddraw->ticklength > 0) + { + ddraw->limitTicksOnBltOrFlip = TRUE; LimitGameTicks(); + } } return DD_OK; @@ -955,6 +961,8 @@ HRESULT __stdcall ddraw_surface_Unlock(IDirectDrawSurfaceImpl *This, LPVOID lpRe InterlockedExchange(&ddraw->render.surfaceUpdated, TRUE); ReleaseSemaphore(ddraw->render.sem, 1, NULL); + if (ddraw->ticklength > 0 && !ddraw->limitTicksOnBltOrFlip) + LimitGameTicks(); } return DD_OK;