From c055eeef6d41269d11b2ddf7f9aba6f8867da65d Mon Sep 17 00:00:00 2001 From: Nikita Kostovsky Date: Tue, 23 Dec 2025 15:28:05 +0100 Subject: initial commit --- core/src/cpp/fps_counter.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 core/src/cpp/fps_counter.cpp (limited to 'core/src/cpp/fps_counter.cpp') 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 + +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(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; + } +} -- cgit v1.2.3-70-g09d2