From 650d50be14d15d87da44562c2f8a1dc2ffc7010e Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 3 Jul 2007 09:39:09 +0000 Subject: [PATCH] Fixed bug #398 You can use SetColors() before the video mode has been set. --- src/video/SDL_video.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index aeb76ddf1..86a3352c1 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -1142,16 +1142,18 @@ static void SetPalette_logical(SDL_Surface *screen, SDL_Color *colors, ncolors * sizeof(*colors)); } - vidpal = SDL_VideoSurface->format->palette; - if ( (screen == SDL_ShadowSurface) && vidpal ) { - /* - * This is a shadow surface, and the physical - * framebuffer is also indexed. Propagate the - * changes to its logical palette so that - * updates are always identity blits - */ - SDL_memcpy(vidpal->colors + firstcolor, colors, - ncolors * sizeof(*colors)); + if ( current_video && SDL_VideoSurface ) { + vidpal = SDL_VideoSurface->format->palette; + if ( (screen == SDL_ShadowSurface) && vidpal ) { + /* + * This is a shadow surface, and the physical + * framebuffer is also indexed. Propagate the + * changes to its logical palette so that + * updates are always identity blits + */ + SDL_memcpy(vidpal->colors + firstcolor, colors, + ncolors * sizeof(*colors)); + } } SDL_FormatChanged(screen); } @@ -1244,13 +1246,13 @@ int SDL_SetPalette(SDL_Surface *screen, int which, int gotall; int palsize; - if ( ! current_video ) { + if ( !screen ) { return 0; } - if ( screen != SDL_PublicSurface ) { + if ( !current_video || screen != SDL_PublicSurface ) { /* only screens have physical palettes */ which &= ~SDL_PHYSPAL; - } else if( (screen->flags & SDL_HWPALETTE) != SDL_HWPALETTE ) { + } else if ( (screen->flags & SDL_HWPALETTE) != SDL_HWPALETTE ) { /* hardware palettes required for split colormaps */ which |= SDL_PHYSPAL | SDL_LOGPAL; } @@ -1283,16 +1285,14 @@ int SDL_SetPalette(SDL_Surface *screen, int which, * program's idea of what the screen looks like, but changes * its actual appearance. */ - if(!video) - return gotall; /* video not yet initialized */ - if(!video->physpal && !(which & SDL_LOGPAL) ) { + if ( !video->physpal && !(which & SDL_LOGPAL) ) { /* Lazy physical palette allocation */ int size; SDL_Palette *pp = SDL_malloc(sizeof(*pp)); if ( !pp ) { return 0; } - current_video->physpal = pp; + video->physpal = pp; pp->ncolors = pal->ncolors; size = pp->ncolors * sizeof(SDL_Color); pp->colors = SDL_malloc(size);