summaryrefslogtreecommitdiff
path: root/core/src/cpp/fps_counter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/cpp/fps_counter.cpp')
-rw-r--r--core/src/cpp/fps_counter.cpp41
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;
+ }
+}