From 2432462ff3659ee6154fa0bf60ebfb28ed5d3976 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Fri, 11 Jul 2025 13:37:15 +0200 Subject: [PATCH] impr: Unlock frame rate for the first 5 seconds after startup --- main/gui/source/window/window.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/main/gui/source/window/window.cpp b/main/gui/source/window/window.cpp index e89772050..38f652c81 100644 --- a/main/gui/source/window/window.cpp +++ b/main/gui/source/window/window.cpp @@ -273,13 +273,13 @@ namespace hex { void Window::loop() { glfwShowWindow(m_window); - double returnToIdleTime = 0; + double returnToIdleTime = 5.0; constexpr static auto IdleFPS = 5.0; constexpr static auto FrameRateUnlockDuration = 1; double idleFrameTime = 1.0 / IdleFPS; - double targetFrameTime = idleFrameTime; + double targetFrameTime = -1.0; double longestExceededFrameTime = 0.0; while (!glfwWindowShouldClose(m_window)) { const auto maxFPS = ImHexApi::System::getTargetFPS(); @@ -306,6 +306,10 @@ namespace hex { } }(); + if (targetFrameTime < 0) { + targetFrameTime = maxFrameTime; + } + auto frameTimeStart = glfwGetTime(); glfwPollEvents(); @@ -388,6 +392,11 @@ namespace hex { longestExceededFrameTime = std::max(exceedTime, longestExceededFrameTime); m_waitEventsBlocked = false; + if (std::fmod(longestExceededFrameTime, 5.0) < 0.01) { + // Reset the longest exceeded frame time every 5 seconds + longestExceededFrameTime = 0.0; + } + while (frameTime < maxFrameTime) { frameTime = glfwGetTime() - frameTimeStart; }