From ab6db2bfd9733552d6c25eaa806858ffed0e388a Mon Sep 17 00:00:00 2001 From: kkard2 Date: Sun, 7 Sep 2025 09:29:11 +0200 Subject: texture --- sponge.h | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'sponge.h') diff --git a/sponge.h b/sponge.h index 2978e0e..5229bd9 100644 --- a/sponge.h +++ b/sponge.h @@ -1,15 +1,15 @@ #include typedef struct { - // TODO(kard): define byte order - uint32_t *pixels; + uint32_t *pixels; // AARRGGBB uint32_t width; uint32_t height; uint32_t stride; } sponge_Texture; -void sponge_clear(sponge_Texture c, uint32_t color); -void sponge_draw_rect(sponge_Texture c, uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t color); +void sponge_clear (sponge_Texture c, uint32_t color); +void sponge_draw_rect (sponge_Texture c, uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t color); +void sponge_draw_texture(sponge_Texture c, uint32_t x0, uint32_t y0, sponge_Texture tex); // TODO(kard): prefix stripping @@ -31,5 +31,24 @@ void sponge_draw_rect(sponge_Texture c, uint32_t x0, uint32_t y0, uint32_t x1, u } } +void sponge_draw_texture(sponge_Texture c, uint32_t x0, uint32_t y0, sponge_Texture tex) { + uint32_t *row_dst = c.pixels + (y0 * c.stride); + uint32_t *row_src = tex.pixels; + uint32_t x1 = x0 + tex.width; + uint32_t y1 = y0 + tex.height; + + if (x1 >= c.width) + x1 = c.width - 1; + if (y1 >= c.height) + y1 = c.height - 1; + + for (uint32_t y = y0; y <= y1; y++, row_src += tex.stride, row_dst += c.stride) { + // TODO(kard): memcpy? + for (uint32_t x = x0, x_src = 0; x <= x1; x++, x_src++) { + row_dst[x] = row_src[x_src]; + } + } +} + #endif // SPONGE_IMPLEMENTATION -- cgit v1.3.1