@@ -1718,6 +1718,14 @@ void CCore::UpdateRecentlyPlayed()
17181718 CCore::GetSingleton ().SaveConfig ();
17191719}
17201720
1721+ //
1722+ // Called just before GTA calculates frame time deltas
1723+ //
1724+ void CCore::OnGameTimerUpdate ()
1725+ {
1726+ ApplyQueuedFrameRateLimit ();
1727+ }
1728+
17211729//
17221730// Recalculate FPS limit to use
17231731//
@@ -1793,34 +1801,47 @@ void CCore::ApplyFrameRateLimit(uint uiOverrideRate)
17931801
17941802 uint uiUseRate = uiOverrideRate != -1 ? uiOverrideRate : m_uiFrameRateLimit;
17951803
1796- TIMING_GRAPH (" Limiter" );
1797-
17981804 if (uiUseRate < 1 )
17991805 return DoReliablePulse ();
18001806
1801- if (m_DiagnosticDebug != EDiagnosticDebug::D3D_6732)
1802- Sleep ( 1 ); // Make frame rate smoother maybe
1807+ // Apply previous frame rate if is hasn't been done yet
1808+ ApplyQueuedFrameRateLimit ();
18031809
1804- // Calc required time in ms between frames
1805- const double dTargetTimeToUse = 1000.0 / uiUseRate;
1806-
1807- while (true )
1808- {
1809- // See if we need to wait
1810- double dSpare = dTargetTimeToUse - m_FrameRateTimer.Get ();
1811- if (dSpare <= 0.0 )
1812- break ;
1813- if (dSpare >= 2.0 )
1814- Sleep (1 );
1815- }
1816- m_FrameRateTimer.Reset ();
1810+ // Limit is usually applied in OnGameTimerUpdate
1811+ m_uiQueuedFrameRate = uiUseRate;
1812+ m_bQueuedFrameRateValid = true ;
18171813
18181814 DoReliablePulse ();
18191815
18201816 TIMING_GRAPH (" FrameEnd" );
18211817 TIMING_GRAPH (" " );
18221818}
18231819
1820+ //
1821+ // Frame rate limit (wait) is done here.
1822+ //
1823+ void CCore::ApplyQueuedFrameRateLimit ()
1824+ {
1825+ if (m_bQueuedFrameRateValid)
1826+ {
1827+ m_bQueuedFrameRateValid = false ;
1828+ // Calc required time in ms between frames
1829+ const double dTargetTimeToUse = 1000.0 / m_uiQueuedFrameRate;
1830+
1831+ while (true )
1832+ {
1833+ // See if we need to wait
1834+ double dSpare = dTargetTimeToUse - m_FrameRateTimer.Get ();
1835+ if (dSpare <= 0.0 )
1836+ break ;
1837+ if (dSpare >= 2.0 )
1838+ Sleep (1 );
1839+ }
1840+ m_FrameRateTimer.Reset ();
1841+ TIMING_GRAPH (" Limiter" );
1842+ }
1843+ }
1844+
18241845//
18251846// DoReliablePulse
18261847//
0 commit comments