Dim cInc As Single
Dim PerfFrequency As Currency, PerfTime As Currency, RealFPS As Double
Dim StartTime As Currency, EndTime As Currency, m_strCaption As String
Call QueryPerformanceFrequency(PerfFrequency)
m_Engine.DesiredFramerate = 1000 \ (1000 \ ClipValue(m_Engine.DesiredFramerate, c_lngMinFramerate, c_lngMaxFramerate))
m_Engine.Running = True
Do While m_Engine.Running = True
If m_booCritical Then
DoEvents
Else
If QueryPerformanceCounter(PerfTime) = 0 Then
CurrentTime = GetTickCount
StartTime = CurrentTime
Else
CurrentTime = GetTickCount
StartTime = Int((PerfTime / PerfFrequency) * 1000)
End If
If LastTime = 0 Then LastTime = CurrentTime
FramesToRender = Abs(CurrentTime - LastTime) + FramerateBuildup
FramerateBuildup = 0
MSPerFrame = 1000 \ m_Engine.DesiredFramerate
FramerateBuildup = FramesToRender Mod MSPerFrame
If m_Engine.BalanceFramerate Then
FramesToRender = FramesToRender \ MSPerFrame
Else
FramesToRender = 1
End If
If FramesToRender > c_lngMaxFrameskip Then FramesToRender = c_lngMaxFrameskip
If FramesToRender > 0 Then
If m_Engine.Paused Then
FramesToRender = 0
Else
For RenderFrames = 1 To FramesToRender
If m_Engine.Paused Then Else m_Engine.Update
IncUPS = IncUPS + 1
If m_Engine.Running = False Then Exit For: Exit Do
Next RenderFrames
End If
If m_Engine.Running Then Redraw
If m_GFX.Window.WindowState = 1 Then
Else
If m_Engine.Running Then m_GFX.FlipImage m_Backbuffer
End If
IncFPS = IncFPS + 1
Else
If m_Engine.HarassCPU Then Else Call SleepEx(1, True)
End If
If m_Engine.Running = False Then Exit Do
If QueryPerformanceCounter(PerfTime) = 0 Then
EndTime = GetTickCount
Else
EndTime = Int((PerfTime / PerfFrequency) * 1000)
End If
If m_Engine.Running = False Then Exit Do
If Int(CurrentTime \ 1000) <> Int(LastTime \ 1000) Then
CurrentFPS = IncFPS
CurrentUPS = IncUPS
IncFPS = 0
IncUPS = 0
End If
LastTime = CurrentTime
DoEvents
End If
Loop
Shutdown