2025-04-21 21:14:23 +08:00

68 lines
1.8 KiB
C#

namespace TEngine
{
public sealed partial class Debugger
{
private sealed class FpsCounter
{
private float _updateInterval;
private float _currentFps;
private int _frames;
private float _accumulator;
private float _timeLeft;
public FpsCounter(float updateInterval)
{
if (updateInterval <= 0f)
{
Log.Error("Update interval is invalid.");
return;
}
_updateInterval = updateInterval;
Reset();
}
public float UpdateInterval
{
get => _updateInterval;
set
{
if (value <= 0f)
{
Log.Error("Update interval is invalid.");
return;
}
_updateInterval = value;
Reset();
}
}
public float CurrentFps => _currentFps;
public void Update(float elapseSeconds, float realElapseSeconds)
{
_frames++;
_accumulator += realElapseSeconds;
_timeLeft -= realElapseSeconds;
if (_timeLeft <= 0f)
{
_currentFps = _accumulator > 0f ? _frames / _accumulator : 0f;
_frames = 0;
_accumulator = 0f;
_timeLeft += _updateInterval;
}
}
private void Reset()
{
_currentFps = 0f;
_frames = 0;
_accumulator = 0f;
_timeLeft = 0f;
}
}
}
}