From f6197aec85b160f13eebaf031b4af6c88fd82d45 Mon Sep 17 00:00:00 2001 From: Sylvain Becker Date: Sun, 17 May 2020 20:45:55 +0200 Subject: [PATCH] Fix issue with colorkey, palette and format conversion Set the colorkey information on the converted surface. Test-case in bug 3826/2979, conflicting with bug 4798 --- src/video/SDL_surface.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/video/SDL_surface.c b/src/video/SDL_surface.c index 77a6bc84a..7c2d04bdc 100644 --- a/src/video/SDL_surface.c +++ b/src/video/SDL_surface.c @@ -1106,6 +1106,7 @@ SDL_ConvertSurface(SDL_Surface * surface, const SDL_PixelFormat * format, if (copy_flags & SDL_COPY_COLORKEY) { SDL_bool set_colorkey_by_color = SDL_FALSE; + SDL_bool convert_colorkey = SDL_TRUE; if (surface->format->palette) { if (format->palette && @@ -1115,7 +1116,9 @@ SDL_ConvertSurface(SDL_Surface * surface, const SDL_PixelFormat * format, /* The palette is identical, just set the same colorkey */ SDL_SetColorKey(convert, 1, surface->map->info.colorkey); } else if (!format->palette) { + set_colorkey_by_color = SDL_TRUE; /* Was done by 'palette_ck_transform' */ + convert_colorkey = SDL_FALSE; } else { set_colorkey_by_color = SDL_TRUE; } @@ -1156,7 +1159,9 @@ SDL_ConvertSurface(SDL_Surface * surface, const SDL_PixelFormat * format, SDL_SetColorKey(convert, 1, converted_colorkey); /* This is needed when converting for 3D texture upload */ - SDL_ConvertColorkeyToAlpha(convert, SDL_TRUE); + if (convert_colorkey) { + SDL_ConvertColorkeyToAlpha(convert, SDL_TRUE); + } } } SDL_SetClipRect(convert, &surface->clip_rect);