diff --git a/src/graphics.c b/src/graphics.c index 9b2d7b4..c8b64d9 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -73,23 +73,48 @@ unigi_type_error unigi_graphics_init() { return 0; } -static inline void unigi_graphics_draw(unigi_type_resolution_1d_coord pixel, unigi_type_color color) { +static inline void unigi_graphics_draw(unigi_type_resolution_1d_coord index, unigi_type_color color) { color = color & 0x0FFF; if (unigi_platform_info_depth_bytes < 3) { if (unigi_platform_info_depth_bytes == 1) { - unigi_platform_pixels1[pixel] = unigi_platform_palette1[color]; + unigi_platform_colors1[index] = unigi_platform_palette1[color]; } else { - unigi_platform_pixels2[pixel] = unigi_platform_palette2[color]; + unigi_platform_colors2[index] = unigi_platform_palette2[color]; } } else { if (unigi_platform_info_depth_bytes == 3) { memcpy( - unigi_platform_pixels1 + (pixel * 3), + unigi_platform_colors1 + (index * 3), unigi_platform_palette1 + (color * 3), 3 ); } else { - unigi_platform_pixels4[pixel] = unigi_platform_palette4[color]; + unigi_platform_colors4[index] = unigi_platform_palette4[color]; + } + } +} + +static inline void unigi_graphics_blit(unigi_type_resolution_1d_coord index, unigi_type_color * pixels, unigi_type_resolution_1d_coord length) { + unigi_type_resolution_1d_coord i; + if (unigi_platform_info_depth_bytes == 1) { + for (i = 0; i < length; i++) { + unigi_platform_colors1[index + i] = unigi_platform_palette1[pixels[i] & 0x0FFF]; + } + } else if (unigi_platform_info_depth_bytes == 2) { + for (i = 0; i < length; i++) { + unigi_platform_colors2[index + i] = unigi_platform_palette2[pixels[i] & 0x0FFF]; + } + } else if (unigi_platform_info_depth_bytes == 3) { + for (i = 0; i < length; i++) { + memcpy( + unigi_platform_colors1 + ((index + i) * 3), + unigi_platform_palette1 + ((pixels[i] & 0x0FFF) * 3), + 3 + ); + } + } else if (unigi_platform_info_depth_bytes == 4) { + for (i = 0; i < length; i++) { + unigi_platform_colors4[index + i] = unigi_platform_palette4[pixels[i] & 0x0FFF]; } } }