summaryrefslogtreecommitdiffhomepage
path: root/src
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
parent9eefcb7939fd6189037412c8269feab27e5c2036 (diff)
downloadraylib-d62a2f793fdf10f677a2bf8a31a6734c9788a0dd.tar.gz
raylib-d62a2f793fdf10f677a2bf8a31a6734c9788a0dd.zip
Improved GetFPS() calculation for average
Diffstat (limited to 'src')
-rw-r--r--src/core.c23
-rw-r--r--src/text.c19
2 files changed, 23 insertions, 19 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
diff --git a/src/text.c b/src/text.c
index 074fcdb2..d2562179 100644
--- a/src/text.c
+++ b/src/text.c
@@ -768,24 +768,7 @@ void UnloadFont(Font font)
// NOTE: Uses default font
void DrawFPS(int posX, int posY)
{
- // NOTE: We are rendering fps every certain time for better viewing on high framerates
-
- static int fps = 0;
- static int counter = 0;
- static int refreshRate = 20;
-
- if (counter < refreshRate) counter++;
- else
- {
- fps = GetFPS();
- refreshRate = fps;
- counter = 0;
- }
-
- // TODO: Find a better way to calculate FPS, maybe calculate the mean of multiple measures?
-
- // NOTE: We have rounding errors every frame, so it oscillates a lot
- DrawText(TextFormat("%2i FPS", fps), posX, posY, 20, LIME);
+ DrawText(TextFormat("%2i FPS", GetFPS()), posX, posY, 20, LIME);
}
// Draw text (using default font)