engine: wip added setup for drawing pixels
authorLukas Krickl <lukas@krickl.dev>
Mon, 23 Feb 2026 20:33:30 +0000 (21:33 +0100)
committerLukas Krickl <lukas@krickl.dev>
Mon, 23 Feb 2026 20:33:30 +0000 (21:33 +0100)
15 files changed:
src/lrts.c
src/lrts.h
src/p_draw.h [new file with mode: 0644]
src/p_r_sdl/p_draw.c [new file with mode: 0644]
src/r_color.c [new file with mode: 0644]
src/r_color.h [new file with mode: 0644]
src/r_render.c [new file with mode: 0644]
src/r_render.h [new file with mode: 0644]
src/t_camera.c [new file with mode: 0644]
src/t_camera.h [new file with mode: 0644]
src/t_map.c [new file with mode: 0644]
src/t_map.h [new file with mode: 0644]
src/u_arena.c
src/u_assert.h
src/u_math.h

index ab3ae2f0a55c236e891cc321018b4229172b1580..f38a9fae8c3455208f123679ea193829f636ebba 100644 (file)
@@ -1,6 +1,7 @@
 #include "u_stdio.h"
 #include "u_defs.h"
 #include "p_platform.h"
+#include "r_render.h"
 
 struct lrts_config lrts_global_cfg;
 
@@ -32,6 +33,7 @@ int lrts_main(int argc, char **argv) {
 
        while (!lrts_cfg()->exit) {
                p_poll_events();
+               r_render_frame();
        }
 
        p_renderer_finish();
index 0f83a5fc8a860e92a523f313697f44b8eb6f2719..04f17aff266ab15ab02d81a6a1505d0627e87dc9 100644 (file)
@@ -5,9 +5,9 @@
 /**
  * System includes
  */
+#include "config.h"
 #include "u_assert.h"
 #include "u_defs.h"
-#include "config.h"
 
 
 
@@ -36,6 +36,7 @@
 
 #ifdef LRTS_RENDERER_SDL
 #include "p_r_sdl/p_init.c"
+#include "p_r_sdl/p_draw.c"
 #endif
 
 #ifdef LRTS_RENDERER_CLI
 #include "t_tile.c"
 #include "u_log.c"
 #include "u_arena.c"
+#include "t_map.c"
+#include "t_camera.c"
+#include "r_render.c"
+#include "r_color.c"
 
 #endif
 
diff --git a/src/p_draw.h b/src/p_draw.h
new file mode 100644 (file)
index 0000000..13eaeb3
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef P_DRAW_H__
+#define P_DRAW_H__
+
+#include "u_defs.h"
+#include "r_color.h"
+
+
+/* draws a singel pixel directly to the screen */
+void p_draw_pixel(i32 x, i32 y, struct r_color color);
+
+#endif
diff --git a/src/p_r_sdl/p_draw.c b/src/p_r_sdl/p_draw.c
new file mode 100644 (file)
index 0000000..b8dd58e
--- /dev/null
@@ -0,0 +1,7 @@
+#include "../p_draw.h"
+
+void p_draw_pixel(i32 x, i32 y, struct r_color color) {
+       LRTS_UNUSED(x);
+       LRTS_UNUSED(y);
+       LRTS_UNUSED(color);
+}
diff --git a/src/r_color.c b/src/r_color.c
new file mode 100644 (file)
index 0000000..f22a9b2
--- /dev/null
@@ -0,0 +1,9 @@
+
+struct r_color r_color(u8 r, u8 g, u8 b, u8 a) {
+       struct r_color c;
+       c.r = r;
+       c.g = g;
+       c.b = b;
+       c.a = a;
+       return c;
+}
diff --git a/src/r_color.h b/src/r_color.h
new file mode 100644 (file)
index 0000000..a968e9f
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef R_COLOR_H__
+#define R_COLOR_H__
+
+#include "u_defs.h"
+
+struct r_color {
+       u8 r;
+       u8 g;
+       u8 b;
+       u8 a;
+};
+
+struct r_color r_color(u8 r, u8 g, u8 b, u8 a);
+
+#endif
diff --git a/src/r_render.c b/src/r_render.c
new file mode 100644 (file)
index 0000000..8c9e827
--- /dev/null
@@ -0,0 +1,9 @@
+#include "r_render.h"
+#include "r_color.h"
+#include "p_draw.h"
+
+void r_render_frame() {
+       struct r_color c = r_color(0, 0, 0, 0xFF);
+
+       p_draw_pixel(0, 0, c);
+}
diff --git a/src/r_render.h b/src/r_render.h
new file mode 100644 (file)
index 0000000..741be96
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef R_RENDER_H__
+#define R_RENDER_H__
+
+void r_render_frame();
+
+#endif
diff --git a/src/t_camera.c b/src/t_camera.c
new file mode 100644 (file)
index 0000000..848931f
--- /dev/null
@@ -0,0 +1,18 @@
+#include "t_camera.h"
+
+struct t_camera t_camera_init(i32 viewport_x, i32 viewport_y) {
+       struct t_camera c;
+       c.x = 0;
+       c.y = 0;
+       c.viewport_x = viewport_x;
+       c.viewport_y = viewport_y;
+
+       return c;
+}
+
+void t_camera_scroll(struct t_camera *c, i32 by_x, i32 by_y) {
+       c->x += by_x;
+       c->y += by_y;
+       U_CLAMP(c->x, 0, c->viewport_x);
+       U_CLAMP(c->y, 0, c->viewport_y);
+}
diff --git a/src/t_camera.h b/src/t_camera.h
new file mode 100644 (file)
index 0000000..5b75712
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef T_CAMERA_H__
+#define T_CAMERA_H__
+
+#include "u_defs.h"
+
+struct t_camera {
+       i32 x;
+       i32 y;
+
+       i32 viewport_x;
+       i32 viewport_y;
+};
+
+struct t_camera t_camera_init(i32 viewport_x, i32 viewport_y);
+
+void t_camera_scroll(struct t_camera *c, i32 by_x, i32 by_y);
+
+#endif
diff --git a/src/t_map.c b/src/t_map.c
new file mode 100644 (file)
index 0000000..8bdca94
--- /dev/null
@@ -0,0 +1 @@
+#include "t_map.h"
diff --git a/src/t_map.h b/src/t_map.h
new file mode 100644 (file)
index 0000000..e38c695
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef T_MAP_H__
+#define T_MAP_H__
+
+#include "u_defs.h"
+#include "t_tile.h"
+
+#define T_MAP_MAX_W 256
+#define T_MAP_MAX_H 256
+
+struct t_map {
+       u16 width;
+       u16 height;
+       
+       struct t_tile tiles[T_MAP_MAX_W * T_MAP_MAX_H];
+};
+
+#endif
index 9349a784006055250f5f3975860cd4923a3b1516..1099eff585dcfb02c40b4751b436db1f14f3d4df 100644 (file)
@@ -22,8 +22,8 @@ void *u_arena_alloc(struct u_arena *a, u32 n) {
        void *p = NULL;
        
        lrts_assert(a);
-       lrts_assert(a.err == U_ERRNO_OK);
-       lrts_assert(a.data);
+       lrts_assert(a->err == U_ERRNO_OK);
+       lrts_assert(a->data);
                
        if (new_o_index >= a->o_max) {
                u_log(U_LOG_ERR, "Unable to allocate %d objects from arena\n", n);
index 578c0e7feef605c1aa1b986792faf8abadb81a10..411b8d9be6a1e6f78e607cfdfac2eb3de2a5ce68 100644 (file)
@@ -2,7 +2,7 @@
 #define U_ASSERT_H__
 
 
-#ifdef DEBUG
+#ifdef LRTS_DEBUG
 
 #include <assert.h>
 
index 1ce953c320401ee747fef881b8950debf055bd9a..fd7ebf035659c99b51322ac2de60bc2d07645741 100644 (file)
@@ -18,4 +18,7 @@ struct u_fp u_fp_mul(struct u_fp a, struct u_fp b);
 struct u_fp u_fp_div(struct u_fp a, struct u_fp b);
 struct u_fp u_fp_mod(struct u_fp a, struct u_fp b);
 
+/* Clamps an integer value between min and max */
+#define U_CLAMP(v, min, max) if (v < min) { v = min; } if (v > max) { v = max; }
+
 #endif