Generate quick palette

This commit is contained in:
Fierelier 2024-05-11 02:58:17 +02:00
parent c3be40e186
commit bd5b613c91

View File

@ -219,6 +219,8 @@ unigi_type_uint8 unigi_platform_palette_dos[unigi_platform_palette_dos_colors *
63, 63, 63
};
unigi_type_uint8 unigi_platform_palette[65536];
static inline void unigi_platform_color_16_to_32(unigi_type_uint16 color16,unigi_type_uint8 * r, unigi_type_uint8 * g, unigi_type_uint8 * b, unigi_type_uint8 * a) {
*r = (color16 >> 12) & 0xF;
*g = (color16 >> 8) & 0xF;
@ -251,7 +253,21 @@ unigi_type_uint8 unigi_platform_color_find(unigi_type_uint8 r, unigi_type_uint8
return color;
}
#include <stdio.h>
unigi_type_error unigi_graphics_init() {
// Create palette
unigi_type_uint32 index = 0;
while (index < 65536) {
unigi_type_uint8 r,g,b,a;
unigi_platform_color_16_to_32(index,&r,&g,&b,&a);
if (index % 500 == 0) {
printf("Generating palette %ld ...\r",index);
fflush(stdout);
}
unigi_platform_palette[index] = unigi_platform_color_find(r,g,b);
index++;
}
// Create a list of compatible resolutions
unigi_status_resolutions = malloc(sizeof(unigi_type_resolution_range) * 2);
if (unigi_status_resolutions == NULL) { return 1; }
@ -315,9 +331,7 @@ unigi_type_error unigi_graphics_mode(unigi_type_resolution * resolution, char *
static inline void unigi_graphics_draw_pixel(unigi_type_resolution_pixel_index pixel, unigi_type_color color) { // This is horribly slow, for now
unsigned char far *unigi_platform_vidbuf = (unsigned char far *)0xA0000000L;
unigi_type_uint8 r,g,b,a;
unigi_platform_color_16_to_32(color,&r,&g,&b,&a);
unigi_platform_vidbuf[pixel] = unigi_platform_color_find(r,g,b);
unigi_platform_vidbuf[pixel] = unigi_platform_palette[color];
}
static inline void unigi_graphics_flush() {