52
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
53
#define GET_PIXEL_24(b) (b[0] + (b[1] << 8) + (b[2] << 16))
55
#define GET_PIXEL_24(b) (b[2] + (b[1] << 8) + (b[0] << 16))
52
58
#define GET_PIXEL(pxl, bpp, source) \
63
69
Uint8 *b = (Uint8 *) source; \
64
pxl = (SDL_BYTEORDER == SDL_LIL_ENDIAN) ? \
65
b[0] + (b[1] << 8) + (b[2] << 16) : \
66
(b[0] << 16) + (b[1] << 8) + b[2]; \
70
pxl = GET_PIXEL_24(b); \
71
#define GET_PIXELVALS(_sR, _sG, _sB, _sA, px, fmt) \
75
#define GET_PIXELVALS(_sR, _sG, _sB, _sA, px, fmt, ppa) \
72
76
_sR = ((px & fmt->Rmask) >> fmt->Rshift); \
73
77
_sR = (_sR << fmt->Rloss) + (_sR >> (8 - (fmt->Rloss << 1))); \
74
78
_sG = ((px & fmt->Gmask) >> fmt->Gshift); \
75
79
_sG = (_sG << fmt->Gloss) + (_sG >> (8 - (fmt->Gloss << 1))); \
76
80
_sB = ((px & fmt->Bmask) >> fmt->Bshift); \
77
81
_sB = (_sB << fmt->Bloss) + (_sB >> (8 - (fmt->Bloss << 1))); \
80
84
_sA = ((px & fmt->Amask) >> fmt->Ashift); \
81
85
_sA = (_sA << fmt->Aloss) + (_sA >> (8 - (fmt->Aloss << 1))); \
104
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
105
#define SET_OFFSETS_24(or, og, ob, fmt) \
107
or = (fmt->Rshift == 0 ? 0 : \
108
fmt->Rshift == 8 ? 1 : \
110
og = (fmt->Gshift == 0 ? 0 : \
111
fmt->Gshift == 8 ? 1 : \
113
ob = (fmt->Bshift == 0 ? 0 : \
114
fmt->Bshift == 8 ? 1 : \
118
#define SET_OFFSETS_32(or, og, ob, fmt) \
120
or = (fmt->Rshift == 0 ? 0 : \
121
fmt->Rshift == 8 ? 1 : \
122
fmt->Rshift == 16 ? 2 : \
124
og = (fmt->Gshift == 0 ? 0 : \
125
fmt->Gshift == 8 ? 1 : \
126
fmt->Gshift == 16 ? 2 : \
128
ob = (fmt->Bshift == 0 ? 0 : \
129
fmt->Bshift == 8 ? 1 : \
130
fmt->Bshift == 16 ? 2 : \
134
#define SET_OFFSETS_24(or, og, ob, fmt) \
136
or = (fmt->Rshift == 0 ? 2 : \
137
fmt->Rshift == 8 ? 1 : \
139
og = (fmt->Gshift == 0 ? 2 : \
140
fmt->Gshift == 8 ? 1 : \
142
ob = (fmt->Bshift == 0 ? 2 : \
143
fmt->Bshift == 8 ? 1 : \
147
#define SET_OFFSETS_32(or, og, ob, fmt) \
149
or = (fmt->Rshift == 0 ? 3 : \
150
fmt->Rshift == 8 ? 2 : \
151
fmt->Rshift == 16 ? 1 : \
153
og = (fmt->Gshift == 0 ? 3 : \
154
fmt->Gshift == 8 ? 2 : \
155
fmt->Gshift == 16 ? 1 : \
157
ob = (fmt->Bshift == 0 ? 3 : \
158
fmt->Bshift == 8 ? 2 : \
159
fmt->Bshift == 16 ? 1 : \
100
165
#define CREATE_PIXEL(buf, r, g, b, a, bp, ft) \
105
170
((r >> ft->Rloss) << ft->Rshift) | \
106
171
((g >> ft->Gloss) << ft->Gshift) | \
107
172
((b >> ft->Bloss) << ft->Bshift) | \
108
((a << ft->Aloss) << ft->Ashift); \
173
((a >> ft->Aloss) << ft->Ashift); \
111
176
*((Uint32 *) (buf)) = \
112
177
((r >> ft->Rloss) << ft->Rshift) | \
113
178
((g >> ft->Gloss) << ft->Gshift) | \
114
179
((b >> ft->Bloss) << ft->Bshift) | \
115
((a << ft->Aloss) << ft->Ashift); \
180
((a >> ft->Aloss) << ft->Ashift); \
280
/* Choose an alpha blend equation. If the sign is preserved on a right shift
281
* then use a specialized, faster, equation. Otherwise a more general form,
282
* where all additions are done before the shift, is needed.
285
#define ALPHA_BLEND_COMP(sC, dC, sA) ((((sC - dC) * sA + sC) >> 8) + dC)
287
#define ALPHA_BLEND_COMP(sC, dC, sA) (((dC << 8) + (sC - dC) * sA + sC) >> 8)
215
290
#define ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB, dA) \
219
dR = (((sR - dR) * sA) >> 8) + dR; \
220
dG = (((sG - dG) * sA) >> 8) + dG; \
221
dB = (((sB - dB) * sA) >> 8) + dB; \
294
dR = ALPHA_BLEND_COMP(sR, dR, sA); \
295
dG = ALPHA_BLEND_COMP(sG, dG, sA); \
296
dB = ALPHA_BLEND_COMP(sB, dB, sA); \
222
297
dA = sA + dA - ((sA * dA) / 255); \