From 228035d0f3afa393259bb40fad5e5548b6799f7b Mon Sep 17 00:00:00 2001 From: Sam Lantinga <slouken@libsdl.org> Date: Tue, 25 Nov 2008 05:29:14 +0000 Subject: [PATCH] It turns out both the software and the OpenGL renderer had the same problem. According to the spec, when SDL_SRCALPHA is set, the colorkey is ignored, so we just need to convert the colorkey into the alpha channel. --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%403248 --- src/video/SDL_surface.c | 3 ++- src/video/SDL_video.c | 4 ---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/video/SDL_surface.c b/src/video/SDL_surface.c index 7b461f3a..d1f9563b 100644 --- a/src/video/SDL_surface.c +++ b/src/video/SDL_surface.c @@ -270,7 +270,7 @@ SDL_SetColorKey(SDL_Surface * surface, Uint32 flag, Uint32 key) } /* This is a fairly slow function to switch from colorkey to alpha */ -void +static void SDL_ConvertColorkeyToAlpha(SDL_Surface * surface) { int x, y; @@ -813,6 +813,7 @@ SDL_ConvertSurface(SDL_Surface * surface, &keyG, &keyB, &keyA); SDL_SetColorKey(convert, 1, SDL_MapRGBA(convert->format, keyR, keyG, keyB, keyA)); + SDL_ConvertColorkeyToAlpha(convert); } convert->map->info.r = surface->map->info.r; convert->map->info.g = surface->map->info.g; diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index e59cc84c..28eade9a 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -46,9 +46,6 @@ #endif #endif /* SDL_VIDEO_OPENGL */ -/* From SDL_surface.c */ -extern void SDL_ConvertColorkeyToAlpha(SDL_Surface * surface); - /* Available video drivers */ static VideoBootStrap *bootstrap[] = { #if SDL_VIDEO_DRIVER_COCOA @@ -1588,7 +1585,6 @@ SDL_CreateTextureFromSurface(Uint32 format, SDL_Surface * surface) } dst = SDL_ConvertSurface(surface, dst_fmt, 0); if (dst) { - SDL_ConvertColorkeyToAlpha(dst); SDL_UpdateTexture(textureID, NULL, dst->pixels, dst->pitch); SDL_FreeSurface(dst); } -- 2.18.1