# HG changeset patch # User Sam Lantinga # Date 1227590954 0 # Node ID 93764fe8601ae32134188bfc595bf8020d4debe6 # Parent 6bacfecbf27ea83814c264c63f4c200b68e5dde9 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. diff -r 6bacfecbf27e -r 93764fe8601a src/video/SDL_surface.c --- a/src/video/SDL_surface.c Tue Nov 25 02:21:53 2008 +0000 +++ b/src/video/SDL_surface.c Tue Nov 25 05:29:14 2008 +0000 @@ -270,7 +270,7 @@ } /* 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 @@ &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 -r 6bacfecbf27e -r 93764fe8601a src/video/SDL_video.c --- a/src/video/SDL_video.c Tue Nov 25 02:21:53 2008 +0000 +++ b/src/video/SDL_video.c Tue Nov 25 05:29:14 2008 +0000 @@ -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 @@ } dst = SDL_ConvertSurface(surface, dst_fmt, 0); if (dst) { - SDL_ConvertColorkeyToAlpha(dst); SDL_UpdateTexture(textureID, NULL, dst->pixels, dst->pitch); SDL_FreeSurface(dst); }