30 #include "sdlblendingfunctions.h"
35 unsigned char r, g, b;
39 unsigned char r, g, b, a;
43 const ColorRGBA8* srcColor =
reinterpret_cast< const ColorRGBA8*
>( src );
44 ColorRGBA8* dstColor =
reinterpret_cast< ColorRGBA8*
>( dst );
46 for(
int i = n; 0 < i; --i ) {
47 register unsigned int aMulA = alpha * srcColor->a;
50 register unsigned int OneMin_aMulA = 65535 - aMulA;
51 dstColor->r = ( aMulA * srcColor->r + OneMin_aMulA * dstColor->r ) >> 16;
52 dstColor->g = ( aMulA * srcColor->g + OneMin_aMulA * dstColor->g ) >> 16;
53 dstColor->b = ( aMulA * srcColor->b + OneMin_aMulA * dstColor->b ) >> 16;
62 const ColorRGBA8* srcColor =
reinterpret_cast< const ColorRGBA8*
>( src );
63 ColorRGB8* dstColor =
reinterpret_cast< ColorRGB8*
>( dst );
65 for(
int i = n; 0 < i; --i ) {
66 register unsigned int aMulA = alpha * srcColor->a;
68 register unsigned int OneMin_aMulA = 65535 - aMulA;
69 dstColor->r = ( aMulA * srcColor->r + OneMin_aMulA * dstColor->r ) >> 16;
70 dstColor->g = ( aMulA * srcColor->g + OneMin_aMulA * dstColor->g ) >> 16;
71 dstColor->b = ( aMulA * srcColor->b + OneMin_aMulA * dstColor->b ) >> 16;
80 const ColorRGBA8* srcColor =
reinterpret_cast< const ColorRGBA8*
>( src );
81 unsigned short* dstColor =
reinterpret_cast< unsigned short*
>( dst );
83 for(
int i = n; 0 < i; --i ) {
84 register unsigned int aMulA = ( alpha * srcColor->a ) >> 8;
86 register unsigned int OneMin_aMulA = 255 - aMulA;
87 register unsigned int c = *dstColor;
88 *dstColor = ( ( ( srcColor->b * aMulA ) +
89 ( ( ( c & 0xF800 ) >> 8 ) * OneMin_aMulA ) ) & 0xF800 ) |
90 ( ( ( ( srcColor->g * aMulA ) +
91 ( ( ( c & 0x07E0 ) >> 3 ) * OneMin_aMulA ) ) >> 5 ) & 0x07E0 ) |
92 ( ( ( ( srcColor->r * aMulA ) +
93 ( ( ( c & 0x001F ) << 3 ) * OneMin_aMulA ) ) >> 11 ) & 0x001F );
103 const unsigned short* srcColor =
reinterpret_cast< const unsigned short*
>( src );
104 unsigned short* dstColor =
reinterpret_cast< unsigned short*
>( dst );
106 for(
int i = n; 0 < i; --i ) {
107 register unsigned int c1 = *dstColor;
108 register unsigned int c2 = *srcColor;
110 unsigned int aMulA = c2 & 0xF;
111 aMulA = ( alpha * aMulA ) / 15;
113 register unsigned int OneMin_aMulA = 255 - aMulA;
114 register unsigned int result;
115 result = ( ( ( ( c2 & 0xF000 ) | 0x0800 ) * aMulA ) + ( ( c1 & 0xF800 ) * OneMin_aMulA ) ) & 0xF80000;
116 result |= ( ( ( ( ( c2 & 0x0F00 ) >> 1 ) | 0x0040 ) * aMulA ) + ( ( c1 & 0x07E0 ) * OneMin_aMulA ) ) & 0x07E000;
117 result |= ( ( ( ( ( c2 & 0x00F0 ) >> 3 ) | 0x0001 ) * aMulA ) + ( ( c1 & 0x001F ) * OneMin_aMulA ) ) & 0x001F00;
119 *dstColor =
static_cast< unsigned short int >( result >> 8 );