Browse Source

surface: Make sure SDL_ConvertSurface() deals with palettes (thanks, Sylvain!).

Fixes Bugzilla #3826.
Fixes Bugzilla #2979.
Ryan C. Gordon 7 years ago
parent
commit
76176486ce
2 changed files with 6 additions and 1 deletions
  1. 1 1
      src/video/SDL_pixels.c
  2. 5 0
      src/video/SDL_surface.c

+ 1 - 1
src/video/SDL_pixels.c

@@ -658,7 +658,7 @@ SDL_SetPixelFormatPalette(SDL_PixelFormat * format, SDL_Palette *palette)
         return SDL_SetError("SDL_SetPixelFormatPalette() passed NULL format");
     }
 
-    if (palette && palette->ncolors != (1 << format->BitsPerPixel)) {
+    if (palette && palette->ncolors > (1 << format->BitsPerPixel)) {
         return SDL_SetError("SDL_SetPixelFormatPalette() passed a palette that doesn't match the format");
     }
 

+ 5 - 0
src/video/SDL_surface.c

@@ -998,6 +998,11 @@ SDL_ConvertSurface(SDL_Surface * surface, const SDL_PixelFormat * format,
                                    surface->format->Gmask, surface->format->Bmask,
                                    surface->format->Amask);
 
+            /* Share the palette, if any */
+            if (surface->format->palette) {
+                SDL_SetSurfacePalette(tmp, surface->format->palette);
+            }
+            
             SDL_FillRect(tmp, NULL, surface->map->info.colorkey);
 
             tmp->map->info.flags &= ~SDL_COPY_COLORKEY;