Fixed bug #627
Increased accuracy of alpha blend calculation --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404009
This commit is contained in:
parent
885758b318
commit
7e6cba931b
2 changed files with 7 additions and 20 deletions
|
@ -444,22 +444,9 @@ do { \
|
|||
/* Blend the RGB values of two Pixels based on a source alpha value */
|
||||
#define ALPHA_BLEND(sR, sG, sB, A, dR, dG, dB) \
|
||||
do { \
|
||||
dR = (((sR-dR)*(A))>>8)+dR; \
|
||||
dG = (((sG-dG)*(A))>>8)+dG; \
|
||||
dB = (((sB-dB)*(A))>>8)+dB; \
|
||||
} while(0)
|
||||
|
||||
/* Blend the RGB values of two Pixels based on a source alpha value */
|
||||
#define ACCURATE_ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB) \
|
||||
do { \
|
||||
unsigned tR, tG, tB, tA; \
|
||||
tA = 255 - sA; \
|
||||
tR = 1 + (sR * sA) + (dR * tA); \
|
||||
dR = (tR + (tR >> 8)) >> 8; \
|
||||
tG = 1 + (sG * sA) + (dG * tA); \
|
||||
dG = (tG + (tG >> 8)) >> 8; \
|
||||
tB = 1 + (sB * sA) + (dB * tA); \
|
||||
dB = (tB + (tB >> 8)) >> 8; \
|
||||
dR = (((sR-dR)*(A)+255)>>8)+dR; \
|
||||
dG = (((sG-dG)*(A)+255)>>8)+dG; \
|
||||
dB = (((sB-dB)*(A)+255)>>8)+dB; \
|
||||
} while(0)
|
||||
|
||||
|
||||
|
|
|
@ -629,7 +629,7 @@ Blit32to565PixelAlphaAltivec(SDL_BlitInfo * info)
|
|||
dR = (dstpixel >> 8) & 0xf8; \
|
||||
dG = (dstpixel >> 3) & 0xfc; \
|
||||
dB = (dstpixel << 3) & 0xf8; \
|
||||
ACCURATE_ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB); \
|
||||
ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB); \
|
||||
*((unsigned short *)dst) = ( \
|
||||
((dR & 0xf8) << 8) | ((dG & 0xfc) << 3) | (dB >> 3) \
|
||||
); \
|
||||
|
@ -775,7 +775,7 @@ Blit32to32SurfaceAlphaKeyAltivec(SDL_BlitInfo * info)
|
|||
if(sA && Pixel != ckey) { \
|
||||
RGB_FROM_PIXEL(Pixel, srcfmt, sR, sG, sB); \
|
||||
DISEMBLE_RGB(((Uint8 *)dstp), 4, dstfmt, Pixel, dR, dG, dB); \
|
||||
ACCURATE_ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB); \
|
||||
ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB); \
|
||||
ASSEMBLE_RGBA(((Uint8 *)dstp), 4, dstfmt, dR, dG, dB, dA); \
|
||||
} \
|
||||
dstp++; \
|
||||
|
@ -882,7 +882,7 @@ Blit32to32PixelAlphaAltivec(SDL_BlitInfo * info)
|
|||
DISEMBLE_RGBA((Uint8 *)srcp, 4, srcfmt, Pixel, sR, sG, sB, sA); \
|
||||
if(sA) { \
|
||||
DISEMBLE_RGBA((Uint8 *)dstp, 4, dstfmt, Pixel, dR, dG, dB, dA); \
|
||||
ACCURATE_ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB); \
|
||||
ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB); \
|
||||
ASSEMBLE_RGBA((Uint8 *)dstp, 4, dstfmt, dR, dG, dB, dA); \
|
||||
} \
|
||||
++srcp; \
|
||||
|
@ -1082,7 +1082,7 @@ Blit32to32SurfaceAlphaAltivec(SDL_BlitInfo * info)
|
|||
unsigned sR, sG, sB, dR, dG, dB; \
|
||||
DISEMBLE_RGB(((Uint8 *)srcp), 4, srcfmt, Pixel, sR, sG, sB); \
|
||||
DISEMBLE_RGB(((Uint8 *)dstp), 4, dstfmt, Pixel, dR, dG, dB); \
|
||||
ACCURATE_ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB); \
|
||||
ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB); \
|
||||
ASSEMBLE_RGBA(((Uint8 *)dstp), 4, dstfmt, dR, dG, dB, dA); \
|
||||
++srcp; \
|
||||
++dstp; \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue