diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2012-09-27 13:46:10 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2012-09-27 13:46:10 +0100 |
commit | 46f3c9ea3793d146337c81bf8858d99238c05e86 (patch) | |
tree | 7fd5c6aaeed21e01f8ea5565d9b65016f34657ec /src/surface/sdl.c | |
parent | 1983c37933d2a753c4c913527c94392682bf7b98 (diff) | |
download | libnsfb-46f3c9ea3793d146337c81bf8858d99238c05e86.tar.gz |
Add palette object. Optimise matching colour in case where we chose the palette. In other cases, we still have to seach all the colours, but that doesn't ever seem to be used.
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; |