Skip to content

Commit

Permalink
Fixed bug #398
Browse files Browse the repository at this point in the history
You can use SetColors() before the video mode has been set.
  • Loading branch information
slouken committed Jul 3, 2007
1 parent 267cf98 commit 650d50b
Showing 1 changed file with 17 additions and 17 deletions.
34 changes: 17 additions & 17 deletions src/video/SDL_video.c
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 650d50b

Please sign in to comment.