From 0dcca3583f1c4fc161654d0d102e6792128719cf Mon Sep 17 00:00:00 2001 From: nukeykt Date: Fri, 16 Aug 2019 13:32:55 +0900 Subject: [PATCH] Backport frame limiter (again) # Conflicts: # source/rr/src/game.cpp --- source/blood/src/view.cpp | 27 ++++++++++----------------- source/rr/src/game.cpp | 24 ++++++++++++------------ 2 files changed, 22 insertions(+), 29 deletions(-) diff --git a/source/blood/src/view.cpp b/source/blood/src/view.cpp index 02fa94c9d..5eb0301c8 100644 --- a/source/blood/src/view.cpp +++ b/source/blood/src/view.cpp @@ -2921,30 +2921,23 @@ int viewFPSLimit(void) if (!r_maxfps) return 1; - static double nextPageDelay = g_frameDelay; - uint64_t const delay = llrint(nextPageDelay); + static double nextPageDelay; + static double lastFrameTicks; - uint64_t const frameTicks = timerGetTicksU64(); - uint64_t const frameDelay = (uint64_t)llrint(g_frameDelay); + double const frameTicks = timerGetTicksU64(); + double const elapsedTime = frameTicks-lastFrameTicks; - static uint64_t lastFrameTicks = frameTicks - frameDelay; - uint64_t elapsedTime = frameTicks-lastFrameTicks; - - int frameWaiting = 0; - - if (elapsedTime >= delay) + if (elapsedTime >= nextPageDelay) { - //If we missed a frame, reset any cumulated remainder from rendering frames early - if (elapsedTime > frameDelay) - nextPageDelay = g_frameDelay; - else - nextPageDelay += double(frameDelay-elapsedTime); + if (elapsedTime <= nextPageDelay+g_frameDelay) + nextPageDelay += g_frameDelay-elapsedTime; lastFrameTicks = frameTicks; - ++frameWaiting; + + return 1; } - return frameWaiting; + return 0; } float r_ambientlight = 1.0, r_ambientlightrecip = 1.0; diff --git a/source/rr/src/game.cpp b/source/rr/src/game.cpp index 69b7cc9a4..191dfa809 100644 --- a/source/rr/src/game.cpp +++ b/source/rr/src/game.cpp @@ -7739,23 +7739,23 @@ int G_FPSLimit(void) if (!r_maxfps) return 1; - static double nextPageDelay; - static double lastFrameTicks; + static double nextPageDelay; + static double lastFrameTicks; - double const frameTicks = timerGetTicksU64(); - double const elapsedTime = frameTicks - lastFrameTicks; + double const frameTicks = timerGetTicksU64(); + double const elapsedTime = frameTicks-lastFrameTicks; - if (elapsedTime >= nextPageDelay) - { - if (elapsedTime <= nextPageDelay + g_frameDelay) - nextPageDelay += g_frameDelay - elapsedTime; + if (elapsedTime >= nextPageDelay) + { + if (elapsedTime <= nextPageDelay+g_frameDelay) + nextPageDelay += g_frameDelay-elapsedTime; - lastFrameTicks = frameTicks; + lastFrameTicks = frameTicks; - return 1; - } + return 1; + } - return 0; + return 0; }