SDL  2.0
SDL_blit_copy.h File Reference
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void SDL_BlitCopy (SDL_BlitInfo *info)
 

Function Documentation

void SDL_BlitCopy ( SDL_BlitInfo info)

Definition at line 91 of file SDL_blit_copy.c.

References SDL_PixelFormat::BytesPerPixel, SDL_BlitInfo::dst, SDL_BlitInfo::dst_fmt, SDL_BlitInfo::dst_h, SDL_BlitInfo::dst_pitch, SDL_BlitInfo::dst_w, SDL_HasMMX, SDL_HasSSE, SDL_memcpy, SDL_memmove, SDL_BlitInfo::src, and SDL_BlitInfo::src_pitch.

Referenced by SDL_CalculateBlit().

92 {
93  SDL_bool overlap;
94  Uint8 *src, *dst;
95  int w, h;
96  int srcskip, dstskip;
97 
98  w = info->dst_w * info->dst_fmt->BytesPerPixel;
99  h = info->dst_h;
100  src = info->src;
101  dst = info->dst;
102  srcskip = info->src_pitch;
103  dstskip = info->dst_pitch;
104 
105  /* Properly handle overlapping blits */
106  if (src < dst) {
107  overlap = (dst < (src + h*srcskip));
108  } else {
109  overlap = (src < (dst + h*dstskip));
110  }
111  if (overlap) {
112  while (h--) {
113  SDL_memmove(dst, src, w);
114  src += srcskip;
115  dst += dstskip;
116  }
117  return;
118  }
119 
120 #ifdef __SSE__
121  if (SDL_HasSSE() &&
122  !((uintptr_t) src & 15) && !(srcskip & 15) &&
123  !((uintptr_t) dst & 15) && !(dstskip & 15)) {
124  while (h--) {
125  SDL_memcpySSE(dst, src, w);
126  src += srcskip;
127  dst += dstskip;
128  }
129  return;
130  }
131 #endif
132 
133 #ifdef __MMX__
134  if (SDL_HasMMX() && !(srcskip & 7) && !(dstskip & 7)) {
135  while (h--) {
136  SDL_memcpyMMX(dst, src, w);
137  src += srcskip;
138  dst += dstskip;
139  }
140  _mm_empty();
141  return;
142  }
143 #endif
144 
145  while (h--) {
146  SDL_memcpy(dst, src, w);
147  src += srcskip;
148  dst += dstskip;
149  }
150 }
GLenum GLenum dst
Uint8 BytesPerPixel
Definition: SDL_pixels.h:304
int dst_pitch
Definition: SDL_blit.h:63
SDL_bool
Definition: SDL_stdinc.h:126
Uint8 * dst
Definition: SDL_blit.h:61
#define SDL_memcpy
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:139
unsigned int uintptr_t
#define SDL_memmove
#define SDL_HasMMX
Uint8 * src
Definition: SDL_blit.h:57
SDL_PixelFormat * dst_fmt
Definition: SDL_blit.h:66
int src_pitch
Definition: SDL_blit.h:59
GLubyte GLubyte GLubyte GLubyte w
GLenum src
#define SDL_HasSSE
GLfloat GLfloat GLfloat GLfloat h