From b25223bf3a94a4a8800d04db952c8ec376762877 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Fri, 18 Aug 2023 16:48:59 +0200 Subject: [PATCH] #219 add new "refresh_rate" setting --- inc/dd.h | 1 + src/config.c | 2 ++ src/dd.c | 6 ++++++ src/render_d3d9.c | 2 ++ 4 files changed, 11 insertions(+) diff --git a/inc/dd.h b/inc/dd.h index 630378d..fe0038f 100644 --- a/inc/dd.h +++ b/inc/dd.h @@ -157,6 +157,7 @@ typedef struct CNCDDRAW int guard_lines; int resolutions; int max_resolutions; + int refresh_rate; BOOL limit_bltfast; BOOL armadahack; BOOL tshack; diff --git a/src/config.c b/src/config.c index 231e46c..b76aece 100644 --- a/src/config.c +++ b/src/config.c @@ -45,6 +45,7 @@ void cfg_load() g_ddraw->allow_wmactivate = cfg_get_bool("allow_wmactivate", FALSE); g_ddraw->guard_lines = cfg_get_int("guard_lines", 200); g_ddraw->max_resolutions = cfg_get_int("max_resolutions", 0); + g_ddraw->refresh_rate = cfg_get_int("refresh_rate", 0); g_ddraw->limit_bltfast = cfg_get_bool("limit_bltfast", FALSE); g_ddraw->rgb555 = cfg_get_bool("rgb555", FALSE); g_ddraw->hook_peekmessage = cfg_get_bool("hook_peekmessage", FALSE); @@ -362,6 +363,7 @@ static void cfg_create_ini() "fixmousehook=false\n" "rgb555=false\n" "no_dinput_hook=false\n" + "refresh_rate=0\n" "\n" "\n" "\n" diff --git a/src/dd.c b/src/dd.c index 9f33904..5d67a52 100644 --- a/src/dd.c +++ b/src/dd.c @@ -637,6 +637,12 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width; g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height; + if (g_ddraw->refresh_rate) + { + g_ddraw->render.mode.dmFields |= DM_DISPLAYFREQUENCY; + g_ddraw->render.mode.dmDisplayFrequency = g_ddraw->refresh_rate; + } + if (!g_ddraw->windowed) { /* Making sure the chosen resolution is valid */ diff --git a/src/render_d3d9.c b/src/render_d3d9.c index bbffb0c..29c0c26 100644 --- a/src/render_d3d9.c +++ b/src/render_d3d9.c @@ -115,6 +115,7 @@ BOOL d3d9_create() g_d3d9.params.PresentationInterval = g_ddraw->vsync ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE; g_d3d9.params.BackBufferWidth = g_d3d9.params.Windowed ? 0 : g_ddraw->render.width; g_d3d9.params.BackBufferHeight = g_d3d9.params.Windowed ? 0 : g_ddraw->render.height; + g_d3d9.params.FullScreen_RefreshRateInHz = g_d3d9.params.Windowed ? 0 : g_ddraw->refresh_rate; g_d3d9.params.BackBufferFormat = g_ddraw->mode.dmBitsPerPel == 16 ? D3DFMT_R5G6B5 : D3DFMT_X8R8G8B8; g_d3d9.params.BackBufferCount = 1; @@ -160,6 +161,7 @@ BOOL d3d9_reset(BOOL windowed) g_d3d9.params.Windowed = windowed || g_ddraw->nonexclusive; g_d3d9.params.BackBufferWidth = g_d3d9.params.Windowed ? 0 : g_ddraw->render.width; g_d3d9.params.BackBufferHeight = g_d3d9.params.Windowed ? 0 : g_ddraw->render.height; + g_d3d9.params.FullScreen_RefreshRateInHz = g_d3d9.params.Windowed ? 0 : g_ddraw->refresh_rate; g_d3d9.params.BackBufferFormat = g_ddraw->mode.dmBitsPerPel == 16 ? D3DFMT_R5G6B5 : D3DFMT_X8R8G8B8; if (g_d3d9.device && SUCCEEDED(IDirect3DDevice9_Reset(g_d3d9.device, &g_d3d9.params)))