summaryrefslogtreecommitdiffhomepage
path: root/src/core.c
diff options
context:
space:
mode:
authorRay <[email protected]>2020-02-19 12:20:15 +0100
committerRay <[email protected]>2020-02-19 12:20:15 +0100
commitd62a2f793fdf10f677a2bf8a31a6734c9788a0dd (patch)
tree4e196d3729753d6e960f2b91cfb19c1d4b610fe2 /src/core.c
parent9eefcb7939fd6189037412c8269feab27e5c2036 (diff)
downloadraylib-d62a2f793fdf10f677a2bf8a31a6734c9788a0dd.tar.gz
raylib-d62a2f793fdf10f677a2bf8a31a6734c9788a0dd.zip
Improved GetFPS() calculation for average
Diffstat (limited to 'src/core.c')
-rw-r--r--src/core.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/core.c b/src/core.c
index 2c314112..ecf2b284 100644
--- a/src/core.c
+++ b/src/core.c
@@ -1611,9 +1611,30 @@ void SetTargetFPS(int fps)
}
// Returns current FPS
+// NOTE: We calculate an average framerate
int GetFPS(void)
{
- return (int)roundf(1.0f/GetFrameTime());
+ #define FPS_CAPTURE_FRAMES_COUNT 30 // 30 captures
+ #define FPS_AVERAGE_TIME_SECONDS 0.5f // 500 millisecondes
+ #define FPS_STEP (FPS_AVERAGE_TIME_SECONDS/FPS_CAPTURE_FRAMES_COUNT)
+
+ static int index = 0;
+ static float history[FPS_CAPTURE_FRAMES_COUNT] = { 0 };
+ static float average = 0, last = 0;
+ float fpsFrame = GetFrameTime();
+
+ if (fpsFrame == 0) return 0;
+
+ if ((GetTime() - last) > FPS_STEP)
+ {
+ last = GetTime();
+ index = (index + 1)%FPS_CAPTURE_FRAMES_COUNT;
+ average -= history[index];
+ history[index] = fpsFrame/FPS_CAPTURE_FRAMES_COUNT;
+ average += history[index];
+ }
+
+ return (int)roundf(1.0f/average);
}
// Returns time in seconds for last frame drawn