Mercurial > sdl-ios-xcode
annotate src/render/software/SDL_blendpoint.c @ 5172:ededa1ccf91c
Switched the SDL 1.2 compatibility to use the window surface, so it's fast even when there's no hardware acceleration available.
This means that the YUV overlay now uses software, but that's okay since fast YUV code should be using the textures now anyway.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Thu, 03 Feb 2011 21:13:55 -0800 |
parents | d72793305335 |
children | d976b67150c5 |
rev | line source |
---|---|
2901 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
3697 | 3 Copyright (C) 1997-2010 Sam Lantinga |
2901 | 4 |
5 This library is free software; you can redistribute it and/or | |
6 modify it under the terms of the GNU Lesser General Public | |
7 License as published by the Free Software Foundation; either | |
8 version 2.1 of the License, or (at your option) any later version. | |
9 | |
10 This library is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 Lesser General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU Lesser General Public | |
16 License along with this library; if not, write to the Free Software | |
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
18 | |
19 Sam Lantinga | |
20 slouken@libsdl.org | |
21 */ | |
22 #include "SDL_config.h" | |
23 | |
24 #include "SDL_draw.h" | |
5166
d72793305335
Making the API simpler, moved the surface drawing functions to the software renderer.
Sam Lantinga <slouken@libsdl.org>
parents:
5143
diff
changeset
|
25 #include "SDL_blendpoint.h" |
d72793305335
Making the API simpler, moved the surface drawing functions to the software renderer.
Sam Lantinga <slouken@libsdl.org>
parents:
5143
diff
changeset
|
26 |
2901 | 27 |
28 static int | |
4929
aa8888658021
Use the enumerated type for blend and scale mode instead of int
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
29 SDL_BlendPoint_RGB555(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, |
2901 | 30 Uint8 g, Uint8 b, Uint8 a) |
31 { | |
32 unsigned inva = 0xff - a; | |
33 | |
34 switch (blendMode) { | |
35 case SDL_BLENDMODE_BLEND: | |
36 DRAW_SETPIXELXY_BLEND_RGB555(x, y); | |
37 break; | |
38 case SDL_BLENDMODE_ADD: | |
39 DRAW_SETPIXELXY_ADD_RGB555(x, y); | |
40 break; | |
41 default: | |
42 DRAW_SETPIXELXY_RGB555(x, y); | |
43 break; | |
44 } | |
45 return 0; | |
46 } | |
47 | |
48 static int | |
4929
aa8888658021
Use the enumerated type for blend and scale mode instead of int
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
49 SDL_BlendPoint_RGB565(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, |
2901 | 50 Uint8 g, Uint8 b, Uint8 a) |
51 { | |
52 unsigned inva = 0xff - a; | |
53 | |
54 switch (blendMode) { | |
55 case SDL_BLENDMODE_BLEND: | |
56 DRAW_SETPIXELXY_BLEND_RGB565(x, y); | |
57 break; | |
58 case SDL_BLENDMODE_ADD: | |
59 DRAW_SETPIXELXY_ADD_RGB565(x, y); | |
60 break; | |
61 default: | |
62 DRAW_SETPIXELXY_RGB565(x, y); | |
63 break; | |
64 } | |
65 return 0; | |
66 } | |
67 | |
68 static int | |
4929
aa8888658021
Use the enumerated type for blend and scale mode instead of int
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
69 SDL_BlendPoint_RGB888(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, |
2901 | 70 Uint8 g, Uint8 b, Uint8 a) |
71 { | |
72 unsigned inva = 0xff - a; | |
73 | |
74 switch (blendMode) { | |
75 case SDL_BLENDMODE_BLEND: | |
76 DRAW_SETPIXELXY_BLEND_RGB888(x, y); | |
77 break; | |
78 case SDL_BLENDMODE_ADD: | |
79 DRAW_SETPIXELXY_ADD_RGB888(x, y); | |
80 break; | |
81 default: | |
82 DRAW_SETPIXELXY_RGB888(x, y); | |
83 break; | |
84 } | |
85 return 0; | |
86 } | |
87 | |
88 static int | |
4929
aa8888658021
Use the enumerated type for blend and scale mode instead of int
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
89 SDL_BlendPoint_ARGB8888(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, |
2901 | 90 Uint8 r, Uint8 g, Uint8 b, Uint8 a) |
91 { | |
92 unsigned inva = 0xff - a; | |
93 | |
94 switch (blendMode) { | |
95 case SDL_BLENDMODE_BLEND: | |
96 DRAW_SETPIXELXY_BLEND_ARGB8888(x, y); | |
97 break; | |
98 case SDL_BLENDMODE_ADD: | |
99 DRAW_SETPIXELXY_ADD_ARGB8888(x, y); | |
100 break; | |
101 default: | |
102 DRAW_SETPIXELXY_ARGB8888(x, y); | |
103 break; | |
104 } | |
105 return 0; | |
106 } | |
107 | |
108 static int | |
4929
aa8888658021
Use the enumerated type for blend and scale mode instead of int
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
109 SDL_BlendPoint_RGB(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, |
2901 | 110 Uint8 g, Uint8 b, Uint8 a) |
111 { | |
112 SDL_PixelFormat *fmt = dst->format; | |
113 unsigned inva = 0xff - a; | |
114 | |
115 switch (fmt->BytesPerPixel) { | |
116 case 2: | |
117 switch (blendMode) { | |
118 case SDL_BLENDMODE_BLEND: | |
119 DRAW_SETPIXELXY2_BLEND_RGB(x, y); | |
120 break; | |
121 case SDL_BLENDMODE_ADD: | |
122 DRAW_SETPIXELXY2_ADD_RGB(x, y); | |
123 break; | |
124 default: | |
125 DRAW_SETPIXELXY2_RGB(x, y); | |
126 break; | |
127 } | |
128 return 0; | |
129 case 4: | |
130 switch (blendMode) { | |
131 case SDL_BLENDMODE_BLEND: | |
132 DRAW_SETPIXELXY4_BLEND_RGB(x, y); | |
133 break; | |
134 case SDL_BLENDMODE_ADD: | |
135 DRAW_SETPIXELXY4_ADD_RGB(x, y); | |
136 break; | |
137 default: | |
138 DRAW_SETPIXELXY4_RGB(x, y); | |
139 break; | |
140 } | |
141 return 0; | |
142 default: | |
143 SDL_Unsupported(); | |
144 return -1; | |
145 } | |
146 } | |
147 | |
148 static int | |
4929
aa8888658021
Use the enumerated type for blend and scale mode instead of int
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
149 SDL_BlendPoint_RGBA(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, |
2901 | 150 Uint8 g, Uint8 b, Uint8 a) |
151 { | |
152 SDL_PixelFormat *fmt = dst->format; | |
153 unsigned inva = 0xff - a; | |
154 | |
155 switch (fmt->BytesPerPixel) { | |
156 case 4: | |
157 switch (blendMode) { | |
158 case SDL_BLENDMODE_BLEND: | |
159 DRAW_SETPIXELXY4_BLEND_RGBA(x, y); | |
160 break; | |
161 case SDL_BLENDMODE_ADD: | |
162 DRAW_SETPIXELXY4_ADD_RGBA(x, y); | |
163 break; | |
164 default: | |
165 DRAW_SETPIXELXY4_RGBA(x, y); | |
166 break; | |
167 } | |
168 return 0; | |
169 default: | |
170 SDL_Unsupported(); | |
171 return -1; | |
172 } | |
173 } | |
174 | |
175 int | |
4929
aa8888658021
Use the enumerated type for blend and scale mode instead of int
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
176 SDL_BlendPoint(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, |
2901 | 177 Uint8 g, Uint8 b, Uint8 a) |
178 { | |
3536
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
179 if (!dst) { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
180 SDL_SetError("Passed NULL destination surface"); |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
181 return -1; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
182 } |
2901 | 183 |
184 /* This function doesn't work on surfaces < 8 bpp */ | |
185 if (dst->format->BitsPerPixel < 8) { | |
186 SDL_SetError("SDL_BlendPoint(): Unsupported surface format"); | |
3536
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
187 return -1; |
2901 | 188 } |
189 | |
190 /* Perform clipping */ | |
191 if (x < dst->clip_rect.x || y < dst->clip_rect.y || | |
192 x >= (dst->clip_rect.x + dst->clip_rect.w) || | |
193 y >= (dst->clip_rect.y + dst->clip_rect.h)) { | |
194 return 0; | |
195 } | |
196 | |
3536
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
197 if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { |
2901 | 198 r = DRAW_MUL(r, a); |
199 g = DRAW_MUL(g, a); | |
200 b = DRAW_MUL(b, a); | |
201 } | |
202 | |
3536
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
203 switch (dst->format->BitsPerPixel) { |
2901 | 204 case 15: |
3536
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
205 switch (dst->format->Rmask) { |
2901 | 206 case 0x7C00: |
207 return SDL_BlendPoint_RGB555(dst, x, y, blendMode, r, g, b, a); | |
208 } | |
209 break; | |
210 case 16: | |
3536
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
211 switch (dst->format->Rmask) { |
2901 | 212 case 0xF800: |
213 return SDL_BlendPoint_RGB565(dst, x, y, blendMode, r, g, b, a); | |
214 } | |
215 break; | |
216 case 32: | |
3536
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
217 switch (dst->format->Rmask) { |
2901 | 218 case 0x00FF0000: |
3536
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
219 if (!dst->format->Amask) { |
2901 | 220 return SDL_BlendPoint_RGB888(dst, x, y, blendMode, r, g, b, |
221 a); | |
222 } else { | |
223 return SDL_BlendPoint_ARGB8888(dst, x, y, blendMode, r, g, b, | |
224 a); | |
225 } | |
226 break; | |
227 } | |
3536
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
228 break; |
2901 | 229 default: |
230 break; | |
231 } | |
232 | |
3536
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
233 if (!dst->format->Amask) { |
2901 | 234 return SDL_BlendPoint_RGB(dst, x, y, blendMode, r, g, b, a); |
235 } else { | |
236 return SDL_BlendPoint_RGBA(dst, x, y, blendMode, r, g, b, a); | |
237 } | |
238 } | |
239 | |
3536
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
240 int |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
241 SDL_BlendPoints(SDL_Surface * dst, const SDL_Point * points, int count, |
4929
aa8888658021
Use the enumerated type for blend and scale mode instead of int
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
242 SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) |
3536
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
243 { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
244 int minx, miny; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
245 int maxx, maxy; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
246 int i; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
247 int x, y; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
248 int (*func)(SDL_Surface * dst, int x, int y, |
4929
aa8888658021
Use the enumerated type for blend and scale mode instead of int
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
249 SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) = NULL; |
3536
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
250 int status = 0; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
251 |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
252 if (!dst) { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
253 SDL_SetError("Passed NULL destination surface"); |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
254 return -1; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
255 } |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
256 |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
257 /* This function doesn't work on surfaces < 8 bpp */ |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
258 if (dst->format->BitsPerPixel < 8) { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
259 SDL_SetError("SDL_BlendPoints(): Unsupported surface format"); |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
260 return (-1); |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
261 } |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
262 |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
263 if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
264 r = DRAW_MUL(r, a); |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
265 g = DRAW_MUL(g, a); |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
266 b = DRAW_MUL(b, a); |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
267 } |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
268 |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
269 /* FIXME: Does this function pointer slow things down significantly? */ |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
270 switch (dst->format->BitsPerPixel) { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
271 case 15: |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
272 switch (dst->format->Rmask) { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
273 case 0x7C00: |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
274 func = SDL_BlendPoint_RGB555; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
275 break; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
276 } |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
277 break; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
278 case 16: |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
279 switch (dst->format->Rmask) { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
280 case 0xF800: |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
281 func = SDL_BlendPoint_RGB565; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
282 break; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
283 } |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
284 break; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
285 case 32: |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
286 switch (dst->format->Rmask) { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
287 case 0x00FF0000: |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
288 if (!dst->format->Amask) { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
289 func = SDL_BlendPoint_RGB888; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
290 } else { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
291 func = SDL_BlendPoint_ARGB8888; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
292 } |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
293 break; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
294 } |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
295 break; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
296 default: |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
297 break; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
298 } |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
299 |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
300 if (!func) { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
301 if (!dst->format->Amask) { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
302 func = SDL_BlendPoint_RGB; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
303 } else { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
304 func = SDL_BlendPoint_RGBA; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
305 } |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
306 } |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
307 |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
308 minx = dst->clip_rect.x; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
309 maxx = dst->clip_rect.x + dst->clip_rect.w - 1; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
310 miny = dst->clip_rect.y; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
311 maxy = dst->clip_rect.y + dst->clip_rect.h - 1; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
312 |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
313 for (i = 0; i < count; ++i) { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
314 x = points[i].x; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
315 y = points[i].y; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
316 |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
317 if (x < minx || x > maxx || y < miny || y > maxy) { |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
318 continue; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
319 } |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
320 status = func(dst, x, y, blendMode, r, g, b, a); |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
321 } |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
322 return status; |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
323 } |
0267b8b1595c
Added interfaces for batch drawing of points, lines and rects:
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
324 |
2901 | 325 /* vi: set ts=4 sw=4 expandtab: */ |