mirror of https://github.com/encounter/SDL.git
Fixed bug 3368 - SDL_Blit_Slow doesn't ignore alpha values in colorkey 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.
This commit is contained in:
parent
2ccb46cebc
commit
fd1d692bef
|
@ -46,6 +46,8 @@ SDL_Blit_Slow(SDL_BlitInfo * info)
|
||||||
SDL_PixelFormat *dst_fmt = info->dst_fmt;
|
SDL_PixelFormat *dst_fmt = info->dst_fmt;
|
||||||
int srcbpp = src_fmt->BytesPerPixel;
|
int srcbpp = src_fmt->BytesPerPixel;
|
||||||
int dstbpp = dst_fmt->BytesPerPixel;
|
int dstbpp = dst_fmt->BytesPerPixel;
|
||||||
|
Uint32 rgbmask = ~src_fmt->Amask;
|
||||||
|
Uint32 ckey = info->colorkey & rgbmask;
|
||||||
|
|
||||||
srcy = 0;
|
srcy = 0;
|
||||||
posy = 0;
|
posy = 0;
|
||||||
|
@ -85,7 +87,7 @@ SDL_Blit_Slow(SDL_BlitInfo * info)
|
||||||
srcpixel = (srcR << src_fmt->Rshift) |
|
srcpixel = (srcR << src_fmt->Rshift) |
|
||||||
(srcG << src_fmt->Gshift) | (srcB << src_fmt->Bshift);
|
(srcG << src_fmt->Gshift) | (srcB << src_fmt->Bshift);
|
||||||
}
|
}
|
||||||
if (srcpixel == info->colorkey) {
|
if ((srcpixel & rgbmask) == ckey) {
|
||||||
posx += incx;
|
posx += incx;
|
||||||
dst += dstbpp;
|
dst += dstbpp;
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in New Issue