Files
LifeProject/LifeCore/FrameCounter.cpp
T

78 lines
1.5 KiB
C++
Raw Normal View History

2025-05-13 02:46:21 +03:00
#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();
}
}