diff options
Diffstat (limited to 'src/surface/sdl.c')
-rw-r--r-- | src/surface/sdl.c | 52 |
1 files changed, 12 insertions, 40 deletions
diff --git a/src/surface/sdl.c b/src/surface/sdl.c index d598b8a..7a86dc1 100644 --- a/src/surface/sdl.c +++ b/src/surface/sdl.c @@ -6,7 +6,6 @@ * http://www.opensource.org/licenses/mit-license.php */ -#include <assert.h> #include <stdbool.h> #include <stdlib.h> #include <SDL/SDL.h> @@ -18,6 +17,7 @@ #include "nsfb.h" #include "surface.h" +#include "palette.h" #include "plot.h" #include "cursor.h" @@ -353,49 +353,19 @@ set_palette(nsfb_t *nsfb) { SDL_Surface *sdl_screen = nsfb->surface_priv; SDL_Color palette[256]; - int rloop, gloop, bloop; int loop = 0; - /* Build a linear 6-8-5 levels RGB colour cube palette. - * This accounts for 240 colours */ -#define RLIM 6 -#define GLIM 8 -#define BLIM 5 - for (rloop = 0; rloop < RLIM; rloop++) { - for (gloop = 0; gloop < GLIM; gloop++) { - for (bloop = 0; bloop < BLIM; bloop++) { - palette[loop].r = ((rloop * 255 * 2) + RLIM - 1) / (2 * (RLIM - 1)); - palette[loop].g = ((gloop * 255 * 2) + GLIM - 1) / (2 * (GLIM - 1)); - palette[loop].b = ((bloop * 255 * 2) + BLIM - 1) / (2 * (BLIM - 1)); - - nsfb->palette[loop] = palette[loop].r | - palette[loop].g << 8 | - palette[loop].b << 16; - loop++; - } - } - } -#undef RLIM -#undef GLIM -#undef BLIM - - /* Should have 240 colours set */ - assert(loop == 240); + /* Get libnsfb palette */ + nsfb_palette_generate_nsfb_8bpp(nsfb->palette); - /* Fill index 240 to index 255 with grayscales */ - /* Note: already have full black and full white from RGB cube */ - for (; loop < 256; loop++) { - int ngray = loop - 240 + 1; - palette[loop].r = ngray * 15; /* 17*15 = 255 */ - - palette[loop].g = palette[loop].b = palette[loop].r; - - nsfb->palette[loop] = palette[loop].r | - palette[loop].g << 8 | - palette[loop].b << 16; + /* Create SDL palette from nsfb palette */ + for (loop = 0; loop < 256; loop++) { + palette[loop].r = (nsfb->palette->data[loop] ) & 0xFF; + palette[loop].g = (nsfb->palette->data[loop] >> 8) & 0xFF; + palette[loop].b = (nsfb->palette->data[loop] >> 16) & 0xFF; } - /* Set palette */ + /* Set SDL palette */ SDL_SetColors(sdl_screen, palette, 0, 256); } @@ -487,8 +457,10 @@ static int sdl_initialise(nsfb_t *nsfb) nsfb->surface_priv = sdl_screen; - if (nsfb->bpp == 8) + if (nsfb->bpp == 8) { + nsfb_palette_new(&nsfb->palette); set_palette(nsfb); + } nsfb->ptr = sdl_screen->pixels; nsfb->linelen = sdl_screen->pitch; |