Skip to content

Commit

Permalink
Fixed bug 3368 - SDL_Blit_Slow doesn't ignore alpha values in colorke…
Browse files Browse the repository at this point in the history
…y comparison

Simon Hug

When the SDL_Blit_Slow function compares the pixel to the color key it does so without removing the alpha component from the pixel value and the key. This is different from the optimized 32-bit blitters which create a rgb mask and apply it to both to filter the alpha out. SDL_Blit_Slow will only skip the pixels with the exact alpha value of the key instead of all pixels with the same color.

The attached test case blits a surface with a color key and prints the pixel values to the console. The third row is expected to be skipped.
  • Loading branch information
slouken committed Oct 1, 2016
1 parent 2ccb46c commit fd1d692
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/video/SDL_blit_slow.c
Expand Up @@ -46,6 +46,8 @@ SDL_Blit_Slow(SDL_BlitInfo * info)
SDL_PixelFormat *dst_fmt = info->dst_fmt;
int srcbpp = src_fmt->BytesPerPixel;
int dstbpp = dst_fmt->BytesPerPixel;
Uint32 rgbmask = ~src_fmt->Amask;
Uint32 ckey = info->colorkey & rgbmask;

srcy = 0;
posy = 0;
Expand Down Expand Up @@ -85,7 +87,7 @@ SDL_Blit_Slow(SDL_BlitInfo * info)
srcpixel = (srcR << src_fmt->Rshift) |
(srcG << src_fmt->Gshift) | (srcB << src_fmt->Bshift);
}
if (srcpixel == info->colorkey) {
if ((srcpixel & rgbmask) == ckey) {
posx += incx;
dst += dstbpp;
continue;
Expand Down

0 comments on commit fd1d692

Please sign in to comment.