From 519dc3ded4459517c3f5605274413a005ab4cc6e Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Mon, 23 Feb 2026 21:33:30 +0100 Subject: [PATCH] engine: wip added setup for drawing pixels --- src/lrts.c | 2 ++ src/lrts.h | 7 ++++++- src/p_draw.h | 11 +++++++++++ src/p_r_sdl/p_draw.c | 7 +++++++ src/r_color.c | 9 +++++++++ src/r_color.h | 15 +++++++++++++++ src/r_render.c | 9 +++++++++ src/r_render.h | 6 ++++++ src/t_camera.c | 18 ++++++++++++++++++ src/t_camera.h | 18 ++++++++++++++++++ src/t_map.c | 1 + src/t_map.h | 17 +++++++++++++++++ src/u_arena.c | 4 ++-- src/u_assert.h | 2 +- src/u_math.h | 3 +++ 15 files changed, 125 insertions(+), 4 deletions(-) create mode 100644 src/p_draw.h create mode 100644 src/p_r_sdl/p_draw.c create mode 100644 src/r_color.c create mode 100644 src/r_color.h create mode 100644 src/r_render.c create mode 100644 src/r_render.h create mode 100644 src/t_camera.c create mode 100644 src/t_camera.h create mode 100644 src/t_map.c create mode 100644 src/t_map.h diff --git a/src/lrts.c b/src/lrts.c index ab3ae2f..f38a9fa 100644 --- a/src/lrts.c +++ b/src/lrts.c @@ -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(); diff --git a/src/lrts.h b/src/lrts.h index 0f83a5f..04f17af 100644 --- a/src/lrts.h +++ b/src/lrts.h @@ -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 @@ -50,6 +51,10 @@ #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 index 0000000..13eaeb3 --- /dev/null +++ b/src/p_draw.h @@ -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 index 0000000..b8dd58e --- /dev/null +++ b/src/p_r_sdl/p_draw.c @@ -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 index 0000000..f22a9b2 --- /dev/null +++ b/src/r_color.c @@ -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 index 0000000..a968e9f --- /dev/null +++ b/src/r_color.h @@ -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 index 0000000..8c9e827 --- /dev/null +++ b/src/r_render.c @@ -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 index 0000000..741be96 --- /dev/null +++ b/src/r_render.h @@ -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 index 0000000..848931f --- /dev/null +++ b/src/t_camera.c @@ -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 index 0000000..5b75712 --- /dev/null +++ b/src/t_camera.h @@ -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 index 0000000..8bdca94 --- /dev/null +++ b/src/t_map.c @@ -0,0 +1 @@ +#include "t_map.h" diff --git a/src/t_map.h b/src/t_map.h new file mode 100644 index 0000000..e38c695 --- /dev/null +++ b/src/t_map.h @@ -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 diff --git a/src/u_arena.c b/src/u_arena.c index 9349a78..1099eff 100644 --- a/src/u_arena.c +++ b/src/u_arena.c @@ -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); diff --git a/src/u_assert.h b/src/u_assert.h index 578c0e7..411b8d9 100644 --- a/src/u_assert.h +++ b/src/u_assert.h @@ -2,7 +2,7 @@ #define U_ASSERT_H__ -#ifdef DEBUG +#ifdef LRTS_DEBUG #include diff --git a/src/u_math.h b/src/u_math.h index 1ce953c..fd7ebf0 100644 --- a/src/u_math.h +++ b/src/u_math.h @@ -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 -- 2.30.2