Moderator: MacroQuest Developers
Code: Select all
[color=red]
if (Elapsed)
{[/color]
// less than one second?
if (Elapsed<1000)
{
// elapsed 150 ms
// extrapolate. how many frame arrays would fit in one second?
FPS=(float)(1000.0f/(float)Elapsed);
// 6.66667=1000/150
// now multiply by the number of frames we've gone through
// Frames 10
FPS*=(float)Frames;
// 66.6667= FPS * 10
// FPS=
}
else
{
// Frames = 100
// Elapsed = 2000ms
// FPS = 100 / (2000/1000) = 50
// interpolate. how many seconds did it take for our frame array?
FPS=(float)Frames/(float)((float)Elapsed/1000.0f); // Frames / number of seconds
}
[color=red] }
else
FPS=999.0f;[/color]
// advance frame count
CurrentFrame++;
Code: Select all
VOID ProcessFrame()
{
// Update frame array
DWORD Now=FrameArray[CurrentFrame]=GetTickCount();
DWORD FirstFrame=0;
DWORD Frames=CurrentFrame;
if (bFrameArrayFilled)
{
FirstFrame=CurrentFrame+1;
if (FirstFrame>FRAME_COUNT)
{
FirstFrame=FRAME_COUNT;
}
Frames=FRAME_COUNT;
}
// Calculate time this frame
DWORD LastFrame=CurrentFrame-1;
if (LastFrame>FRAME_COUNT)
{
if (bFrameArrayFilled)
{
LastFrame=FRAME_COUNT;
FrameTime=Now-FrameArray[LastFrame];
}
else
FrameTime=0;
}
else
FrameTime=Now-FrameArray[LastFrame];
// Calculate FPS
// Get amount of time between first frame and now
DWORD Elapsed=Now-FrameArray[FirstFrame];
if (Elapsed)
{
// less than one second?
if (Elapsed<1000)
{
// elapsed 150 ms
// extrapolate. how many frame arrays would fit in one second?
FPS=(float)(1000.0f/(float)Elapsed);
// 6.66667=1000/150
// now multiply by the number of frames we've gone through
// Frames 10
FPS*=(float)Frames;
// 66.6667= FPS * 10
// FPS=
}
else
{
// Frames = 100
// Elapsed = 2000ms
// FPS = 100 / (2000/1000) = 50
// interpolate. how many seconds did it take for our frame array?
FPS=(float)Frames/(float)((float)Elapsed/1000.0f); // Frames / number of seconds
}
}
else
FPS=999.0f;
// advance frame count
if (++CurrentFrame>FRAME_COUNT)
{
CurrentFrame=0;
bFrameArrayFilled=1;
}
}



