From: "Alex Volkov"
Date: Thu, 10 Nov 2005 21:53:40 -0500 Subject: [SDL] BUG[?]: 32bpp RGBA->RGB colorkey blit, no SDL_SRCALPHA It seems there is either a documentation vs. reality mismatch or a real bug in SDL_blit_N.c:BlitNtoNKey(). The exact blit in question is a 32bpp RGBA->RGB, where RGBA has SDL_COLORKEY and *no* SDL_SRCALPHA flags. The doc in SDL_video.h states: * RGBA->RGB: * SDL_SRCALPHA not set: * copy RGB. * if SDL_SRCCOLORKEY set, only copy the pixels matching the * RGB values of the source colour key, ignoring alpha in the * comparison. BlitNtoNKey(), however, forgets to "ignore alpha in the comparison". The documentation makes perfect sense, so I think it is the code that is faulty. The attached patch corrects the code. --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401547
This commit is contained in:
parent
3c69f94602
commit
3f36d970a0
1 changed files with 5 additions and 1 deletions
|
@ -2194,6 +2194,10 @@ static void BlitNtoNKey(SDL_BlitInfo *info)
|
||||||
int srcbpp = srcfmt->BytesPerPixel;
|
int srcbpp = srcfmt->BytesPerPixel;
|
||||||
int dstbpp = dstfmt->BytesPerPixel;
|
int dstbpp = dstfmt->BytesPerPixel;
|
||||||
unsigned alpha = dstfmt->Amask ? srcfmt->alpha : 0;
|
unsigned alpha = dstfmt->Amask ? srcfmt->alpha : 0;
|
||||||
|
Uint32 rgbmask = ~srcfmt->Amask;
|
||||||
|
|
||||||
|
/* Set up some basic variables */
|
||||||
|
ckey &= rgbmask;
|
||||||
|
|
||||||
while ( height-- ) {
|
while ( height-- ) {
|
||||||
DUFFS_LOOP(
|
DUFFS_LOOP(
|
||||||
|
@ -2203,7 +2207,7 @@ static void BlitNtoNKey(SDL_BlitInfo *info)
|
||||||
unsigned sG;
|
unsigned sG;
|
||||||
unsigned sB;
|
unsigned sB;
|
||||||
RETRIEVE_RGB_PIXEL(src, srcbpp, Pixel);
|
RETRIEVE_RGB_PIXEL(src, srcbpp, Pixel);
|
||||||
if ( Pixel != ckey ) {
|
if ( (Pixel & rgbmask) != ckey ) {
|
||||||
RGB_FROM_PIXEL(Pixel, srcfmt, sR, sG, sB);
|
RGB_FROM_PIXEL(Pixel, srcfmt, sR, sG, sB);
|
||||||
ASSEMBLE_RGBA(dst, dstbpp, dstfmt,
|
ASSEMBLE_RGBA(dst, dstbpp, dstfmt,
|
||||||
sR, sG, sB, alpha);
|
sR, sG, sB, alpha);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue