78 lines
1.5 KiB
C++
78 lines
1.5 KiB
C++
#include "FrameCounter.h"
|
|
#include "Timer.h"
|
|
|
|
namespace LifeCore
|
|
{
|
|
FrameCounter::FrameCounter()
|
|
:fps(0.0f), frame_range(50), avg_fps(0.0f), time_elapsed(0.0f),
|
|
frame_id(0), time_elapsed_avg(0.0f), buffer_pos(0)
|
|
{
|
|
timer = new Timer();
|
|
prev_time = new float[frame_range];
|
|
for(int i = 0; i < frame_range; i++)
|
|
prev_time[i] = 0.0f;
|
|
}
|
|
FrameCounter::~FrameCounter()
|
|
{
|
|
delete[] prev_time;
|
|
}
|
|
float FrameCounter::GetFps()
|
|
{
|
|
return fps;
|
|
}
|
|
float FrameCounter::GetFpsAvg()
|
|
{
|
|
return avg_fps;
|
|
}
|
|
float FrameCounter::GetTimeElapled()
|
|
{
|
|
return time_elapsed;
|
|
}
|
|
float FrameCounter::GetTimeElapsedAvg()
|
|
{
|
|
return time_elapsed_avg;
|
|
}
|
|
void FrameCounter::SetFrameRange(int range)
|
|
{
|
|
frame_range = range;
|
|
buffer_pos = 0;
|
|
if(prev_time!=0)
|
|
delete[] prev_time;
|
|
|
|
prev_time = new float[frame_range];
|
|
for(int i = 0; i < frame_range; i++)
|
|
prev_time[i] = 0.0f;
|
|
}
|
|
int FrameCounter::GetFrameId()
|
|
{
|
|
return frame_id;
|
|
}
|
|
void FrameCounter::OnFrameEnd()
|
|
{
|
|
timer->Stop();
|
|
|
|
//get frame time elapsed
|
|
time_elapsed = timer->getTimeElapsed();
|
|
//store time elapsed in buffer
|
|
prev_time[frame_id % frame_range] = time_elapsed;
|
|
//fix offset
|
|
buffer_pos++;
|
|
if(buffer_pos >= frame_range)
|
|
buffer_pos = 0;
|
|
|
|
fps = 1.0f / time_elapsed;
|
|
|
|
//compute average time elapsed
|
|
float sum = 0.0f;
|
|
for(int i = 0; i < frame_range; i++)
|
|
sum += prev_time[i];
|
|
|
|
time_elapsed_avg = sum / (float)frame_range;
|
|
|
|
avg_fps = 1.0f / time_elapsed_avg;
|
|
|
|
frame_id++;
|
|
|
|
timer->Start();
|
|
}
|
|
} |