blob: fe4233d3d51888fcf5ffd55fa0378cb20730e744 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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;
}
}
|