From dffc89e41cfa5c2ea5efac7ac43677f995e52553 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Wed, 13 Nov 2019 00:41:38 +0100 Subject: [PATCH] Limit FPS when upscaling is disabled --- SourceX/dx.cpp | 8 ++++++++ SourceX/miniwin/ddraw.h | 2 ++ SourceX/miniwin/misc.cpp | 8 ++++++++ 3 files changed, 18 insertions(+) diff --git a/SourceX/dx.cpp b/SourceX/dx.cpp index bb7437d8c..e313759ca 100644 --- a/SourceX/dx.cpp +++ b/SourceX/dx.cpp @@ -14,6 +14,8 @@ int locktbl[256]; static CCritSect sgMemCrit; HMODULE ghDiabMod; +int refreshDelay; +DWORD refreshDelayTc; SDL_Window *window; SDL_Renderer *renderer; SDL_Texture *texture; @@ -237,6 +239,12 @@ void RenderPresent() } SDL_RenderPresent(renderer); } else { + // no VSync when not using upscaling + int tc = GetTickCount(); + if (refreshDelayTc + refreshDelay > tc) + Sleep(tc - refreshDelayTc + refreshDelay); + refreshDelayTc = tc; + if (SDL_UpdateWindowSurface(window) <= -1) { ErrSdl(); } diff --git a/SourceX/miniwin/ddraw.h b/SourceX/miniwin/ddraw.h index 360e4192e..c7e5de987 100644 --- a/SourceX/miniwin/ddraw.h +++ b/SourceX/miniwin/ddraw.h @@ -6,6 +6,8 @@ namespace dvl { +extern int refreshDelay; +extern DWORD refreshDelayTc; extern SDL_Window *window; extern SDL_Renderer *renderer; extern SDL_Texture *texture; diff --git a/SourceX/miniwin/misc.cpp b/SourceX/miniwin/misc.cpp index cff312459..a6a9f0007 100644 --- a/SourceX/miniwin/misc.cpp +++ b/SourceX/miniwin/misc.cpp @@ -190,6 +190,14 @@ bool SpawnWindow(LPCSTR lpWindowName, int nWidth, int nHeight) if (SDL_RenderSetLogicalSize(renderer, nWidth, nHeight) <= -1) { ErrSdl(); } +#endif + } else { +#ifdef USE_SDL1 + refreshDelay = 16; // rougly 60hz +#else + SDL_DisplayMode mode; + SDL_GetDisplayMode(0, 0, &mode); + refreshDelay = 1000 / mode.refresh_rate; #endif }