SDL 2.0
SDL_blendpoint.c File Reference
#include "../../SDL_internal.h"
#include "SDL_draw.h"
#include "SDL_blendpoint.h"
+ Include dependency graph for SDL_blendpoint.c:

Go to the source code of this file.

Functions

static int SDL_BlendPoint_RGB555 (SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
 
static int SDL_BlendPoint_RGB565 (SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
 
static int SDL_BlendPoint_RGB888 (SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
 
static int SDL_BlendPoint_ARGB8888 (SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
 
static int SDL_BlendPoint_RGB (SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
 
static int SDL_BlendPoint_RGBA (SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
 
int SDL_BlendPoint (SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
 
int SDL_BlendPoints (SDL_Surface *dst, const SDL_Point *points, int count, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
 

Function Documentation

◆ SDL_BlendPoint()

int SDL_BlendPoint ( SDL_Surface dst,
int  x,
int  y,
SDL_BlendMode  blendMode,
Uint8  r,
Uint8  g,
Uint8  b,
Uint8  a 
)

Definition at line 196 of file SDL_blendpoint.c.

198{
199 if (!dst) {
200 return SDL_SetError("Passed NULL destination surface");
201 }
202
203 /* This function doesn't work on surfaces < 8 bpp */
204 if (dst->format->BitsPerPixel < 8) {
205 return SDL_SetError("SDL_BlendPoint(): Unsupported surface format");
206 }
207
208 /* Perform clipping */
209 if (x < dst->clip_rect.x || y < dst->clip_rect.y ||
210 x >= (dst->clip_rect.x + dst->clip_rect.w) ||
211 y >= (dst->clip_rect.y + dst->clip_rect.h)) {
212 return 0;
213 }
214
216 r = DRAW_MUL(r, a);
217 g = DRAW_MUL(g, a);
218 b = DRAW_MUL(b, a);
219 }
220
221 switch (dst->format->BitsPerPixel) {
222 case 15:
223 switch (dst->format->Rmask) {
224 case 0x7C00:
225 return SDL_BlendPoint_RGB555(dst, x, y, blendMode, r, g, b, a);
226 }
227 break;
228 case 16:
229 switch (dst->format->Rmask) {
230 case 0xF800:
231 return SDL_BlendPoint_RGB565(dst, x, y, blendMode, r, g, b, a);
232 }
233 break;
234 case 32:
235 switch (dst->format->Rmask) {
236 case 0x00FF0000:
237 if (!dst->format->Amask) {
238 return SDL_BlendPoint_RGB888(dst, x, y, blendMode, r, g, b, a);
239 } else {
240 return SDL_BlendPoint_ARGB8888(dst, x, y, blendMode, r, g, b, a);
241 }
242 /* break; -Wunreachable-code-break */
243 }
244 break;
245 default:
246 break;
247 }
248
249 if (!dst->format->Amask) {
250 return SDL_BlendPoint_RGB(dst, x, y, blendMode, r, g, b, a);
251 } else {
252 return SDL_BlendPoint_RGBA(dst, x, y, blendMode, r, g, b, a);
253 }
254}
@ SDL_BLENDMODE_ADD
Definition: SDL_blendmode.h:47
@ SDL_BLENDMODE_BLEND
Definition: SDL_blendmode.h:44
static int SDL_BlendPoint_RGBA(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
static int SDL_BlendPoint_RGB888(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
static int SDL_BlendPoint_ARGB8888(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
static int SDL_BlendPoint_RGB555(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
static int SDL_BlendPoint_RGB565(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
static int SDL_BlendPoint_RGB(SDL_Surface *dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
#define DRAW_MUL(_a, _b)
Definition: SDL_draw.h:29
#define SDL_SetError
GLint GLint GLint GLint GLint GLint y
Definition: SDL_opengl.h:1574
GLdouble GLdouble GLdouble r
Definition: SDL_opengl.h:2079
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1574
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
GLenum GLenum dst
GLboolean GLboolean g
static SDL_BlendMode blendMode
Definition: testdraw2.c:34

References blendMode, DRAW_MUL, SDL_BLENDMODE_ADD, SDL_BLENDMODE_BLEND, SDL_BlendPoint_ARGB8888(), SDL_BlendPoint_RGB(), SDL_BlendPoint_RGB555(), SDL_BlendPoint_RGB565(), SDL_BlendPoint_RGB888(), SDL_BlendPoint_RGBA(), and SDL_SetError.

Referenced by SDL_BlendLines().

◆ SDL_BlendPoint_ARGB8888()

static int SDL_BlendPoint_ARGB8888 ( SDL_Surface dst,
int  x,
int  y,
SDL_BlendMode  blendMode,
Uint8  r,
Uint8  g,
Uint8  b,
Uint8  a 
)
static

Definition at line 99 of file SDL_blendpoint.c.

101{
102 unsigned inva = 0xff - a;
103
104 switch (blendMode) {
107 break;
110 break;
113 break;
114 default:
116 break;
117 }
118 return 0;
119}
@ SDL_BLENDMODE_MOD
Definition: SDL_blendmode.h:50
#define DRAW_SETPIXELXY_ARGB8888(x, y)
Definition: SDL_draw.h:202
#define DRAW_SETPIXELXY_BLEND_ARGB8888(x, y)
Definition: SDL_draw.h:205
#define DRAW_SETPIXELXY_ADD_ARGB8888(x, y)
Definition: SDL_draw.h:208
#define DRAW_SETPIXELXY_MOD_ARGB8888(x, y)
Definition: SDL_draw.h:211

References blendMode, DRAW_SETPIXELXY_ADD_ARGB8888, DRAW_SETPIXELXY_ARGB8888, DRAW_SETPIXELXY_BLEND_ARGB8888, DRAW_SETPIXELXY_MOD_ARGB8888, SDL_BLENDMODE_ADD, SDL_BLENDMODE_BLEND, and SDL_BLENDMODE_MOD.

Referenced by SDL_BlendPoint(), and SDL_BlendPoints().

◆ SDL_BlendPoint_RGB()

static int SDL_BlendPoint_RGB ( SDL_Surface dst,
int  x,
int  y,
SDL_BlendMode  blendMode,
Uint8  r,
Uint8  g,
Uint8  b,
Uint8  a 
)
static

Definition at line 122 of file SDL_blendpoint.c.

124{
125 SDL_PixelFormat *fmt = dst->format;
126 unsigned inva = 0xff - a;
127
128 switch (fmt->BytesPerPixel) {
129 case 2:
130 switch (blendMode) {
133 break;
136 break;
139 break;
140 default:
142 break;
143 }
144 return 0;
145 case 4:
146 switch (blendMode) {
149 break;
152 break;
155 break;
156 default:
158 break;
159 }
160 return 0;
161 default:
162 return SDL_Unsupported();
163 }
164}
#define DRAW_SETPIXELXY4_MOD_RGB(x, y)
Definition: SDL_draw.h:254
#define DRAW_SETPIXELXY4_ADD_RGB(x, y)
Definition: SDL_draw.h:248
#define DRAW_SETPIXELXY4_RGB(x, y)
Definition: SDL_draw.h:236
#define DRAW_SETPIXELXY2_BLEND_RGB(x, y)
Definition: SDL_draw.h:239
#define DRAW_SETPIXELXY2_ADD_RGB(x, y)
Definition: SDL_draw.h:245
#define DRAW_SETPIXELXY4_BLEND_RGB(x, y)
Definition: SDL_draw.h:242
#define DRAW_SETPIXELXY2_MOD_RGB(x, y)
Definition: SDL_draw.h:251
#define DRAW_SETPIXELXY2_RGB(x, y)
Definition: SDL_draw.h:233
#define SDL_Unsupported()
Definition: SDL_error.h:53
Uint8 BytesPerPixel
Definition: SDL_pixels.h:320

References blendMode, SDL_PixelFormat::BytesPerPixel, DRAW_SETPIXELXY2_ADD_RGB, DRAW_SETPIXELXY2_BLEND_RGB, DRAW_SETPIXELXY2_MOD_RGB, DRAW_SETPIXELXY2_RGB, DRAW_SETPIXELXY4_ADD_RGB, DRAW_SETPIXELXY4_BLEND_RGB, DRAW_SETPIXELXY4_MOD_RGB, DRAW_SETPIXELXY4_RGB, SDL_PixelFormat::format, SDL_BLENDMODE_ADD, SDL_BLENDMODE_BLEND, SDL_BLENDMODE_MOD, and SDL_Unsupported.

Referenced by SDL_BlendPoint(), and SDL_BlendPoints().

◆ SDL_BlendPoint_RGB555()

static int SDL_BlendPoint_RGB555 ( SDL_Surface dst,
int  x,
int  y,
SDL_BlendMode  blendMode,
Uint8  r,
Uint8  g,
Uint8  b,
Uint8  a 
)
static

Definition at line 30 of file SDL_blendpoint.c.

32{
33 unsigned inva = 0xff - a;
34
35 switch (blendMode) {
38 break;
41 break;
44 break;
45 default:
47 break;
48 }
49 return 0;
50}
#define DRAW_SETPIXELXY_MOD_RGB555(x, y)
Definition: SDL_draw.h:118
#define DRAW_SETPIXELXY_RGB555(x, y)
Definition: SDL_draw.h:109
#define DRAW_SETPIXELXY_ADD_RGB555(x, y)
Definition: SDL_draw.h:115
#define DRAW_SETPIXELXY_BLEND_RGB555(x, y)
Definition: SDL_draw.h:112

References blendMode, DRAW_SETPIXELXY_ADD_RGB555, DRAW_SETPIXELXY_BLEND_RGB555, DRAW_SETPIXELXY_MOD_RGB555, DRAW_SETPIXELXY_RGB555, SDL_BLENDMODE_ADD, SDL_BLENDMODE_BLEND, and SDL_BLENDMODE_MOD.

Referenced by SDL_BlendPoint(), and SDL_BlendPoints().

◆ SDL_BlendPoint_RGB565()

static int SDL_BlendPoint_RGB565 ( SDL_Surface dst,
int  x,
int  y,
SDL_BlendMode  blendMode,
Uint8  r,
Uint8  g,
Uint8  b,
Uint8  a 
)
static

Definition at line 53 of file SDL_blendpoint.c.

55{
56 unsigned inva = 0xff - a;
57
58 switch (blendMode) {
61 break;
64 break;
67 break;
68 default:
70 break;
71 }
72 return 0;
73}
#define DRAW_SETPIXELXY_RGB565(x, y)
Definition: SDL_draw.h:140
#define DRAW_SETPIXELXY_ADD_RGB565(x, y)
Definition: SDL_draw.h:146
#define DRAW_SETPIXELXY_MOD_RGB565(x, y)
Definition: SDL_draw.h:149
#define DRAW_SETPIXELXY_BLEND_RGB565(x, y)
Definition: SDL_draw.h:143

References blendMode, DRAW_SETPIXELXY_ADD_RGB565, DRAW_SETPIXELXY_BLEND_RGB565, DRAW_SETPIXELXY_MOD_RGB565, DRAW_SETPIXELXY_RGB565, SDL_BLENDMODE_ADD, SDL_BLENDMODE_BLEND, and SDL_BLENDMODE_MOD.

Referenced by SDL_BlendPoint(), and SDL_BlendPoints().

◆ SDL_BlendPoint_RGB888()

static int SDL_BlendPoint_RGB888 ( SDL_Surface dst,
int  x,
int  y,
SDL_BlendMode  blendMode,
Uint8  r,
Uint8  g,
Uint8  b,
Uint8  a 
)
static

Definition at line 76 of file SDL_blendpoint.c.

78{
79 unsigned inva = 0xff - a;
80
81 switch (blendMode) {
84 break;
87 break;
90 break;
91 default:
93 break;
94 }
95 return 0;
96}
#define DRAW_SETPIXELXY_MOD_RGB888(x, y)
Definition: SDL_draw.h:180
#define DRAW_SETPIXELXY_ADD_RGB888(x, y)
Definition: SDL_draw.h:177
#define DRAW_SETPIXELXY_RGB888(x, y)
Definition: SDL_draw.h:171
#define DRAW_SETPIXELXY_BLEND_RGB888(x, y)
Definition: SDL_draw.h:174

References blendMode, DRAW_SETPIXELXY_ADD_RGB888, DRAW_SETPIXELXY_BLEND_RGB888, DRAW_SETPIXELXY_MOD_RGB888, DRAW_SETPIXELXY_RGB888, SDL_BLENDMODE_ADD, SDL_BLENDMODE_BLEND, and SDL_BLENDMODE_MOD.

Referenced by SDL_BlendPoint(), and SDL_BlendPoints().

◆ SDL_BlendPoint_RGBA()

static int SDL_BlendPoint_RGBA ( SDL_Surface dst,
int  x,
int  y,
SDL_BlendMode  blendMode,
Uint8  r,
Uint8  g,
Uint8  b,
Uint8  a 
)
static

Definition at line 167 of file SDL_blendpoint.c.

169{
170 SDL_PixelFormat *fmt = dst->format;
171 unsigned inva = 0xff - a;
172
173 switch (fmt->BytesPerPixel) {
174 case 4:
175 switch (blendMode) {
178 break;
181 break;
184 break;
185 default:
187 break;
188 }
189 return 0;
190 default:
191 return SDL_Unsupported();
192 }
193}
#define DRAW_SETPIXELXY4_ADD_RGBA(x, y)
Definition: SDL_draw.h:283
#define DRAW_SETPIXELXY4_BLEND_RGBA(x, y)
Definition: SDL_draw.h:280
#define DRAW_SETPIXELXY4_MOD_RGBA(x, y)
Definition: SDL_draw.h:286
#define DRAW_SETPIXELXY4_RGBA(x, y)
Definition: SDL_draw.h:277

References blendMode, SDL_PixelFormat::BytesPerPixel, DRAW_SETPIXELXY4_ADD_RGBA, DRAW_SETPIXELXY4_BLEND_RGBA, DRAW_SETPIXELXY4_MOD_RGBA, DRAW_SETPIXELXY4_RGBA, SDL_PixelFormat::format, SDL_BLENDMODE_ADD, SDL_BLENDMODE_BLEND, SDL_BLENDMODE_MOD, and SDL_Unsupported.

Referenced by SDL_BlendPoint(), and SDL_BlendPoints().

◆ SDL_BlendPoints()

int SDL_BlendPoints ( SDL_Surface dst,
const SDL_Point points,
int  count,
SDL_BlendMode  blendMode,
Uint8  r,
Uint8  g,
Uint8  b,
Uint8  a 
)

Definition at line 257 of file SDL_blendpoint.c.

259{
260 int minx, miny;
261 int maxx, maxy;
262 int i;
263 int x, y;
264 int (*func)(SDL_Surface * dst, int x, int y,
266 int status = 0;
267
268 if (!dst) {
269 return SDL_SetError("Passed NULL destination surface");
270 }
271
272 /* This function doesn't work on surfaces < 8 bpp */
273 if (dst->format->BitsPerPixel < 8) {
274 return SDL_SetError("SDL_BlendPoints(): Unsupported surface format");
275 }
276
278 r = DRAW_MUL(r, a);
279 g = DRAW_MUL(g, a);
280 b = DRAW_MUL(b, a);
281 }
282
283 /* FIXME: Does this function pointer slow things down significantly? */
284 switch (dst->format->BitsPerPixel) {
285 case 15:
286 switch (dst->format->Rmask) {
287 case 0x7C00:
289 break;
290 }
291 break;
292 case 16:
293 switch (dst->format->Rmask) {
294 case 0xF800:
296 break;
297 }
298 break;
299 case 32:
300 switch (dst->format->Rmask) {
301 case 0x00FF0000:
302 if (!dst->format->Amask) {
304 } else {
306 }
307 break;
308 }
309 break;
310 default:
311 break;
312 }
313
314 if (!func) {
315 if (!dst->format->Amask) {
317 } else {
319 }
320 }
321
322 minx = dst->clip_rect.x;
323 maxx = dst->clip_rect.x + dst->clip_rect.w - 1;
324 miny = dst->clip_rect.y;
325 maxy = dst->clip_rect.y + dst->clip_rect.h - 1;
326
327 for (i = 0; i < count; ++i) {
328 x = points[i].x;
329 y = points[i].y;
330
331 if (x < minx || x > maxx || y < miny || y > maxy) {
332 continue;
333 }
334 status = func(dst, x, y, blendMode, r, g, b, a);
335 }
336 return status;
337}
SDL_BlendMode
The blend mode used in SDL_RenderCopy() and drawing operations.
Definition: SDL_blendmode.h:41
GLuint GLuint GLsizei count
Definition: SDL_opengl.h:1571
GLfixed GLfixed GLint GLint GLfixed points
GLenum func
uint8_t Uint8
Definition: SDL_stdinc.h:179
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)
Definition: SDL_x11sym.h:50
#define NULL
Definition: begin_code.h:167
A collection of pixels used in software blitting.
Definition: SDL_surface.h:71

References blendMode, DRAW_MUL, i, NULL, SDL_BLENDMODE_ADD, SDL_BLENDMODE_BLEND, SDL_BlendPoint_ARGB8888(), SDL_BlendPoint_RGB(), SDL_BlendPoint_RGB555(), SDL_BlendPoint_RGB565(), SDL_BlendPoint_RGB888(), SDL_BlendPoint_RGBA(), and SDL_SetError.

Referenced by SW_RunCommandQueue().