21 #include "../SDL_internal.h" 33 sizeof(
int) ==
sizeof(
Sint32) &&
sizeof(
size_t) >=
sizeof(
Sint32));
49 pitch = (pitch + 7) / 8;
52 pitch = (pitch + 1) / 2;
57 pitch = (pitch + 3) & ~3;
76 if (surface ==
NULL) {
112 if (surface->
w && surface->
h) {
181 if (surface !=
NULL) {
186 surface->
pitch = pitch;
204 if (surface !=
NULL) {
209 surface->
pitch = pitch;
219 return SDL_SetError(
"SDL_SetSurfacePalette() passed a NULL surface");
353 for (y = surface->
h; y--;) {
355 for (x = surface->
w; x--;) {
356 if ((*spot &
mask) == ckey) {
361 row += surface->
pitch / 2;
377 for (y = surface->
h; y--;) {
379 for (x = surface->
w; x--;) {
380 if ((*spot & mask) == ckey) {
385 row += surface->
pitch / 4;
411 if (r != 0xFF || g != 0xFF || b != 0xFF) {
526 switch (surface->
map->
557 full_rect.
w = surface->
w;
558 full_rect.
h = surface->
h;
571 if (surface && rect) {
592 if ((src->
map->
dst != dst) ||
606 return (src->
map->
blit(src, srcrect, dst, dstrect));
615 int srcx, srcy,
w,
h;
619 return SDL_SetError(
"SDL_UpperBlit: passed a NULL surface");
622 return SDL_SetError(
"Surfaces must not be locked during blit");
626 if (dstrect ==
NULL) {
627 fulldst.
x = fulldst.
y = 0;
644 maxw = src->
w - srcx;
655 maxh = src->
h - srcy;
670 dx = clip->
x - dstrect->
x;
676 dx = dstrect->
x + w - clip->
x - clip->
w;
680 dy = clip->
y - dstrect->
y;
686 dy = dstrect->
y + h - clip->
y - clip->
h;
697 if (w > 0 && h > 0) {
701 sr.
w = dstrect->
w =
w;
702 sr.
h = dstrect->
h =
h;
705 dstrect->
w = dstrect->
h = 0;
713 double src_x0, src_y0, src_x1, src_y1;
714 double dst_x0, dst_y0, dst_x1, dst_y1;
716 double scaling_w, scaling_h;
722 return SDL_SetError(
"SDL_UpperBlitScaled: passed a NULL surface");
725 return SDL_SetError(
"Surfaces must not be locked during blit");
728 if (
NULL == srcrect) {
736 if (
NULL == dstrect) {
744 if (dst_w == src_w && dst_h == src_h) {
749 scaling_w = (double)dst_w / src_w;
750 scaling_h = (double)dst_h / src_h;
752 if (
NULL == dstrect) {
760 dst_x1 = dst_x0 + dst_w - 1;
761 dst_y1 = dst_y0 + dst_h - 1;
764 if (
NULL == srcrect) {
772 src_x1 = src_x0 + src_w - 1;
773 src_y1 = src_y0 + src_h - 1;
778 dst_x0 -= src_x0 * scaling_w;
782 if (src_x1 >= src->
w) {
783 dst_x1 -= (src_x1 - src->
w + 1) * scaling_w;
788 dst_y0 -= src_y0 * scaling_h;
792 if (src_y1 >= src->
h) {
793 dst_y1 -= (src_y1 - src->
h + 1) * scaling_h;
807 src_x0 -= dst_x0 / scaling_w;
812 src_x1 -= (dst_x1 - dst->
clip_rect.
w + 1) / scaling_w;
817 src_y0 -= dst_y0 / scaling_h;
822 src_y1 -= (dst_y1 - dst->
clip_rect.
h + 1) / scaling_h;
839 final_dst.
w = (int)
SDL_floor(dst_x1 - dst_x0 + 1.5);
840 final_dst.
h = (int)
SDL_floor(dst_y1 - dst_y0 + 1.5);
848 *dstrect = final_dst;
850 if (final_dst.
w == 0 || final_dst.
h == 0 ||
851 final_src.
w <= 0 || final_src.
h <= 0) {
867 static const Uint32 complex_copy_flags = (
976 if (convert ==
NULL) {
1004 bounds.
w = surface->
w;
1005 bounds.
h = surface->
h;
1034 }
else if (format->
Amask) {
1043 if (set_colorkey_by_color) {
1046 int converted_colorkey = 0;
1132 surface->
pitch = pitch;
1138 blitmap->
info.
r = 0xFF;
1139 blitmap->
info.
g = 0xFF;
1140 blitmap->
info.
b = 0xFF;
1141 blitmap->
info.
a = 0xFF;
1142 surface->
map = blitmap;
1153 Uint32 src_format,
const void *
src,
int src_pitch,
1154 Uint32 dst_format,
void *
dst,
int dst_pitch)
1160 void *nonconst_src = (
void *) src;
1179 if (src_format == dst_format) {
1183 for (i = height; i--;) {
1185 src = (
const Uint8*)src + src_pitch;
1186 dst = (
Uint8*)dst + dst_pitch;
1193 &src_surface, &src_fmt, &src_blitmap)) {
1197 &dst_surface, &dst_fmt, &dst_blitmap)) {
1206 return SDL_LowerBlit(&src_surface, &rect, &dst_surface, &rect);
1215 if (surface ==
NULL) {
1226 while (surface->
locked > 0) {
int SDL_GetColorKey(SDL_Surface *surface, Uint32 *key)
Gets the color key (transparent pixel) in a blittable surface.
int SDL_ConvertPixels_YUV_to_YUV(int width, int height, Uint32 src_format, const void *src, int src_pitch, Uint32 dst_format, void *dst, int dst_pitch)
#define SDL_COPY_MODULATE_COLOR
GLdouble GLdouble GLdouble r
void SDL_UnlockSurface(SDL_Surface *surface)
SDL_bool SDL_SetClipRect(SDL_Surface *surface, const SDL_Rect *rect)
#define SDL_COPY_COLORKEY
int SDL_SetSurfaceRLE(SDL_Surface *surface, int flag)
Sets the RLE acceleration hint for a surface.
static int SDL_CalculatePitch(Uint32 format, int width)
GLint GLint GLint GLint GLint x
#define SDL_ISPIXELFORMAT_INDEXED(format)
int SDL_LockSurface(SDL_Surface *surface)
Sets up a surface for directly accessing the pixels.
SDL_Surface * SDL_ConvertSurfaceFormat(SDL_Surface *surface, Uint32 pixel_format, Uint32 flags)
SDL_BlendMode
The blend mode used in SDL_RenderCopy() and drawing operations.
#define SDL_MasksToPixelFormatEnum
SDL_Surface * SDL_ConvertSurface(SDL_Surface *surface, const SDL_PixelFormat *format, Uint32 flags)
GLfloat GLfloat GLfloat GLfloat h
static SDL_INLINE SDL_bool SDL_CreateSurfaceOnStack(int width, int height, Uint32 pixel_format, void *pixels, int pitch, SDL_Surface *surface, SDL_PixelFormat *format, SDL_BlitMap *blitmap)
int SDL_SetSurfaceColorMod(SDL_Surface *surface, Uint8 r, Uint8 g, Uint8 b)
Set an additional color value used in blit operations.
A collection of pixels used in software blitting.
int SDL_SetSurfaceAlphaMod(SDL_Surface *surface, Uint8 alpha)
Set an additional alpha value used in blit operations.
int SDL_UpperBlitScaled(SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect)
int SDL_SetSurfaceBlendMode(SDL_Surface *surface, SDL_BlendMode blendMode)
Set the blend mode used for blit operations.
void SDL_UnRLESurface(SDL_Surface *surface, int recode)
static void SDL_ConvertColorkeyToAlpha(SDL_Surface *surface)
#define SDL_BYTESPERPIXEL(X)
Uint32 dst_palette_version
SDL_Surface * SDL_DuplicateSurface(SDL_Surface *surface)
#define SDL_COPY_RLE_COLORKEY
#define SDL_MAX_SINT32
A signed 32-bit integer type.
#define SDL_InvalidParamError(param)
set set set set set set set macro pixldst1 abits if abits op else op endif endm macro pixldst2 abits if abits op else op endif endm macro pixldst4 abits if abits op else op endif endm macro pixldst0 abits op endm macro pixldst3 mem_operand op endm macro pixldst30 mem_operand op endm macro pixldst abits if abits elseif abits elseif abits elseif abits elseif abits pixldst0 abits else pixldst0 abits pixldst0 abits pixldst0 abits pixldst0 abits endif elseif abits else pixldst0 abits pixldst0 abits endif elseif abits else error unsupported bpp
#define SDL_IntersectRect
int SDL_LowerBlit(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect)
int SDL_SetColorKey(SDL_Surface *surface, int flag, Uint32 key)
Sets the color key (transparent pixel) in a blittable surface.
int SDL_UpperBlit(SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect)
int SDL_ConvertPixels_YUV_to_RGB(int width, int height, Uint32 src_format, const void *src, int src_pitch, Uint32 dst_format, void *dst, int dst_pitch)
GLfloat GLfloat GLfloat alpha
GLint GLint GLsizei width
void SDL_GetClipRect(SDL_Surface *surface, SDL_Rect *rect)
Uint32 src_palette_version
#define SDL_COPY_RLE_DESIRED
static SDL_BlendMode blendMode
void SDL_InvalidateMap(SDL_BlitMap *map)
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
#define SDL_ALPHA_TRANSPARENT
SDL_Surface * SDL_CreateRGBSurfaceWithFormat(Uint32 flags, int width, int height, int depth, Uint32 format)
SDL_COMPILE_TIME_ASSERT(surface_size_assumptions, sizeof(int)==sizeof(Sint32) &&sizeof(size_t) >=sizeof(Sint32))
int SDL_MapSurface(SDL_Surface *src, SDL_Surface *dst)
int SDL_SetSurfacePalette(SDL_Surface *surface, SDL_Palette *palette)
Set the palette used by a surface.
int SDL_GetSurfaceBlendMode(SDL_Surface *surface, SDL_BlendMode *blendMode)
Get the blend mode used for blit operations.
int SDL_ConvertPixels(int width, int height, Uint32 src_format, const void *src, int src_pitch, Uint32 dst_format, void *dst, int dst_pitch)
Copy a block of pixels of one format to another format.
GLubyte GLubyte GLubyte GLubyte w
GLint GLint GLint GLint GLint GLint y
SDL_Surface * SDL_CreateRGBSurfaceWithFormatFrom(void *pixels, int width, int height, int depth, int pitch, Uint32 format)
int SDL_GetSurfaceAlphaMod(SDL_Surface *surface, Uint8 *alpha)
Get the additional alpha value used in blit operations.
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
int SDL_InitFormat(SDL_PixelFormat *format, Uint32 pixel_format)
void SDL_FreeSurface(SDL_Surface *surface)
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
int SDL_RLESurface(SDL_Surface *surface)
#define SDL_OutOfMemory()
GLint GLint GLsizei GLsizei GLsizei depth
SDL_Surface * SDL_CreateRGBSurface(Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask)
SDL_bool SDL_HasColorKey(SDL_Surface *surface)
Returns whether the surface has a color key.
GLint GLint GLsizei GLsizei height
#define SDL_COPY_MODULATE_ALPHA
SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char const char SDL_SCANF_FORMAT_STRING const char return SDL_ThreadFunction const char void return Uint32 return Uint32 void
#define SDL_COPY_RLE_ALPHAKEY
int SDL_LowerBlitScaled(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect)
SDL_BlitMap * SDL_AllocBlitMap(void)
#define SDL_ISPIXELFORMAT_FOURCC(format)
SDL_Surface * SDL_CreateRGBSurfaceFrom(void *pixels, int width, int height, int depth, int pitch, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask)
int SDL_ConvertPixels_RGB_to_YUV(int width, int height, Uint32 src_format, const void *src, int src_pitch, Uint32 dst_format, void *dst, int dst_pitch)
GLboolean GLboolean GLboolean b
void SDL_FreeBlitMap(SDL_BlitMap *map)
int SDL_GetSurfaceColorMod(SDL_Surface *surface, Uint8 *r, Uint8 *g, Uint8 *b)
Get the additional color value used in blit operations.
#define SDL_BITSPERPIXEL(X)
#define SDL_SetPixelFormatPalette
#define SDL_Unsupported()
A rectangle, with the origin at the upper left.