Browse Source

Fixed bug 4425 - promote to alpha format, palette surface with alpha values.

SDL_CreateTextureFromSurface() forgets to choose a texture format with alpha for
surfaces that have palettes with alpha values.
Sylvain Becker 6 years ago
parent
commit
e5476c653d
1 changed files with 12 additions and 0 deletions
  1. 12 0
      src/render/SDL_render.c

+ 12 - 0
src/render/SDL_render.c

@@ -1205,6 +1205,18 @@ SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface)
     } else {
         needAlpha = SDL_FALSE;
     }
+
+    /* If Palette contains alpha values, promotes to alpha format */
+    if (fmt->palette) {
+        for (i = 0; i < fmt->palette->ncolors; i++) {
+            Uint8 alpha_value = fmt->palette->colors[i].a;
+            if (alpha_value != 0 || alpha_value != SDL_ALPHA_OPAQUE) {
+                needAlpha = SDL_TRUE;
+                break;
+            }
+        }
+    }
+
     format = renderer->info.texture_formats[0];
     for (i = 0; i < renderer->info.num_texture_formats; ++i) {
         if (!SDL_ISPIXELFORMAT_FOURCC(renderer->info.texture_formats[i]) &&