21 #include "../SDL_internal.h" 46 if (surface ==
NULL) {
82 if (surface->
w && surface->
h) {
142 if (surface !=
NULL) {
147 surface->
pitch = pitch;
165 if (surface !=
NULL) {
170 surface->
pitch = pitch;
180 return SDL_SetError(
"SDL_SetSurfacePalette() passed a NULL surface");
300 for (y = surface->
h; y--;) {
302 for (x = surface->
w; x--;) {
303 if ((*spot &
mask) == ckey) {
308 row += surface->
pitch / 2;
324 for (y = surface->
h; y--;) {
326 for (x = surface->
w; x--;) {
327 if ((*spot & mask) == ckey) {
332 row += surface->
pitch / 4;
358 if (r != 0xFF || g != 0xFF || b != 0xFF) {
473 switch (surface->
map->
504 full_rect.
w = surface->
w;
505 full_rect.
h = surface->
h;
518 if (surface && rect) {
539 if ((src->
map->
dst != dst) ||
553 return (src->
map->
blit(src, srcrect, dst, dstrect));
562 int srcx, srcy,
w,
h;
566 return SDL_SetError(
"SDL_UpperBlit: passed a NULL surface");
569 return SDL_SetError(
"Surfaces must not be locked during blit");
573 if (dstrect ==
NULL) {
574 fulldst.
x = fulldst.
y = 0;
591 maxw = src->
w - srcx;
602 maxh = src->
h - srcy;
617 dx = clip->
x - dstrect->
x;
623 dx = dstrect->
x + w - clip->
x - clip->
w;
627 dy = clip->
y - dstrect->
y;
633 dy = dstrect->
y + h - clip->
y - clip->
h;
644 if (w > 0 && h > 0) {
648 sr.
w = dstrect->
w =
w;
649 sr.
h = dstrect->
h =
h;
652 dstrect->
w = dstrect->
h = 0;
660 double src_x0, src_y0, src_x1, src_y1;
661 double dst_x0, dst_y0, dst_x1, dst_y1;
663 double scaling_w, scaling_h;
669 return SDL_SetError(
"SDL_UpperBlitScaled: passed a NULL surface");
672 return SDL_SetError(
"Surfaces must not be locked during blit");
675 if (
NULL == srcrect) {
683 if (
NULL == dstrect) {
691 if (dst_w == src_w && dst_h == src_h) {
696 scaling_w = (double)dst_w / src_w;
697 scaling_h = (double)dst_h / src_h;
699 if (
NULL == dstrect) {
707 dst_x1 = dst_x0 + dst_w - 1;
708 dst_y1 = dst_y0 + dst_h - 1;
711 if (
NULL == srcrect) {
719 src_x1 = src_x0 + src_w - 1;
720 src_y1 = src_y0 + src_h - 1;
725 dst_x0 -= src_x0 * scaling_w;
729 if (src_x1 >= src->
w) {
730 dst_x1 -= (src_x1 - src->
w + 1) * scaling_w;
735 dst_y0 -= src_y0 * scaling_h;
739 if (src_y1 >= src->
h) {
740 dst_y1 -= (src_y1 - src->
h + 1) * scaling_h;
754 src_x0 -= dst_x0 / scaling_w;
759 src_x1 -= (dst_x1 - dst->
clip_rect.
w + 1) / scaling_w;
764 src_y0 -= dst_y0 / scaling_h;
769 src_y1 -= (dst_y1 - dst->
clip_rect.
h + 1) / scaling_h;
781 final_src.
w = (int)
SDL_floor(src_x1 - src_x0 + 1.5);
782 final_src.
h = (int)
SDL_floor(src_y1 - src_y0 + 1.5);
786 final_dst.
w = (int)
SDL_floor(dst_x1 - dst_x0 + 1.5);
787 final_dst.
h = (int)
SDL_floor(dst_y1 - dst_y0 + 1.5);
795 *dstrect = final_dst;
797 if (final_dst.
w == 0 || final_dst.
h == 0 ||
798 final_src.
w <= 0 || final_src.
h <= 0) {
814 static const Uint32 complex_copy_flags = (
905 if (convert ==
NULL) {
933 bounds.
w = surface->
w;
934 bounds.
h = surface->
h;
963 }
else if (format->
Amask) {
972 if (set_colorkey_by_color) {
974 Uint8 keyR, keyG, keyB, keyA;
977 &keyG, &keyB, &keyA);
1037 surface->
pitch = pitch;
1043 blitmap->
info.
r = 0xFF;
1044 blitmap->
info.
g = 0xFF;
1045 blitmap->
info.
b = 0xFF;
1046 blitmap->
info.
a = 0xFF;
1047 surface->
map = blitmap;
1058 Uint32 src_format,
const void *
src,
int src_pitch,
1059 Uint32 dst_format,
void *
dst,
int dst_pitch)
1065 void *nonconst_src = (
void *) src;
1076 if (src_format == dst_format) {
1080 switch (src_format) {
1100 for (i = height; i--;) {
1102 src = (
Uint8*)src + src_pitch;
1103 dst = (
Uint8*)dst + dst_pitch;
1112 for (i = height * 2; i--;) {
1114 src = (
Uint8*)src + src_pitch;
1115 dst = (
Uint8*)dst + dst_pitch;
1120 for (i = height; i--;) {
1122 src = (
Uint8*)src + src_pitch;
1123 dst = (
Uint8*)dst + dst_pitch;
1131 &src_surface, &src_fmt, &src_blitmap)) {
1135 &dst_surface, &dst_fmt, &dst_blitmap)) {
1144 return SDL_LowerBlit(&src_surface, &rect, &dst_surface, &rect);
1153 if (surface ==
NULL) {
1162 while (surface->
locked > 0) {
int SDL_GetColorKey(SDL_Surface *surface, Uint32 *key)
Gets the color key (transparent pixel) in a blittable surface.
#define SDL_COPY_MODULATE_COLOR
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
void SDL_UnlockSurface(SDL_Surface *surface)
SDL_bool SDL_SetClipRect(SDL_Surface *surface, const SDL_Rect *rect)
GLdouble GLdouble GLdouble r
#define SDL_COPY_COLORKEY
GLint GLint GLsizei width
int SDL_SetSurfaceRLE(SDL_Surface *surface, int flag)
Sets the RLE acceleration hint for a surface.
#define SDL_ISPIXELFORMAT_INDEXED(format)
GLint GLint GLint GLint GLint x
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)
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
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
#define SDL_COPY_RLE_COLORKEY
uint32_t Uint32
An unsigned 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
GLint GLint GLsizei GLsizei height
#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)
GLfloat GLfloat GLfloat alpha
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)
#define SDL_ALPHA_TRANSPARENT
SDL_Surface * SDL_CreateRGBSurfaceWithFormat(Uint32 flags, int width, int height, int depth, Uint32 format)
void * SDL_calloc(size_t nmemb, size_t size)
GLint GLint GLint GLint GLint GLint y
int SDL_MapSurface(SDL_Surface *src, SDL_Surface *dst)
uint8_t Uint8
An unsigned 8-bit integer type.
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.
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.
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_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_MODULATE_ALPHA
#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)
uint16_t Uint16
An unsigned 16-bit integer type.
int SDL_CalculatePitch(SDL_Surface *surface)
GLubyte GLubyte GLubyte GLubyte w
#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)
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_SetPixelFormatPalette
#define SDL_Unsupported()
GLfloat GLfloat GLfloat GLfloat h
A rectangle, with the origin at the upper left.