summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergeanur <s.anureev@yandex.ua>2021-06-25 01:40:56 +0200
committerSergeanur <s.anureev@yandex.ua>2021-06-25 01:40:56 +0200
commitf46461331ca96cc894020a559b0a9642ebd2f53d (patch)
tree112cfdc43820be6ff01133acf4ab414d7ea6ac3f
parentTimer fix (diff)
downloadre3-f46461331ca96cc894020a559b0a9642ebd2f53d.tar
re3-f46461331ca96cc894020a559b0a9642ebd2f53d.tar.gz
re3-f46461331ca96cc894020a559b0a9642ebd2f53d.tar.bz2
re3-f46461331ca96cc894020a559b0a9642ebd2f53d.tar.lz
re3-f46461331ca96cc894020a559b0a9642ebd2f53d.tar.xz
re3-f46461331ca96cc894020a559b0a9642ebd2f53d.tar.zst
re3-f46461331ca96cc894020a559b0a9642ebd2f53d.zip
-rw-r--r--src/core/Timer.cpp133
1 files changed, 83 insertions, 50 deletions
diff --git a/src/core/Timer.cpp b/src/core/Timer.cpp
index b0947d65..77f26a8b 100644
--- a/src/core/Timer.cpp
+++ b/src/core/Timer.cpp
@@ -86,13 +86,14 @@ void CTimer::Shutdown(void)
;
}
+#ifdef FIX_BUGS
void CTimer::Update(void)
{
-#ifdef FIX_BUGS
static double frameTimeLogical = 0.0;
static double frameTimeFraction = 0.0;
static double frameTimeFractionScaled = 0.0;
-#endif
+ double frameTime;
+ double dblUpdInMs;
m_snPreviousTimeInMilliseconds = m_snTimeInMilliseconds;
@@ -108,43 +109,99 @@ void CTimer::Update(void)
float updInCyclesScaled = GetIsPaused() ? updInCycles : updInCycles * ms_fTimeScale;
- double frameTime = updInCyclesScaled / (double)_nCyclesPerMS;
+ frameTime = updInCyclesScaled / (double)_nCyclesPerMS;
-#ifdef FIX_BUGS
- // count frames as if we're running at 30 fps
- m_LogicalFramesPassed = 0;
- frameTimeLogical += ((double)updInCycles / (double)_nCyclesPerMS);
- while (frameTimeLogical >= 1000.0 / 30.0) {
- frameTimeLogical -= 1000.0 / 30.0;
- m_LogicalFramesPassed++;
- }
- m_LogicalFrameCounter += m_LogicalFramesPassed;
+ dblUpdInMs = (double)updInCycles / (double)_nCyclesPerMS;
+ }
+ else
+#endif
+ {
+ RsTimerType timer = RsTimer();
+
+ RsTimerType updInMs = timer - oldPcTimer;
+
+ frameTime = (double)updInMs * ms_fTimeScale;
+
+ oldPcTimer = timer;
+
+ dblUpdInMs = (double)updInMs;
+ }
+
+ // count frames as if we're running at 30 fps
+ m_LogicalFramesPassed = 0;
+ frameTimeLogical += dblUpdInMs;
+ while (frameTimeLogical >= 1000.0 / 30.0) {
+ frameTimeLogical -= 1000.0 / 30.0;
+ m_LogicalFramesPassed++;
+ }
+ m_LogicalFrameCounter += m_LogicalFramesPassed;
- frameTimeFraction += (double)updInCycles / (double)_nCyclesPerMS;
- frameTimeFractionScaled += frameTime;
+ frameTimeFraction += dblUpdInMs;
+ frameTimeFractionScaled += frameTime;
- m_snTimeInMillisecondsPauseMode += uint32(frameTimeFraction);
+ m_snTimeInMillisecondsPauseMode += uint32(frameTimeFraction);
+
+ if ( GetIsPaused() )
+ ms_fTimeStep = 0.0f;
+ else
+ {
+ m_snTimeInMilliseconds += uint32(frameTimeFractionScaled);
+ m_snTimeInMillisecondsNonClipped += uint32(frameTimeFractionScaled);
+ ms_fTimeStep = frameTime / 1000.0f * 50.0f;
+ }
+ frameTimeFraction -= uint32(frameTimeFraction);
+ frameTimeFractionScaled -= uint32(frameTimeFractionScaled);
+
+ if ( ms_fTimeStep < 0.01f && !GetIsPaused() && !CSpecialFX::bSnapShotActive)
+ ms_fTimeStep = 0.01f;
+
+ ms_fTimeStepNonClipped = ms_fTimeStep;
+
+ if ( !CRecordDataForGame::IsPlayingBack() )
+ {
+ ms_fTimeStep = Min(3.0f, ms_fTimeStep);
+
+ if ( (m_snTimeInMilliseconds - m_snPreviousTimeInMilliseconds) > 60 )
+ m_snTimeInMilliseconds = m_snPreviousTimeInMilliseconds + 60;
+ }
+
+ if ( CRecordDataForChase::IsRecording() )
+ {
+ ms_fTimeStep = 1.0f;
+ m_snTimeInMilliseconds = m_snPreviousTimeInMilliseconds + 16;
+ }
+
+ m_FrameCounter++;
+}
#else
+void CTimer::Update(void)
+{
+ m_snPreviousTimeInMilliseconds = m_snTimeInMilliseconds;
+
+#ifdef _WIN32
+ if ( (double)_nCyclesPerMS != 0.0 )
+ {
+ LARGE_INTEGER pc;
+ QueryPerformanceCounter(&pc);
+
+ int32 updInCycles = (pc.LowPart - _oldPerfCounter.LowPart); // & 0x7FFFFFFF; pointless
+
+ _oldPerfCounter = pc;
+
+ float updInCyclesScaled = GetIsPaused() ? updInCycles : updInCycles * ms_fTimeScale;
+
+ double frameTime = updInCyclesScaled / (double)_nCyclesPerMS;
+
m_snTimeInMillisecondsPauseMode = m_snTimeInMillisecondsPauseMode + frameTime;
-#endif
if ( GetIsPaused() )
ms_fTimeStep = 0.0f;
else
{
-#ifdef FIX_BUGS
- m_snTimeInMilliseconds += uint32(frameTimeFractionScaled);
- m_snTimeInMillisecondsNonClipped += uint32(frameTimeFractionScaled);
-#else
m_snTimeInMilliseconds = m_snTimeInMilliseconds + frameTime;
m_snTimeInMillisecondsNonClipped = m_snTimeInMillisecondsNonClipped + frameTime;
-#endif
ms_fTimeStep = frameTime / 1000.0f * 50.0f;
}
-#ifdef FIX_BUGS
- frameTimeFraction -= uint32(frameTimeFraction);
- frameTimeFractionScaled -= uint32(frameTimeFractionScaled);
-#endif
}
else
#endif
@@ -157,41 +214,16 @@ void CTimer::Update(void)
oldPcTimer = timer;
-#ifdef FIX_BUGS
- // count frames as if we're running at 30 fps
- m_LogicalFramesPassed = 0;
- frameTimeLogical += (double)updInMs;
- while(frameTimeLogical >= 1000.0 / 30.0) {
- frameTimeLogical -= 1000.0 / 30.0;
- m_LogicalFramesPassed++;
- }
- m_LogicalFrameCounter += m_LogicalFramesPassed;
-
- frameTimeFraction += (double)updInMs;
- frameTimeFractionScaled += frameTime;
-
- m_snTimeInMillisecondsPauseMode += uint32(frameTimeFraction);
-#else
m_snTimeInMillisecondsPauseMode = m_snTimeInMillisecondsPauseMode + frameTime;
-#endif
if ( GetIsPaused() )
ms_fTimeStep = 0.0f;
else
{
-#ifdef FIX_BUGS
- m_snTimeInMilliseconds += uint32(frameTimeFractionScaled);
- m_snTimeInMillisecondsNonClipped += uint32(frameTimeFractionScaled);
-#else
m_snTimeInMilliseconds = m_snTimeInMilliseconds + frameTime;
m_snTimeInMillisecondsNonClipped = m_snTimeInMillisecondsNonClipped + frameTime;
-#endif
ms_fTimeStep = frameTime / 1000.0f * 50.0f;
}
-#ifdef FIX_BUGS
- frameTimeFraction -= uint32(frameTimeFraction);
- frameTimeFractionScaled -= uint32(frameTimeFractionScaled);
-#endif
}
if ( ms_fTimeStep < 0.01f && !GetIsPaused() && !CSpecialFX::bSnapShotActive)
@@ -215,6 +247,7 @@ void CTimer::Update(void)
m_FrameCounter++;
}
+#endif
void CTimer::Suspend(void)
{