]> git.lizzy.rs Git - dragonblocks_alpha.git/commitdiff
Add FPS counter
authorElias Fleckenstein <eliasfleckenstein@web.de>
Thu, 15 Jul 2021 20:12:05 +0000 (22:12 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Thu, 15 Jul 2021 20:12:05 +0000 (22:12 +0200)
src/client/game.c
src/client/hud.c
src/client/hud.h

index c843ebb3b4ea7ee816366f5cc4f54fed60b9bf99..cbe19a6348089a6c783cc8d370656fc72e8e8944 100644 (file)
 
 static void game_loop(Client *client)
 {
+       HUDElement *fps_hud = hud_add((HUDElementDefinition) {
+               .type = HUD_TEXT,
+               .pos = {-1.0f, -1.0f, 0.0f},
+               .offset = {5, 32},
+               .type_def = {
+                       .text = {
+                               .text = "",
+                               .color = {1.0f, 1.0f, 1.0f},
+                       },
+               },
+       });
+
+       f64 fps_update_timer = 1.0f;
+       int frames = 0;
+
        struct timespec ts, ts_old;
        clock_gettime(CLOCK_REALTIME, &ts_old);
 
@@ -24,6 +39,18 @@ static void game_loop(Client *client)
                f64 dtime = (f64) (ts.tv_sec - ts_old.tv_sec) + (f64) (ts.tv_nsec - ts_old.tv_nsec) / 1000000000.0;
                ts_old = ts;
 
+               if ((fps_update_timer -= dtime) <= 0.0) {
+                       // I don't think anyone will have more than 9999 FPS lol, but I have seen 1000 in jordan4ibanez' video yet so...
+                       // 4 digits for FPS + space + "FPS" + \0
+                       char fps[4 + 1 + 3 + 1];
+                       sprintf(fps, "%d FPS", frames);
+                       hud_change_text(fps_hud, fps);
+                       fps_update_timer += 1.0;
+                       frames = 0;
+               }
+
+               frames++;
+
                glEnable(GL_DEPTH_TEST);
                glEnable(GL_BLEND);
                glEnable(GL_MULTISAMPLE);
index 825cc6a37c6b86ff05759067c73e46d645db333a..6d646337189281996cfb751bd5e1baf0b0b6e8dc 100644 (file)
@@ -93,7 +93,6 @@ bool hud_init()
        hud.font_loc_projection = glGetUniformLocation(hud.font_prog, "projection");
        hud.font_loc_text_color = glGetUniformLocation(hud.font_prog, "textColor");
 
-
        hud.elements = list_create(NULL);
 
        hud.image_mesh = mesh_create();
@@ -108,8 +107,10 @@ static void free_element(void *key, __attribute__((unused)) void *value, __attri
 {
        HUDElement *element = key;
 
-       if (element->def.type == HUD_TEXT)
+       if (element->def.type == HUD_TEXT) {
                font_delete(element->type_data.text);
+               free(element->def.type_def.text.text);
+       }
 
        free(element);
 }
@@ -209,10 +210,21 @@ HUDElement *hud_add(HUDElementDefinition def)
 
        element_transform(element);
 
-       if (element->def.type == HUD_TEXT)
+       if (element->def.type == HUD_TEXT) {
+               element->def.type_def.text.text = strdup(element->def.type_def.text.text);
                element->type_data.text = font_create(element->def.type_def.text.text);
+       }
 
        list_set(&hud.elements, element, NULL);
 
        return element;
 }
+
+void hud_change_text(HUDElement *element, char *text)
+{
+       if (strcmp(element->def.type_def.text.text, text)) {
+               element->def.type_def.text.text = strdup(text);
+               font_delete(element->type_data.text);
+               element->type_data.text = font_create(text);
+       }
+}
index d59c638fed194a68bdacf383735743c46b620762..9224212da1f8e0c0fe88c732123d70effcd2b3a4 100644 (file)
@@ -55,5 +55,6 @@ void hud_deinit();
 void hud_on_resize(int width, int height);
 void hud_render();
 HUDElement *hud_add(HUDElementDefinition def);
+void hud_change_text(HUDElement *element, char *text);
 
 #endif