Backport frame limiter (again)

# Conflicts:
#	source/rr/src/game.cpp
This commit is contained in:
nukeykt 2019-08-16 13:32:55 +09:00 committed by Christoph Oelckers
parent 99775a8fe0
commit 0dcca3583f
2 changed files with 22 additions and 29 deletions

View File

@ -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;

View File

@ -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;
}