summaryrefslogtreecommitdiff
path: root/sponge.h
diff options
context:
space:
mode:
Diffstat (limited to 'sponge.h')
-rw-r--r--sponge.h27
1 files changed, 23 insertions, 4 deletions
diff --git a/sponge.h b/sponge.h
index 2978e0e..5229bd9 100644
--- a/sponge.h
+++ b/sponge.h
@@ -1,15 +1,15 @@
#include <stdint.h>
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