*
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
#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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user