debug font: Added basic pixelart font.
authorLukas Krickl <lukas@krickl.dev>
Thu, 26 Feb 2026 20:38:49 +0000 (21:38 +0100)
committerLukas Krickl <lukas@krickl.dev>
Thu, 26 Feb 2026 20:38:49 +0000 (21:38 +0100)
The font is included as a C header file and was generated using a png
and a quick script.
The font is not complete but good enough as a built-in way of rendering
text.

src/p_r_sdl/p_draw.c
src/r_render.c
src/u_debug.c
src/u_debug.h
src/u_debug_font.h [new file with mode: 0644]

index 5f2ca674b4a891ea2693e6340065647805d3ab77..468b1bd6fb95598e6fedcb16f5059eb75024478e 100644 (file)
@@ -33,7 +33,7 @@ void p_draw_present(void) {
        dst.w = screen->w;
        dst.h = screen->h;
 
-       SDL_BlitSurfaceScaled(r_target, NULL, screen, &dst, SDL_SCALEMODE_PIXELART);
+       SDL_BlitSurfaceScaled(r_target, NULL, screen, &dst, SDL_SCALEMODE_LINEAR);
        SDL_UpdateWindowSurface(p_main_window);
 }
 
index c7d89d0f84c8882854419118d5989798ef59ed18..88626196b4994463769969985c83f5b4761e40ed 100644 (file)
@@ -27,10 +27,9 @@ void r_draw_pixel(struct r_framebuffer *fb, i32 x, i32 y, r_color color) {
 }
 
 void r_render_debug(void) {
-       /* struct lrts_state *state = lrts_state(); */
+       struct lrts_state *state = lrts_state();
 
-       u_debug_draw_text(0, 0, "01");
-       /*u_debug_draw_text(0, 0, "FPS: %d", state->fps); */
+       u_debug_draw_text(0, 0, "FPS: %02d", state->fps); 
 }
 
 void r_render_frame(void) {
index 7ba391838d64ad1828b711efabacb5ca63a68171..bd4eda84b424e76c21e21ec8916a8887df6c9168 100644 (file)
@@ -1,34 +1,12 @@
 #include "u_debug.h"
 
 #include "r_render.h"
+#include "u_debug_font.h"
 
 #define U_DEBUG_FONT_W 8
 #define U_DEBUG_FONT_H 8
 
-const u8 debug_font_num[10 * U_DEBUG_FONT_H] = {
-       /* 0 */
-       0xFE,
-       0x82,
-       0x82,
-       0x82,
-       0x82,
-       0x82,
-       0x82,
-       0xFF,
-
-       /* 1 */
-       0x80,
-       0x80,
-       0x80,
-       0x80,
-       0x80,
-       0x80,
-       0x80,
-       0x80,
-
-       /* 2 */
-
-};
+#define U_DEBUG_FIRST_PRINT_CHAR 0x20
 
 r_color u_debug_colors[2] = {0x00000000, 0xFFFFFFFF};
 
@@ -51,6 +29,7 @@ void u_debug_draw_char(u32 x, u32 y, const u8 *c) {
 void u_debug_draw_text(u32 x, u32 y, const char *fmt, ...) {
        u32 i = 0;
        u32 len = 0;
+       u32 font_offset = 0;
        char c = 0;
        char buffer[2048];
        va_list args;
@@ -58,16 +37,18 @@ void u_debug_draw_text(u32 x, u32 y, const char *fmt, ...) {
        va_start(args, fmt);
        len = u_vsprintf(buffer, fmt, args);
        va_end(args);
-       
-       LRTS_UNUSED(x);
-       LRTS_UNUSED(y);
+
+       buffer[len] = 0;
 
        for (i = 0; i < len; i++) {
                c = buffer[i];
-               if (c >= '0' && c <= '9') {
-                       u_debug_draw_char(x+U_DEBUG_FONT_W*2*i, y, 
-                                       debug_font_num + (u32)(c - '0') * U_DEBUG_FONT_H);
+               /* not printable */
+               if (c < U_DEBUG_FIRST_PRINT_CHAR) {
+                       continue;
                }
+               font_offset = (u32)(c - U_DEBUG_FIRST_PRINT_CHAR) * U_DEBUG_FONT_H;
+               u_debug_draw_char(x+U_DEBUG_FONT_W*i+U_DEBUG_FONT_W / 2 * i, y, 
+                               u_debug_font + font_offset);
        }
        
 }
index 6f89fe6fd6ca1e846b5c0c58a4a3a329a9f2c904..65bb3022fafbbb6bf9984e70ea14ffa1b349b8e6 100644 (file)
@@ -1,7 +1,6 @@
 #ifndef U_DEBUG_H__
 #define U_DEBUG_H__
 
-#define U_DEBUG_FONT_BYTES 8
 
 /**
  * Daws debug text to the screen
diff --git a/src/u_debug_font.h b/src/u_debug_font.h
new file mode 100644 (file)
index 0000000..4fd8fb7
--- /dev/null
@@ -0,0 +1,262 @@
+#ifndef U_DEBUG_FONT_H__
+#define U_DEBUG_FONT_H__
+
+const u8 u_debug_font[] = {
+       /* char 0x20 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x21 */
+       0x00, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10, 0x00, 
+       /* char 0x22 */
+       0x00, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x23 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x24 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x25 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x26 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x27 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x28 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x29 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x2a */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x2b */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x2c */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x2d */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x2e */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x2f */
+       0x00, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 
+       /* char 0x30 */
+       0x00, 0x38, 0x44, 0x4c, 0x54, 0x64, 0x44, 0x38, 
+       /* char 0x31 */
+       0x00, 0x10, 0x30, 0x10, 0x10, 0x10, 0x10, 0x38, 
+       /* char 0x32 */
+       0x00, 0x38, 0x44, 0x08, 0x10, 0x20, 0x40, 0x7c, 
+       /* char 0x33 */
+       0x00, 0x78, 0x04, 0x04, 0x3c, 0x04, 0x04, 0x78, 
+       /* char 0x34 */
+       0x00, 0x18, 0x28, 0x48, 0x48, 0x7c, 0x08, 0x08, 
+       /* char 0x35 */
+       0x00, 0x7c, 0x40, 0x40, 0x78, 0x04, 0x04, 0x78, 
+       /* char 0x36 */
+       0x00, 0x3c, 0x40, 0x40, 0x78, 0x44, 0x44, 0x38, 
+       /* char 0x37 */
+       0x00, 0x78, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 
+       /* char 0x38 */
+       0x00, 0x38, 0x44, 0x44, 0x38, 0x44, 0x44, 0x38, 
+       /* char 0x39 */
+       0x00, 0x38, 0x44, 0x44, 0x3c, 0x04, 0x08, 0x30, 
+       /* char 0x3a */
+       0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 
+       /* char 0x3b */
+       0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x0c, 0x00, 
+       /* char 0x3c */
+       0x00, 0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 
+       /* char 0x3d */
+       0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 
+       /* char 0x3e */
+       0x00, 0x20, 0x10, 0x08, 0x04, 0x08, 0x10, 0x20, 
+       /* char 0x3f */
+       0x00, 0x38, 0x44, 0x08, 0x10, 0x10, 0x00, 0x10, 
+       /* char 0x40 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x41 */
+       0x00, 0x38, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 
+       /* char 0x42 */
+       0x00, 0x78, 0x44, 0x44, 0x78, 0x44, 0x44, 0x78, 
+       /* char 0x43 */
+       0x00, 0x3c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x3c, 
+       /* char 0x44 */
+       0x00, 0x78, 0x44, 0x44, 0x44, 0x44, 0x44, 0x78, 
+       /* char 0x45 */
+       0x00, 0x78, 0x40, 0x40, 0x70, 0x40, 0x40, 0x78, 
+       /* char 0x46 */
+       0x00, 0x78, 0x40, 0x40, 0x70, 0x40, 0x40, 0x40, 
+       /* char 0x47 */
+       0x00, 0x3c, 0x40, 0x40, 0x40, 0x5c, 0x44, 0x38, 
+       /* char 0x48 */
+       0x00, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 
+       /* char 0x49 */
+       0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 
+       /* char 0x4a */
+       0x00, 0x04, 0x04, 0x04, 0x04, 0x44, 0x44, 0x38, 
+       /* char 0x4b */
+       0x00, 0x44, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 
+       /* char 0x4c */
+       0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7c, 
+       /* char 0x4d */
+       0x00, 0x44, 0x6c, 0x54, 0x44, 0x44, 0x44, 0x44, 
+       /* char 0x4e */
+       0x00, 0x44, 0x44, 0x64, 0x54, 0x4c, 0x44, 0x44, 
+       /* char 0x4f */
+       0x00, 0x38, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 
+       /* char 0x50 */
+       0x00, 0x78, 0x44, 0x44, 0x78, 0x40, 0x40, 0x40, 
+       /* char 0x51 */
+       0x00, 0x38, 0x44, 0x44, 0x44, 0x54, 0x48, 0x34, 
+       /* char 0x52 */
+       0x00, 0x78, 0x44, 0x44, 0x78, 0x50, 0x48, 0x44, 
+       /* char 0x53 */
+       0x00, 0x3c, 0x40, 0x40, 0x38, 0x04, 0x04, 0x78, 
+       /* char 0x54 */
+       0x00, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 
+       /* char 0x55 */
+       0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 
+       /* char 0x56 */
+       0x00, 0x44, 0x44, 0x44, 0x44, 0x28, 0x28, 0x10, 
+       /* char 0x57 */
+       0x00, 0x44, 0x44, 0x44, 0x54, 0x54, 0x7c, 0x28, 
+       /* char 0x58 */
+       0x00, 0x44, 0x44, 0x28, 0x10, 0x28, 0x44, 0x44, 
+       /* char 0x59 */
+       0x00, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0x10, 
+       /* char 0x5a */
+       0x00, 0x7c, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7c, 
+       /* char 0x5b */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x5c */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x5d */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x5e */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x5f */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x60 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x61 */
+       0x00, 0x38, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 
+       /* char 0x62 */
+       0x00, 0x78, 0x44, 0x44, 0x78, 0x44, 0x44, 0x78, 
+       /* char 0x63 */
+       0x00, 0x3c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x3c, 
+       /* char 0x64 */
+       0x00, 0x78, 0x44, 0x44, 0x44, 0x44, 0x44, 0x78, 
+       /* char 0x65 */
+       0x00, 0x78, 0x40, 0x40, 0x70, 0x40, 0x40, 0x78, 
+       /* char 0x66 */
+       0x00, 0x78, 0x40, 0x40, 0x70, 0x40, 0x40, 0x40, 
+       /* char 0x67 */
+       0x00, 0x3c, 0x40, 0x40, 0x40, 0x5c, 0x44, 0x38, 
+       /* char 0x68 */
+       0x00, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 
+       /* char 0x69 */
+       0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 
+       /* char 0x6a */
+       0x00, 0x04, 0x04, 0x04, 0x04, 0x44, 0x44, 0x38, 
+       /* char 0x6b */
+       0x00, 0x44, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 
+       /* char 0x6c */
+       0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7c, 
+       /* char 0x6d */
+       0x00, 0x44, 0x6c, 0x54, 0x44, 0x44, 0x44, 0x44, 
+       /* char 0x6e */
+       0x00, 0x44, 0x44, 0x64, 0x54, 0x4c, 0x44, 0x44, 
+       /* char 0x6f */
+       0x00, 0x38, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 
+       /* char 0x70 */
+       0x00, 0x78, 0x44, 0x44, 0x78, 0x40, 0x40, 0x40, 
+       /* char 0x71 */
+       0x00, 0x38, 0x44, 0x44, 0x44, 0x54, 0x48, 0x34, 
+       /* char 0x72 */
+       0x00, 0x78, 0x44, 0x44, 0x78, 0x50, 0x48, 0x44, 
+       /* char 0x73 */
+       0x00, 0x3c, 0x40, 0x40, 0x38, 0x04, 0x04, 0x78, 
+       /* char 0x74 */
+       0x00, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 
+       /* char 0x75 */
+       0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 
+       /* char 0x76 */
+       0x00, 0x44, 0x44, 0x44, 0x44, 0x28, 0x28, 0x10, 
+       /* char 0x77 */
+       0x00, 0x44, 0x44, 0x44, 0x54, 0x54, 0x7c, 0x28, 
+       /* char 0x78 */
+       0x00, 0x44, 0x44, 0x28, 0x10, 0x28, 0x44, 0x44, 
+       /* char 0x79 */
+       0x00, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0x10, 
+       /* char 0x7a */
+       0x00, 0x7c, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7c, 
+       /* char 0x7b */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x7c */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x7d */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x7e */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x7f */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x80 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x81 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x82 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x83 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x84 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x85 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x86 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x87 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x88 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x89 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x8a */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x8b */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x8c */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x8d */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x8e */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x8f */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x90 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x91 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x92 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x93 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x94 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x95 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x96 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x97 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x98 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x99 */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x9a */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x9b */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x9c */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x9d */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x9e */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+       /* char 0x9f */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+};
+#endif