From 851eb61cb21ef51dfda50b1347dcd71f08bda253 Mon Sep 17 00:00:00 2001 From: Fierelier Date: Sat, 14 Sep 2024 02:46:04 +0200 Subject: [PATCH] Add unigi_flag_bigcolor --- graphics.c | 94 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 68 insertions(+), 26 deletions(-) diff --git a/graphics.c b/graphics.c index 5252cd8..345e539 100644 --- a/graphics.c +++ b/graphics.c @@ -37,10 +37,14 @@ unigi_type_error unigi_window_create(unigi_type_resolution resolution, char * ti unigi_platform_info_depth_bytes = unigi_platform_surface->format->BytesPerPixel; uint8_t r; uint8_t g; uint8_t b; - unigi_type_color color; + uint32_t color; uint32_t color_platform; uint8_t * color_platform8 = (uint8_t *)&color_platform; - unigi_platform_palette1 = malloc(4096 * unigi_platform_info_depth_bytes); + #ifndef unigi_flag_bigcolor + unigi_platform_palette1 = malloc(4096 * unigi_platform_info_depth_bytes); + #else + unigi_platform_palette1 = malloc(65536 * unigi_platform_info_depth_bytes); + #endif if (unigi_platform_palette1 == NULL) { printf("[unigi] Could not initialize video: unigi -> palette malloc failed\n"); return 1; @@ -49,19 +53,35 @@ unigi_type_error unigi_window_create(unigi_type_resolution resolution, char * ti unigi_platform_palette4 = (uint32_t *)unigi_platform_palette1; color = 0; - while (color < 4096) { - unigi_platform_color_16_to_32(color,&r,&r,&g,&b); - #ifndef _EE // if not PS2 - color_platform = SDL_MapRGBA(unigi_platform_surface->format,r,g,b,255); - #else - color_platform = SDL_MapRGBA(unigi_platform_surface->format,r/2,g/2,b/2,255); - #endif - unigi_type_resolution_depth i; - for (i = 0; i < unigi_platform_info_depth_bytes; i++) { - unigi_platform_palette1[(color * unigi_platform_info_depth_bytes) + i] = color_platform8[i]; + #ifndef unigi_flag_bigcolor + while (color < 4096) { + unigi_platform_color_16_to_32((unigi_type_color)color,&r,&r,&g,&b); + #ifndef _EE // if not PS2 + color_platform = SDL_MapRGBA(unigi_platform_surface->format,r,g,b,255); + #else + color_platform = SDL_MapRGBA(unigi_platform_surface->format,r/2,g/2,b/2,255); + #endif + unigi_type_resolution_depth i; + for (i = 0; i < unigi_platform_info_depth_bytes; i++) { + unigi_platform_palette1[(color * unigi_platform_info_depth_bytes) + i] = color_platform8[i]; + } + ++color; } - ++color; - } + #else + while (color < 65536) { + unigi_platform_color_16_to_32((unigi_type_color)color,&r,&r,&g,&b); + #ifndef _EE // if not PS2 + color_platform = SDL_MapRGBA(unigi_platform_surface->format,r,g,b,255); + #else + color_platform = SDL_MapRGBA(unigi_platform_surface->format,r/2,g/2,b/2,255); + #endif + unigi_type_resolution_depth i; + for (i = 0; i < unigi_platform_info_depth_bytes; i++) { + unigi_platform_palette1[(color * unigi_platform_info_depth_bytes) + i] = color_platform8[i]; + } + ++color; + } + #endif return 0; } @@ -70,7 +90,9 @@ unigi_type_error unigi_graphics_init() { } inline void unigi_graphics_draw(unigi_type_resolution_1d_coord index, unigi_type_color color) { + #ifndef unigi_flag_bigcolor color = color & 0x0FFF; + #endif if (unigi_platform_info_depth_bytes < 3) { if (unigi_platform_info_depth_bytes == 1) { unigi_platform_pixels1[index] = unigi_platform_palette1[color]; @@ -93,24 +115,44 @@ inline void unigi_graphics_draw(unigi_type_resolution_1d_coord index, unigi_type 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_pixels1[index + i] = unigi_platform_palette1[pixels[i] & 0x0FFF]; + for (i = 0; i < length; ++i) { + #ifndef unigi_flag_bigcolor + unigi_platform_pixels1[index + i] = unigi_platform_palette1[pixels[i] & 0x0FFF]; + #else + unigi_platform_pixels1[index + i] = unigi_platform_palette1[pixels[i]]; + #endif } } else if (unigi_platform_info_depth_bytes == 2) { - for (i = 0; i < length; i++) { - unigi_platform_pixels2[index + i] = unigi_platform_palette2[pixels[i] & 0x0FFF]; + for (i = 0; i < length; ++i) { + #ifndef unigi_flag_bigcolor + unigi_platform_pixels2[index + i] = unigi_platform_palette2[pixels[i] & 0x0FFF]; + #else + unigi_platform_pixels2[index + i] = unigi_platform_palette2[pixels[i]]; + #endif } } else if (unigi_platform_info_depth_bytes == 3) { - for (i = 0; i < length; i++) { - memcpy( - unigi_platform_pixels1 + ((index + i) * 3), - unigi_platform_palette1 + ((pixels[i] & 0x0FFF) * 3), - 3 - ); + for (i = 0; i < length; ++i) { + #ifndef unigi_flag_bigcolor + memcpy( + unigi_platform_pixels1 + ((index + i) * 3), + unigi_platform_palette1 + ((pixels[i] & 0x0FFF) * 3), + 3 + ); + #else + memcpy( + unigi_platform_pixels1 + ((index + i) * 3), + unigi_platform_palette1 + ((pixels[i]) * 3), + 3 + ); + #endif } } else if (unigi_platform_info_depth_bytes == 4) { - for (i = 0; i < length; i++) { - unigi_platform_pixels4[index + i] = unigi_platform_palette4[pixels[i] & 0x0FFF]; + for (i = 0; i < length; ++i) { + #ifndef unigi_flag_bigcolor + unigi_platform_pixels4[index + i] = unigi_platform_palette4[pixels[i] & 0x0FFF]; + #else + unigi_platform_pixels4[index + i] = unigi_platform_palette4[pixels[i]]; + #endif } } }