diff options
Diffstat (limited to 'core/src/cpp/fps_counter.cpp')
| -rw-r--r-- | core/src/cpp/fps_counter.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/core/src/cpp/fps_counter.cpp b/core/src/cpp/fps_counter.cpp new file mode 100644 index 0000000..fe4233d --- /dev/null +++ b/core/src/cpp/fps_counter.cpp @@ -0,0 +1,41 @@ +#include "fps_counter.h" + +#include <SDL_render.h> + +FPS_Counter::FPS_Counter(SDL_Renderer* renderer) + // TODO: cleanup fucking hardcode everywhere + : renderer{renderer} + , numbers{renderer, "numbers.bmp", 24} +{ +} + +void FPS_Counter::draw() +{ + fps_cur++; + + double dt = std::chrono::duration<double>(Clock::now() - timestamp).count(); + + // update current FPS reading every 300 ms + // TODO: rewrite with type safety + if (dt >= .3) + { + fps_prev = fps_cur / dt; + fps_cur = 0; + timestamp = Clock::now(); + } + + // first character will be drawn here + SDL_Rect dst = {4, 16, numbers.width, numbers.height}; + + // extract individual digits of fps_prev + for (const char c : std::to_string(fps_prev)) + { + // crude conversion of numeric characters to int: '7'-'0'=7 + SDL_Rect src = numbers.rect(c - '0'); + // draw current digit + SDL_RenderCopy(renderer, numbers.texture, &src, &dst); + // draw characters left-to-right, +4 for letter spacing + // TODO: add padding directly to the .bmp file + dst.x += numbers.width + 4; + } +} |
