Skip to content

Commit

Permalink
Fixed bug 3657 - Color-key doesn't work when an alpha channel is present
Browse files Browse the repository at this point in the history
When surface format is the same as renderer format, it still needs an
intermediate conversion to transform colorkey to alpha.
  • Loading branch information
1bsyl committed Jan 19, 2019
1 parent 9d10c73 commit 0754860
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/render/SDL_render.c
Expand Up @@ -1187,6 +1187,7 @@ SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface)
{
const SDL_PixelFormat *fmt;
SDL_bool needAlpha;
SDL_bool direct_update;
Uint32 i;
Uint32 format;
SDL_Texture *texture;
Expand Down Expand Up @@ -1233,6 +1234,20 @@ SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface)
}

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);
Expand Down

0 comments on commit 0754860

Please sign in to comment.