Add Target UPS registry option (#85)

This commit is contained in:
Gábor Dobra 2022-01-17 07:30:17 +01:00 committed by GitHub
parent bd90b9d712
commit 4f8dd98135
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 3 deletions

View File

@ -136,6 +136,9 @@ void options::ReadOptions()
Options.BottomTableBumpKey = get_int(nullptr, "Bottom Table Bump key", Options.BottomTableBumpKey); Options.BottomTableBumpKey = get_int(nullptr, "Bottom Table Bump key", Options.BottomTableBumpKey);
Options.UniformScaling = get_int(nullptr, "Uniform scaling", true); Options.UniformScaling = get_int(nullptr, "Uniform scaling", true);
Options.AlternativeRender = get_int(nullptr, "Alternative Render", false); Options.AlternativeRender = get_int(nullptr, "Alternative Render", false);
Options.TargetUps = get_int(nullptr, "Target UPS", 120);
Options.TargetUps = max(60, Options.TargetUps);
Options.TargetUps = min(Options.TargetUps, 360);
auto defaultLanguage = Languages::English; auto defaultLanguage = Languages::English;
auto language = static_cast<Languages>(get_int(nullptr, "Language", static_cast<int>(defaultLanguage))); auto language = static_cast<Languages>(get_int(nullptr, "Language", static_cast<int>(defaultLanguage)));
@ -235,6 +238,7 @@ void options::uninit()
set_int(nullptr, "Uniform scaling", Options.UniformScaling); set_int(nullptr, "Uniform scaling", Options.UniformScaling);
set_int(nullptr, "Alternative Render", Options.AlternativeRender); set_int(nullptr, "Alternative Render", Options.AlternativeRender);
set_int(nullptr, "Language", static_cast<int>(Options.Language)); set_int(nullptr, "Language", static_cast<int>(Options.Language));
set_int(nullptr, "Target UPS", Options.TargetUps);
} }
void options::path_init(LPCSTR regPath) void options::path_init(LPCSTR regPath)

View File

@ -59,6 +59,7 @@ struct optionsStruct
int Resolution; int Resolution;
bool UniformScaling; bool UniformScaling;
bool AlternativeRender; bool AlternativeRender;
int TargetUps;
Languages Language; Languages Language;
}; };

View File

@ -270,9 +270,13 @@ void pb::frame(float dtMilliSec)
// Retained render prevents frame skip. The next best thing - complete refresh at fixed rate. // Retained render prevents frame skip. The next best thing - complete refresh at fixed rate.
render::update(false); render::update(false);
auto targetFps = options::Options.TargetUps / 2.0f;
targetFps = max(targetFps, 60.0f); // at least 60
// Frame time at 60 FPS = 16.(6) ms // Frame time at 60 FPS = 16.(6) ms
auto targetTime = 1000 / 60.0f; auto targetTime = 1000.0f / targetFps;
frameTime += dtMilliSec; frameTime += dtMilliSec;
if (frameTime >= targetTime) if (frameTime >= targetTime)
{ {
frameTime = min(frameTime - targetTime, 100); frameTime = min(frameTime - targetTime, 100);

View File

@ -12,8 +12,6 @@
#include "splash.h" #include "splash.h"
#include "render.h" #include "render.h"
const float TargetUPS = 120, TargetFrameTime = 1000 / TargetUPS;
HINSTANCE winmain::hinst = nullptr; HINSTANCE winmain::hinst = nullptr;
HWND winmain::hwnd_frame = nullptr; HWND winmain::hwnd_frame = nullptr;
HCURSOR winmain::mouse_hsave; HCURSOR winmain::mouse_hsave;
@ -227,6 +225,11 @@ int winmain::WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
else else
pb::replay_level(0); pb::replay_level(0);
// To have a smooth display, Updates Per Sec (UPS) should be fps*2.
// Defaulted to 125 UPS, to leave some time for rendering.
float TargetFrameTime = 1000.0f / options::Options.TargetUps;
TargetFrameTime = max(TargetFrameTime, 1);
DWORD someTimeCounter = 300u, prevTime = 0u, frameStart = timeGetTime(); DWORD someTimeCounter = 300u, prevTime = 0u, frameStart = timeGetTime();
float sleepRemainder = 0, frameDuration = TargetFrameTime; float sleepRemainder = 0, frameDuration = TargetFrameTime;
while (true) while (true)