summaryrefslogtreecommitdiff
path: root/core/src/cpp/fps_counter.cpp
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;
    }
}