Fixed bug 3657 - Color-key doesn't work when an alpha channel is present
When surface format is the same as renderer format, it still needs an
intermediate conversion to transform colorkey to alpha.
diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c
index 35f0066..85d4d69 100644
--- a/src/render/SDL_render.c
+++ b/src/render/SDL_render.c
@@ -1187,6 +1187,7 @@
{
const SDL_PixelFormat *fmt;
SDL_bool needAlpha;
+ SDL_bool direct_update;
Uint32 i;
Uint32 format;
SDL_Texture *texture;
@@ -1233,6 +1234,20 @@
}
if (format == surface->format->format) {
+ if (surface->format->Amask && SDL_HasColorKey(surface)) {
+ /* Surface and Renderer formats are identicals.
+ * Intermediate conversion is needed to convert color key to alpha (SDL_ConvertColorkeyToAlpha()). */
+ direct_update = SDL_FALSE;
+ } else {
+ /* Update Texture directly */
+ direct_update = SDL_TRUE;
+ }
+ } else {
+ /* Surface and Renderer formats are differents, it needs an intermediate conversion. */
+ direct_update = SDL_FALSE;
+ }
+
+ if (direct_update) {
if (SDL_MUSTLOCK(surface)) {
SDL_LockSurface(surface);
SDL_UpdateTexture(texture, NULL, surface->pixels, surface->pitch);