diff options
| author | Ray <[email protected]> | 2020-02-19 12:20:15 +0100 |
|---|---|---|
| committer | Ray <[email protected]> | 2020-02-19 12:20:15 +0100 |
| commit | d62a2f793fdf10f677a2bf8a31a6734c9788a0dd (patch) | |
| tree | 4e196d3729753d6e960f2b91cfb19c1d4b610fe2 /src/core.c | |
| parent | 9eefcb7939fd6189037412c8269feab27e5c2036 (diff) | |
| download | raylib-d62a2f793fdf10f677a2bf8a31a6734c9788a0dd.tar.gz raylib-d62a2f793fdf10f677a2bf8a31a6734c9788a0dd.zip | |
Improved GetFPS() calculation for average
Diffstat (limited to 'src/core.c')
| -rw-r--r-- | src/core.c | 23 |
1 files changed, 22 insertions, 1 deletions
@@ -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 |
