55 #ifndef GCN_SDLPIXEL_HPP
56 #define GCN_SDLPIXEL_HPP
75 int bpp = surface->format->BytesPerPixel;
77 SDL_LockSurface(surface);
79 Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
81 unsigned int color = 0;
94 if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
96 color = p[0] << 16 | p[1] << 8 | p[2];
100 color = p[0] | p[1] << 8 | p[2] << 16;
105 color = *(Uint32 *)p;
112 SDL_GetRGBA(color, surface->format, &r, &g, &b, &a);
113 SDL_UnlockSurface(surface);
115 return Color(r,g,b,a);
128 int bpp = surface->format->BytesPerPixel;
130 SDL_LockSurface(surface);
132 Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
134 Uint32 pixel = SDL_MapRGB(surface->format, color.
r, color.
g, color.
b);
143 *(Uint16 *)p = pixel;
147 if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
149 p[0] = (pixel >> 16) & 0xff;
150 p[1] = (pixel >> 8) & 0xff;
156 p[1] = (pixel >> 8) & 0xff;
157 p[2] = (pixel >> 16) & 0xff;
162 *(Uint32 *)p = pixel;
166 SDL_UnlockSurface(surface);
176 inline unsigned int SDLAlpha16(
unsigned int src,
unsigned int dst,
unsigned char a)
181 src = (((src << 16) | src) & 0x07E0F81F);
182 dst = ((dst << 16) | dst) & 0x07E0F81F;
183 dst = ((((dst - src) * a) >> 5) + src) & 0x07E0F81F;
184 return (dst >> 16) | dst;
194 inline unsigned int SDLAlpha32(
unsigned int src,
unsigned int dst,
unsigned char a)
198 unsigned int src2 = (src & 0xFF00FF00) >> 8;
201 unsigned int dst2 = (dst & 0xFF00FF00) >> 8;
204 dst = ((((dst - src) * a) >> 8) + src) & 0x00FF00FF;
205 dst2 = ((((dst2 - src2) * a) >> 8) + src2) & 0x00FF00FF;
206 return dst | (dst2 << 8);
219 int bpp = surface->format->BytesPerPixel;
221 SDL_LockSurface(surface);
223 Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
225 Uint32 pixel = SDL_MapRGB(surface->format, color.
r, color.
g, color.
b);
234 *(Uint16 *)p =
SDLAlpha16(pixel, *(Uint16 *)p, color.
a);
238 if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
240 p[0] = (pixel >> 16) & 0xff;
241 p[1] = (pixel >> 8) & 0xff;
247 p[1] = (pixel >> 8) & 0xff;
248 p[2] = (pixel >> 16) & 0xff;
253 *(Uint32 *)p =
SDLAlpha32(pixel, *(Uint32 *)p, color.
a);
257 SDL_UnlockSurface(surface);
261 #endif // end GCN_SDLPIXEL_HPP