Mercurial > sdl-ios-xcode
annotate src/video/SDL_blit_N.c @ 563:04dcaf3da918
Massive Quartz input enhancements from Darrell Walisser. His email:
Enclosed is a patch that addresses the following:
--Various minor cleanups.
Removed dead/obsolete code, made some style cleanups
--Mouse Events
Now keep track of what button(s) were pressed so we know when to send
the mouse up event. This fixes the case where the mouse is dragged
outside of the game window and released (in which case we want to send
the mouse up event even though the mouse is outside the game window).
--Input Grabbing
Here is my take on the grabbing situation, which is the basis for the
new implementation.
There are 3 grab states, ungrabbed (UG), visible (VG), and invisible
(IG). Both VG and IG keep the mouse constrained to the window and
produce relative motion events. In VG the cursor is visible (duh), in
IG it is not. In VG, absolute motion events also work.
There are 6 actions that can affect grabbing:
1. Set Fullscreen/Window (F/W). In fullscreen, a visible grab should do
nothing. However, a fullscreen visible grab can be treated just like a
windowed visible grab, which is what I have done to help simplify
things.
2. Cursor hide/show (H/S). If the cursor is hidden when grabbing, the
grab is an invisible grab. If the cursor is visible, the grab should
just constrain the mouse to the window.
3. Input grab/ungrab(G/U). If grabbed, the cursor should be confined to
the window as should the keyboard input. On Mac OS X, the keyboard
input is implicitly grabbed by confining the cursor, except for
command-tab which can switch away from the application. Should the
window come to the foreground if the application is deactivated and
grab input is called? This isn't necessary in this implementation
because the grab state will be asserted upon activation.
Using my notation, these are all the cases that need to be handled
(state + action = new state).
UG+U = UG
UG+G = VG or IG, if cursor is visible or not
UG+H = UG
UG+S = UG
VG+U = UG
VG+G = VG
VG+H = IG
VG+S = VG
IG+U = UG
IG+G = IG
IG+H = IG
IG+S = VG
The cases that result in the same state can be ignored in the code,
which cuts it down to just 5 cases.
Another issue is what happens when the app loses/gains input focus from
deactivate/activate or iconify/deiconify. I think that if input focus
is ever lost (outside of SDL's control), the grab state should be
suspended and the cursor should become visible and active again. When
regained, the cursor should reappear in its original location and/or
grab state. This way, when reactivating the cursor is still in the same
position as before so apps shouldn't get confused when the next motion
event comes in. This is what I've done in this patch.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Fri, 27 Dec 2002 20:52:41 +0000 |
parents | 41cadcba32e8 |
children | 22dbf364c017 |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
297
f6ffac90895c
Updated copyright information for 2002
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
3 Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
6 modify it under the terms of the GNU Library General Public | |
7 License as published by the Free Software Foundation; either | |
8 version 2 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 Library General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU Library General Public | |
16 License along with this library; if not, write to the Free | |
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
18 | |
19 Sam Lantinga | |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
91
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
22 | |
23 #ifdef SAVE_RCSID | |
24 static char rcsid = | |
25 "@(#) $Id$"; | |
26 #endif | |
27 | |
28 #include <stdio.h> | |
29 | |
30 #include "SDL_types.h" | |
31 #include "SDL_video.h" | |
32 #include "SDL_blit.h" | |
33 #include "SDL_byteorder.h" | |
34 | |
35 /* Function to check the CPU flags */ | |
36 #define MMX_CPU 0x800000 | |
37 #ifdef USE_ASMBLIT | |
38 #define CPU_Flags() Hermes_X86_CPU() | |
39 #else | |
40 #define CPU_Flags() 0L | |
41 #endif | |
42 | |
43 /* Functions to blit from N-bit surfaces to other surfaces */ | |
44 | |
45 #ifdef USE_ASMBLIT | |
46 | |
47 /* Heheheh, we coerce Hermes into using SDL blit information */ | |
48 #define X86_ASSEMBLER | |
49 #define HermesConverterInterface SDL_BlitInfo | |
50 #define HermesClearInterface void | |
51 #define STACKCALL | |
52 | |
53 #include "HeadMMX.h" | |
54 #include "HeadX86.h" | |
55 | |
56 #else | |
57 | |
58 /* This is now endian dependent */ | |
59 #if ( SDL_BYTEORDER == SDL_LIL_ENDIAN ) | |
60 #define HI 1 | |
61 #define LO 0 | |
62 #else /* ( SDL_BYTEORDER == SDL_BIG_ENDIAN ) */ | |
63 #define HI 0 | |
64 #define LO 1 | |
65 #endif | |
66 | |
67 /* Special optimized blit for RGB 8-8-8 --> RGB 3-3-2 */ | |
68 #define RGB888_RGB332(dst, src) { \ | |
69 dst = (((src)&0x00E00000)>>16)| \ | |
70 (((src)&0x0000E000)>>11)| \ | |
71 (((src)&0x000000C0)>>6); \ | |
72 } | |
73 static void Blit_RGB888_index8(SDL_BlitInfo *info) | |
74 { | |
75 #ifndef USE_DUFFS_LOOP | |
76 int c; | |
77 #endif | |
78 int width, height; | |
79 Uint32 *src; | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
80 const Uint8 *map; |
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
81 Uint8 *dst; |
0 | 82 int srcskip, dstskip; |
83 | |
84 /* Set up some basic variables */ | |
85 width = info->d_width; | |
86 height = info->d_height; | |
87 src = (Uint32 *)info->s_pixels; | |
88 srcskip = info->s_skip/4; | |
89 dst = info->d_pixels; | |
90 dstskip = info->d_skip; | |
91 map = info->table; | |
92 | |
93 if ( map == NULL ) { | |
94 while ( height-- ) { | |
95 #ifdef USE_DUFFS_LOOP | |
96 DUFFS_LOOP( | |
97 RGB888_RGB332(*dst++, *src); | |
98 , width); | |
99 #else | |
100 for ( c=width/4; c; --c ) { | |
101 /* Pack RGB into 8bit pixel */ | |
102 ++src; | |
103 RGB888_RGB332(*dst++, *src); | |
104 ++src; | |
105 RGB888_RGB332(*dst++, *src); | |
106 ++src; | |
107 RGB888_RGB332(*dst++, *src); | |
108 ++src; | |
109 } | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
110 switch ( width & 3 ) { |
0 | 111 case 3: |
112 RGB888_RGB332(*dst++, *src); | |
113 ++src; | |
114 case 2: | |
115 RGB888_RGB332(*dst++, *src); | |
116 ++src; | |
117 case 1: | |
118 RGB888_RGB332(*dst++, *src); | |
119 ++src; | |
120 } | |
121 #endif /* USE_DUFFS_LOOP */ | |
122 src += srcskip; | |
123 dst += dstskip; | |
124 } | |
125 } else { | |
126 int pixel; | |
127 | |
128 while ( height-- ) { | |
129 #ifdef USE_DUFFS_LOOP | |
130 DUFFS_LOOP( | |
131 RGB888_RGB332(pixel, *src); | |
132 *dst++ = map[pixel]; | |
133 ++src; | |
134 , width); | |
135 #else | |
136 for ( c=width/4; c; --c ) { | |
137 /* Pack RGB into 8bit pixel */ | |
138 RGB888_RGB332(pixel, *src); | |
139 *dst++ = map[pixel]; | |
140 ++src; | |
141 RGB888_RGB332(pixel, *src); | |
142 *dst++ = map[pixel]; | |
143 ++src; | |
144 RGB888_RGB332(pixel, *src); | |
145 *dst++ = map[pixel]; | |
146 ++src; | |
147 RGB888_RGB332(pixel, *src); | |
148 *dst++ = map[pixel]; | |
149 ++src; | |
150 } | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
151 switch ( width & 3 ) { |
0 | 152 case 3: |
153 RGB888_RGB332(pixel, *src); | |
154 *dst++ = map[pixel]; | |
155 ++src; | |
156 case 2: | |
157 RGB888_RGB332(pixel, *src); | |
158 *dst++ = map[pixel]; | |
159 ++src; | |
160 case 1: | |
161 RGB888_RGB332(pixel, *src); | |
162 *dst++ = map[pixel]; | |
163 ++src; | |
164 } | |
165 #endif /* USE_DUFFS_LOOP */ | |
166 src += srcskip; | |
167 dst += dstskip; | |
168 } | |
169 } | |
170 } | |
171 /* Special optimized blit for RGB 8-8-8 --> RGB 5-5-5 */ | |
172 #define RGB888_RGB555(dst, src) { \ | |
173 *(Uint16 *)(dst) = (((*src)&0x00F80000)>>9)| \ | |
174 (((*src)&0x0000F800)>>6)| \ | |
175 (((*src)&0x000000F8)>>3); \ | |
176 } | |
177 #define RGB888_RGB555_TWO(dst, src) { \ | |
178 *(Uint32 *)(dst) = (((((src[HI])&0x00F80000)>>9)| \ | |
179 (((src[HI])&0x0000F800)>>6)| \ | |
180 (((src[HI])&0x000000F8)>>3))<<16)| \ | |
181 (((src[LO])&0x00F80000)>>9)| \ | |
182 (((src[LO])&0x0000F800)>>6)| \ | |
183 (((src[LO])&0x000000F8)>>3); \ | |
184 } | |
185 static void Blit_RGB888_RGB555(SDL_BlitInfo *info) | |
186 { | |
187 #ifndef USE_DUFFS_LOOP | |
188 int c; | |
189 #endif | |
190 int width, height; | |
191 Uint32 *src; | |
192 Uint16 *dst; | |
193 int srcskip, dstskip; | |
194 | |
195 /* Set up some basic variables */ | |
196 width = info->d_width; | |
197 height = info->d_height; | |
198 src = (Uint32 *)info->s_pixels; | |
199 srcskip = info->s_skip/4; | |
200 dst = (Uint16 *)info->d_pixels; | |
201 dstskip = info->d_skip/2; | |
202 | |
203 #ifdef USE_DUFFS_LOOP | |
204 while ( height-- ) { | |
205 DUFFS_LOOP( | |
206 RGB888_RGB555(dst, src); | |
207 ++src; | |
208 ++dst; | |
209 , width); | |
210 src += srcskip; | |
211 dst += dstskip; | |
212 } | |
213 #else | |
214 /* Memory align at 4-byte boundary, if necessary */ | |
215 if ( (long)dst & 0x03 ) { | |
216 /* Don't do anything if width is 0 */ | |
217 if ( width == 0 ) { | |
218 return; | |
219 } | |
220 --width; | |
221 | |
222 while ( height-- ) { | |
223 /* Perform copy alignment */ | |
224 RGB888_RGB555(dst, src); | |
225 ++src; | |
226 ++dst; | |
227 | |
228 /* Copy in 4 pixel chunks */ | |
229 for ( c=width/4; c; --c ) { | |
230 RGB888_RGB555_TWO(dst, src); | |
231 src += 2; | |
232 dst += 2; | |
233 RGB888_RGB555_TWO(dst, src); | |
234 src += 2; | |
235 dst += 2; | |
236 } | |
237 /* Get any leftovers */ | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
238 switch (width & 3) { |
0 | 239 case 3: |
240 RGB888_RGB555(dst, src); | |
241 ++src; | |
242 ++dst; | |
243 case 2: | |
244 RGB888_RGB555_TWO(dst, src); | |
245 src += 2; | |
246 dst += 2; | |
247 break; | |
248 case 1: | |
249 RGB888_RGB555(dst, src); | |
250 ++src; | |
251 ++dst; | |
252 break; | |
253 } | |
254 src += srcskip; | |
255 dst += dstskip; | |
256 } | |
257 } else { | |
258 while ( height-- ) { | |
259 /* Copy in 4 pixel chunks */ | |
260 for ( c=width/4; c; --c ) { | |
261 RGB888_RGB555_TWO(dst, src); | |
262 src += 2; | |
263 dst += 2; | |
264 RGB888_RGB555_TWO(dst, src); | |
265 src += 2; | |
266 dst += 2; | |
267 } | |
268 /* Get any leftovers */ | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
269 switch (width & 3) { |
0 | 270 case 3: |
271 RGB888_RGB555(dst, src); | |
272 ++src; | |
273 ++dst; | |
274 case 2: | |
275 RGB888_RGB555_TWO(dst, src); | |
276 src += 2; | |
277 dst += 2; | |
278 break; | |
279 case 1: | |
280 RGB888_RGB555(dst, src); | |
281 ++src; | |
282 ++dst; | |
283 break; | |
284 } | |
285 src += srcskip; | |
286 dst += dstskip; | |
287 } | |
288 } | |
289 #endif /* USE_DUFFS_LOOP */ | |
290 } | |
291 /* Special optimized blit for RGB 8-8-8 --> RGB 5-6-5 */ | |
292 #define RGB888_RGB565(dst, src) { \ | |
293 *(Uint16 *)(dst) = (((*src)&0x00F80000)>>8)| \ | |
294 (((*src)&0x0000FC00)>>5)| \ | |
295 (((*src)&0x000000F8)>>3); \ | |
296 } | |
297 #define RGB888_RGB565_TWO(dst, src) { \ | |
298 *(Uint32 *)(dst) = (((((src[HI])&0x00F80000)>>8)| \ | |
299 (((src[HI])&0x0000FC00)>>5)| \ | |
300 (((src[HI])&0x000000F8)>>3))<<16)| \ | |
301 (((src[LO])&0x00F80000)>>8)| \ | |
302 (((src[LO])&0x0000FC00)>>5)| \ | |
303 (((src[LO])&0x000000F8)>>3); \ | |
304 } | |
305 static void Blit_RGB888_RGB565(SDL_BlitInfo *info) | |
306 { | |
307 #ifndef USE_DUFFS_LOOP | |
308 int c; | |
309 #endif | |
310 int width, height; | |
311 Uint32 *src; | |
312 Uint16 *dst; | |
313 int srcskip, dstskip; | |
314 | |
315 /* Set up some basic variables */ | |
316 width = info->d_width; | |
317 height = info->d_height; | |
318 src = (Uint32 *)info->s_pixels; | |
319 srcskip = info->s_skip/4; | |
320 dst = (Uint16 *)info->d_pixels; | |
321 dstskip = info->d_skip/2; | |
322 | |
323 #ifdef USE_DUFFS_LOOP | |
324 while ( height-- ) { | |
325 DUFFS_LOOP( | |
326 RGB888_RGB565(dst, src); | |
327 ++src; | |
328 ++dst; | |
329 , width); | |
330 src += srcskip; | |
331 dst += dstskip; | |
332 } | |
333 #else | |
334 /* Memory align at 4-byte boundary, if necessary */ | |
335 if ( (long)dst & 0x03 ) { | |
336 /* Don't do anything if width is 0 */ | |
337 if ( width == 0 ) { | |
338 return; | |
339 } | |
340 --width; | |
341 | |
342 while ( height-- ) { | |
343 /* Perform copy alignment */ | |
344 RGB888_RGB565(dst, src); | |
345 ++src; | |
346 ++dst; | |
347 | |
348 /* Copy in 4 pixel chunks */ | |
349 for ( c=width/4; c; --c ) { | |
350 RGB888_RGB565_TWO(dst, src); | |
351 src += 2; | |
352 dst += 2; | |
353 RGB888_RGB565_TWO(dst, src); | |
354 src += 2; | |
355 dst += 2; | |
356 } | |
357 /* Get any leftovers */ | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
358 switch (width & 3) { |
0 | 359 case 3: |
360 RGB888_RGB565(dst, src); | |
361 ++src; | |
362 ++dst; | |
363 case 2: | |
364 RGB888_RGB565_TWO(dst, src); | |
365 src += 2; | |
366 dst += 2; | |
367 break; | |
368 case 1: | |
369 RGB888_RGB565(dst, src); | |
370 ++src; | |
371 ++dst; | |
372 break; | |
373 } | |
374 src += srcskip; | |
375 dst += dstskip; | |
376 } | |
377 } else { | |
378 while ( height-- ) { | |
379 /* Copy in 4 pixel chunks */ | |
380 for ( c=width/4; c; --c ) { | |
381 RGB888_RGB565_TWO(dst, src); | |
382 src += 2; | |
383 dst += 2; | |
384 RGB888_RGB565_TWO(dst, src); | |
385 src += 2; | |
386 dst += 2; | |
387 } | |
388 /* Get any leftovers */ | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
389 switch (width & 3) { |
0 | 390 case 3: |
391 RGB888_RGB565(dst, src); | |
392 ++src; | |
393 ++dst; | |
394 case 2: | |
395 RGB888_RGB565_TWO(dst, src); | |
396 src += 2; | |
397 dst += 2; | |
398 break; | |
399 case 1: | |
400 RGB888_RGB565(dst, src); | |
401 ++src; | |
402 ++dst; | |
403 break; | |
404 } | |
405 src += srcskip; | |
406 dst += dstskip; | |
407 } | |
408 } | |
409 #endif /* USE_DUFFS_LOOP */ | |
410 } | |
411 | |
412 #endif /* USE_ASMBLIT */ | |
413 | |
414 | |
415 /* Special optimized blit for RGB 5-6-5 --> 32-bit RGB surfaces */ | |
416 #if ( SDL_BYTEORDER == SDL_LIL_ENDIAN ) | |
417 #define RGB565_32(dst, src, map) (map[src[0]*2] + map[src[1]*2+1]) | |
418 #else /* ( SDL_BYTEORDER == SDL_BIG_ENDIAN ) */ | |
419 #define RGB565_32(dst, src, map) (map[src[1]*2] + map[src[0]*2+1]) | |
420 #endif | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
421 static void Blit_RGB565_32(SDL_BlitInfo *info, const Uint32 *map) |
0 | 422 { |
423 #ifndef USE_DUFFS_LOOP | |
424 int c; | |
425 #endif | |
426 int width, height; | |
427 Uint8 *src; | |
428 Uint32 *dst; | |
429 int srcskip, dstskip; | |
430 | |
431 /* Set up some basic variables */ | |
432 width = info->d_width; | |
433 height = info->d_height; | |
434 src = (Uint8 *)info->s_pixels; | |
435 srcskip = info->s_skip; | |
436 dst = (Uint32 *)info->d_pixels; | |
437 dstskip = info->d_skip/4; | |
438 | |
439 #ifdef USE_DUFFS_LOOP | |
440 while ( height-- ) { | |
441 DUFFS_LOOP( | |
442 { | |
443 *dst++ = RGB565_32(dst, src, map); | |
444 src += 2; | |
445 }, | |
446 width); | |
447 src += srcskip; | |
448 dst += dstskip; | |
449 } | |
450 #else | |
451 while ( height-- ) { | |
452 /* Copy in 4 pixel chunks */ | |
453 for ( c=width/4; c; --c ) { | |
454 *dst++ = RGB565_32(dst, src, map); | |
455 src += 2; | |
456 *dst++ = RGB565_32(dst, src, map); | |
457 src += 2; | |
458 *dst++ = RGB565_32(dst, src, map); | |
459 src += 2; | |
460 *dst++ = RGB565_32(dst, src, map); | |
461 src += 2; | |
462 } | |
463 /* Get any leftovers */ | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
464 switch (width & 3) { |
0 | 465 case 3: |
466 *dst++ = RGB565_32(dst, src, map); | |
467 src += 2; | |
468 case 2: | |
469 *dst++ = RGB565_32(dst, src, map); | |
470 src += 2; | |
471 case 1: | |
472 *dst++ = RGB565_32(dst, src, map); | |
473 src += 2; | |
474 break; | |
475 } | |
476 src += srcskip; | |
477 dst += dstskip; | |
478 } | |
479 #endif /* USE_DUFFS_LOOP */ | |
480 } | |
481 | |
482 /* Special optimized blit for RGB 5-6-5 --> ARGB 8-8-8-8 */ | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
483 static const Uint32 RGB565_ARGB8888_LUT[512] = { |
0 | 484 0x00000000, 0xff000000, 0x00000008, 0xff002000, |
485 0x00000010, 0xff004000, 0x00000018, 0xff006100, | |
486 0x00000020, 0xff008100, 0x00000029, 0xff00a100, | |
487 0x00000031, 0xff00c200, 0x00000039, 0xff00e200, | |
488 0x00000041, 0xff080000, 0x0000004a, 0xff082000, | |
489 0x00000052, 0xff084000, 0x0000005a, 0xff086100, | |
490 0x00000062, 0xff088100, 0x0000006a, 0xff08a100, | |
491 0x00000073, 0xff08c200, 0x0000007b, 0xff08e200, | |
492 0x00000083, 0xff100000, 0x0000008b, 0xff102000, | |
493 0x00000094, 0xff104000, 0x0000009c, 0xff106100, | |
494 0x000000a4, 0xff108100, 0x000000ac, 0xff10a100, | |
495 0x000000b4, 0xff10c200, 0x000000bd, 0xff10e200, | |
496 0x000000c5, 0xff180000, 0x000000cd, 0xff182000, | |
497 0x000000d5, 0xff184000, 0x000000de, 0xff186100, | |
498 0x000000e6, 0xff188100, 0x000000ee, 0xff18a100, | |
499 0x000000f6, 0xff18c200, 0x000000ff, 0xff18e200, | |
500 0x00000400, 0xff200000, 0x00000408, 0xff202000, | |
501 0x00000410, 0xff204000, 0x00000418, 0xff206100, | |
502 0x00000420, 0xff208100, 0x00000429, 0xff20a100, | |
503 0x00000431, 0xff20c200, 0x00000439, 0xff20e200, | |
504 0x00000441, 0xff290000, 0x0000044a, 0xff292000, | |
505 0x00000452, 0xff294000, 0x0000045a, 0xff296100, | |
506 0x00000462, 0xff298100, 0x0000046a, 0xff29a100, | |
507 0x00000473, 0xff29c200, 0x0000047b, 0xff29e200, | |
508 0x00000483, 0xff310000, 0x0000048b, 0xff312000, | |
509 0x00000494, 0xff314000, 0x0000049c, 0xff316100, | |
510 0x000004a4, 0xff318100, 0x000004ac, 0xff31a100, | |
511 0x000004b4, 0xff31c200, 0x000004bd, 0xff31e200, | |
512 0x000004c5, 0xff390000, 0x000004cd, 0xff392000, | |
513 0x000004d5, 0xff394000, 0x000004de, 0xff396100, | |
514 0x000004e6, 0xff398100, 0x000004ee, 0xff39a100, | |
515 0x000004f6, 0xff39c200, 0x000004ff, 0xff39e200, | |
516 0x00000800, 0xff410000, 0x00000808, 0xff412000, | |
517 0x00000810, 0xff414000, 0x00000818, 0xff416100, | |
518 0x00000820, 0xff418100, 0x00000829, 0xff41a100, | |
519 0x00000831, 0xff41c200, 0x00000839, 0xff41e200, | |
520 0x00000841, 0xff4a0000, 0x0000084a, 0xff4a2000, | |
521 0x00000852, 0xff4a4000, 0x0000085a, 0xff4a6100, | |
522 0x00000862, 0xff4a8100, 0x0000086a, 0xff4aa100, | |
523 0x00000873, 0xff4ac200, 0x0000087b, 0xff4ae200, | |
524 0x00000883, 0xff520000, 0x0000088b, 0xff522000, | |
525 0x00000894, 0xff524000, 0x0000089c, 0xff526100, | |
526 0x000008a4, 0xff528100, 0x000008ac, 0xff52a100, | |
527 0x000008b4, 0xff52c200, 0x000008bd, 0xff52e200, | |
528 0x000008c5, 0xff5a0000, 0x000008cd, 0xff5a2000, | |
529 0x000008d5, 0xff5a4000, 0x000008de, 0xff5a6100, | |
530 0x000008e6, 0xff5a8100, 0x000008ee, 0xff5aa100, | |
531 0x000008f6, 0xff5ac200, 0x000008ff, 0xff5ae200, | |
532 0x00000c00, 0xff620000, 0x00000c08, 0xff622000, | |
533 0x00000c10, 0xff624000, 0x00000c18, 0xff626100, | |
534 0x00000c20, 0xff628100, 0x00000c29, 0xff62a100, | |
535 0x00000c31, 0xff62c200, 0x00000c39, 0xff62e200, | |
536 0x00000c41, 0xff6a0000, 0x00000c4a, 0xff6a2000, | |
537 0x00000c52, 0xff6a4000, 0x00000c5a, 0xff6a6100, | |
538 0x00000c62, 0xff6a8100, 0x00000c6a, 0xff6aa100, | |
539 0x00000c73, 0xff6ac200, 0x00000c7b, 0xff6ae200, | |
540 0x00000c83, 0xff730000, 0x00000c8b, 0xff732000, | |
541 0x00000c94, 0xff734000, 0x00000c9c, 0xff736100, | |
542 0x00000ca4, 0xff738100, 0x00000cac, 0xff73a100, | |
543 0x00000cb4, 0xff73c200, 0x00000cbd, 0xff73e200, | |
544 0x00000cc5, 0xff7b0000, 0x00000ccd, 0xff7b2000, | |
545 0x00000cd5, 0xff7b4000, 0x00000cde, 0xff7b6100, | |
546 0x00000ce6, 0xff7b8100, 0x00000cee, 0xff7ba100, | |
547 0x00000cf6, 0xff7bc200, 0x00000cff, 0xff7be200, | |
548 0x00001000, 0xff830000, 0x00001008, 0xff832000, | |
549 0x00001010, 0xff834000, 0x00001018, 0xff836100, | |
550 0x00001020, 0xff838100, 0x00001029, 0xff83a100, | |
551 0x00001031, 0xff83c200, 0x00001039, 0xff83e200, | |
552 0x00001041, 0xff8b0000, 0x0000104a, 0xff8b2000, | |
553 0x00001052, 0xff8b4000, 0x0000105a, 0xff8b6100, | |
554 0x00001062, 0xff8b8100, 0x0000106a, 0xff8ba100, | |
555 0x00001073, 0xff8bc200, 0x0000107b, 0xff8be200, | |
556 0x00001083, 0xff940000, 0x0000108b, 0xff942000, | |
557 0x00001094, 0xff944000, 0x0000109c, 0xff946100, | |
558 0x000010a4, 0xff948100, 0x000010ac, 0xff94a100, | |
559 0x000010b4, 0xff94c200, 0x000010bd, 0xff94e200, | |
560 0x000010c5, 0xff9c0000, 0x000010cd, 0xff9c2000, | |
561 0x000010d5, 0xff9c4000, 0x000010de, 0xff9c6100, | |
562 0x000010e6, 0xff9c8100, 0x000010ee, 0xff9ca100, | |
563 0x000010f6, 0xff9cc200, 0x000010ff, 0xff9ce200, | |
564 0x00001400, 0xffa40000, 0x00001408, 0xffa42000, | |
565 0x00001410, 0xffa44000, 0x00001418, 0xffa46100, | |
566 0x00001420, 0xffa48100, 0x00001429, 0xffa4a100, | |
567 0x00001431, 0xffa4c200, 0x00001439, 0xffa4e200, | |
568 0x00001441, 0xffac0000, 0x0000144a, 0xffac2000, | |
569 0x00001452, 0xffac4000, 0x0000145a, 0xffac6100, | |
570 0x00001462, 0xffac8100, 0x0000146a, 0xffaca100, | |
571 0x00001473, 0xffacc200, 0x0000147b, 0xfface200, | |
572 0x00001483, 0xffb40000, 0x0000148b, 0xffb42000, | |
573 0x00001494, 0xffb44000, 0x0000149c, 0xffb46100, | |
574 0x000014a4, 0xffb48100, 0x000014ac, 0xffb4a100, | |
575 0x000014b4, 0xffb4c200, 0x000014bd, 0xffb4e200, | |
576 0x000014c5, 0xffbd0000, 0x000014cd, 0xffbd2000, | |
577 0x000014d5, 0xffbd4000, 0x000014de, 0xffbd6100, | |
578 0x000014e6, 0xffbd8100, 0x000014ee, 0xffbda100, | |
579 0x000014f6, 0xffbdc200, 0x000014ff, 0xffbde200, | |
580 0x00001800, 0xffc50000, 0x00001808, 0xffc52000, | |
581 0x00001810, 0xffc54000, 0x00001818, 0xffc56100, | |
582 0x00001820, 0xffc58100, 0x00001829, 0xffc5a100, | |
583 0x00001831, 0xffc5c200, 0x00001839, 0xffc5e200, | |
584 0x00001841, 0xffcd0000, 0x0000184a, 0xffcd2000, | |
585 0x00001852, 0xffcd4000, 0x0000185a, 0xffcd6100, | |
586 0x00001862, 0xffcd8100, 0x0000186a, 0xffcda100, | |
587 0x00001873, 0xffcdc200, 0x0000187b, 0xffcde200, | |
588 0x00001883, 0xffd50000, 0x0000188b, 0xffd52000, | |
589 0x00001894, 0xffd54000, 0x0000189c, 0xffd56100, | |
590 0x000018a4, 0xffd58100, 0x000018ac, 0xffd5a100, | |
591 0x000018b4, 0xffd5c200, 0x000018bd, 0xffd5e200, | |
592 0x000018c5, 0xffde0000, 0x000018cd, 0xffde2000, | |
593 0x000018d5, 0xffde4000, 0x000018de, 0xffde6100, | |
594 0x000018e6, 0xffde8100, 0x000018ee, 0xffdea100, | |
595 0x000018f6, 0xffdec200, 0x000018ff, 0xffdee200, | |
596 0x00001c00, 0xffe60000, 0x00001c08, 0xffe62000, | |
597 0x00001c10, 0xffe64000, 0x00001c18, 0xffe66100, | |
598 0x00001c20, 0xffe68100, 0x00001c29, 0xffe6a100, | |
599 0x00001c31, 0xffe6c200, 0x00001c39, 0xffe6e200, | |
600 0x00001c41, 0xffee0000, 0x00001c4a, 0xffee2000, | |
601 0x00001c52, 0xffee4000, 0x00001c5a, 0xffee6100, | |
602 0x00001c62, 0xffee8100, 0x00001c6a, 0xffeea100, | |
603 0x00001c73, 0xffeec200, 0x00001c7b, 0xffeee200, | |
604 0x00001c83, 0xfff60000, 0x00001c8b, 0xfff62000, | |
605 0x00001c94, 0xfff64000, 0x00001c9c, 0xfff66100, | |
606 0x00001ca4, 0xfff68100, 0x00001cac, 0xfff6a100, | |
607 0x00001cb4, 0xfff6c200, 0x00001cbd, 0xfff6e200, | |
608 0x00001cc5, 0xffff0000, 0x00001ccd, 0xffff2000, | |
609 0x00001cd5, 0xffff4000, 0x00001cde, 0xffff6100, | |
610 0x00001ce6, 0xffff8100, 0x00001cee, 0xffffa100, | |
611 0x00001cf6, 0xffffc200, 0x00001cff, 0xffffe200 | |
612 }; | |
613 static void Blit_RGB565_ARGB8888(SDL_BlitInfo *info) | |
614 { | |
615 Blit_RGB565_32(info, RGB565_ARGB8888_LUT); | |
616 } | |
617 | |
618 /* Special optimized blit for RGB 5-6-5 --> ABGR 8-8-8-8 */ | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
619 static const Uint32 RGB565_ABGR8888_LUT[512] = { |
0 | 620 0xff000000, 0x00000000, 0xff080000, 0x00002000, |
621 0xff100000, 0x00004000, 0xff180000, 0x00006100, | |
622 0xff200000, 0x00008100, 0xff290000, 0x0000a100, | |
623 0xff310000, 0x0000c200, 0xff390000, 0x0000e200, | |
624 0xff410000, 0x00000008, 0xff4a0000, 0x00002008, | |
625 0xff520000, 0x00004008, 0xff5a0000, 0x00006108, | |
626 0xff620000, 0x00008108, 0xff6a0000, 0x0000a108, | |
627 0xff730000, 0x0000c208, 0xff7b0000, 0x0000e208, | |
628 0xff830000, 0x00000010, 0xff8b0000, 0x00002010, | |
629 0xff940000, 0x00004010, 0xff9c0000, 0x00006110, | |
630 0xffa40000, 0x00008110, 0xffac0000, 0x0000a110, | |
631 0xffb40000, 0x0000c210, 0xffbd0000, 0x0000e210, | |
632 0xffc50000, 0x00000018, 0xffcd0000, 0x00002018, | |
633 0xffd50000, 0x00004018, 0xffde0000, 0x00006118, | |
634 0xffe60000, 0x00008118, 0xffee0000, 0x0000a118, | |
635 0xfff60000, 0x0000c218, 0xffff0000, 0x0000e218, | |
636 0xff000400, 0x00000020, 0xff080400, 0x00002020, | |
637 0xff100400, 0x00004020, 0xff180400, 0x00006120, | |
638 0xff200400, 0x00008120, 0xff290400, 0x0000a120, | |
639 0xff310400, 0x0000c220, 0xff390400, 0x0000e220, | |
640 0xff410400, 0x00000029, 0xff4a0400, 0x00002029, | |
641 0xff520400, 0x00004029, 0xff5a0400, 0x00006129, | |
642 0xff620400, 0x00008129, 0xff6a0400, 0x0000a129, | |
643 0xff730400, 0x0000c229, 0xff7b0400, 0x0000e229, | |
644 0xff830400, 0x00000031, 0xff8b0400, 0x00002031, | |
645 0xff940400, 0x00004031, 0xff9c0400, 0x00006131, | |
646 0xffa40400, 0x00008131, 0xffac0400, 0x0000a131, | |
647 0xffb40400, 0x0000c231, 0xffbd0400, 0x0000e231, | |
648 0xffc50400, 0x00000039, 0xffcd0400, 0x00002039, | |
649 0xffd50400, 0x00004039, 0xffde0400, 0x00006139, | |
650 0xffe60400, 0x00008139, 0xffee0400, 0x0000a139, | |
651 0xfff60400, 0x0000c239, 0xffff0400, 0x0000e239, | |
652 0xff000800, 0x00000041, 0xff080800, 0x00002041, | |
653 0xff100800, 0x00004041, 0xff180800, 0x00006141, | |
654 0xff200800, 0x00008141, 0xff290800, 0x0000a141, | |
655 0xff310800, 0x0000c241, 0xff390800, 0x0000e241, | |
656 0xff410800, 0x0000004a, 0xff4a0800, 0x0000204a, | |
657 0xff520800, 0x0000404a, 0xff5a0800, 0x0000614a, | |
658 0xff620800, 0x0000814a, 0xff6a0800, 0x0000a14a, | |
659 0xff730800, 0x0000c24a, 0xff7b0800, 0x0000e24a, | |
660 0xff830800, 0x00000052, 0xff8b0800, 0x00002052, | |
661 0xff940800, 0x00004052, 0xff9c0800, 0x00006152, | |
662 0xffa40800, 0x00008152, 0xffac0800, 0x0000a152, | |
663 0xffb40800, 0x0000c252, 0xffbd0800, 0x0000e252, | |
664 0xffc50800, 0x0000005a, 0xffcd0800, 0x0000205a, | |
665 0xffd50800, 0x0000405a, 0xffde0800, 0x0000615a, | |
666 0xffe60800, 0x0000815a, 0xffee0800, 0x0000a15a, | |
667 0xfff60800, 0x0000c25a, 0xffff0800, 0x0000e25a, | |
668 0xff000c00, 0x00000062, 0xff080c00, 0x00002062, | |
669 0xff100c00, 0x00004062, 0xff180c00, 0x00006162, | |
670 0xff200c00, 0x00008162, 0xff290c00, 0x0000a162, | |
671 0xff310c00, 0x0000c262, 0xff390c00, 0x0000e262, | |
672 0xff410c00, 0x0000006a, 0xff4a0c00, 0x0000206a, | |
673 0xff520c00, 0x0000406a, 0xff5a0c00, 0x0000616a, | |
674 0xff620c00, 0x0000816a, 0xff6a0c00, 0x0000a16a, | |
675 0xff730c00, 0x0000c26a, 0xff7b0c00, 0x0000e26a, | |
676 0xff830c00, 0x00000073, 0xff8b0c00, 0x00002073, | |
677 0xff940c00, 0x00004073, 0xff9c0c00, 0x00006173, | |
678 0xffa40c00, 0x00008173, 0xffac0c00, 0x0000a173, | |
679 0xffb40c00, 0x0000c273, 0xffbd0c00, 0x0000e273, | |
680 0xffc50c00, 0x0000007b, 0xffcd0c00, 0x0000207b, | |
681 0xffd50c00, 0x0000407b, 0xffde0c00, 0x0000617b, | |
682 0xffe60c00, 0x0000817b, 0xffee0c00, 0x0000a17b, | |
683 0xfff60c00, 0x0000c27b, 0xffff0c00, 0x0000e27b, | |
684 0xff001000, 0x00000083, 0xff081000, 0x00002083, | |
685 0xff101000, 0x00004083, 0xff181000, 0x00006183, | |
686 0xff201000, 0x00008183, 0xff291000, 0x0000a183, | |
687 0xff311000, 0x0000c283, 0xff391000, 0x0000e283, | |
688 0xff411000, 0x0000008b, 0xff4a1000, 0x0000208b, | |
689 0xff521000, 0x0000408b, 0xff5a1000, 0x0000618b, | |
690 0xff621000, 0x0000818b, 0xff6a1000, 0x0000a18b, | |
691 0xff731000, 0x0000c28b, 0xff7b1000, 0x0000e28b, | |
692 0xff831000, 0x00000094, 0xff8b1000, 0x00002094, | |
693 0xff941000, 0x00004094, 0xff9c1000, 0x00006194, | |
694 0xffa41000, 0x00008194, 0xffac1000, 0x0000a194, | |
695 0xffb41000, 0x0000c294, 0xffbd1000, 0x0000e294, | |
696 0xffc51000, 0x0000009c, 0xffcd1000, 0x0000209c, | |
697 0xffd51000, 0x0000409c, 0xffde1000, 0x0000619c, | |
698 0xffe61000, 0x0000819c, 0xffee1000, 0x0000a19c, | |
699 0xfff61000, 0x0000c29c, 0xffff1000, 0x0000e29c, | |
700 0xff001400, 0x000000a4, 0xff081400, 0x000020a4, | |
701 0xff101400, 0x000040a4, 0xff181400, 0x000061a4, | |
702 0xff201400, 0x000081a4, 0xff291400, 0x0000a1a4, | |
703 0xff311400, 0x0000c2a4, 0xff391400, 0x0000e2a4, | |
704 0xff411400, 0x000000ac, 0xff4a1400, 0x000020ac, | |
705 0xff521400, 0x000040ac, 0xff5a1400, 0x000061ac, | |
706 0xff621400, 0x000081ac, 0xff6a1400, 0x0000a1ac, | |
707 0xff731400, 0x0000c2ac, 0xff7b1400, 0x0000e2ac, | |
708 0xff831400, 0x000000b4, 0xff8b1400, 0x000020b4, | |
709 0xff941400, 0x000040b4, 0xff9c1400, 0x000061b4, | |
710 0xffa41400, 0x000081b4, 0xffac1400, 0x0000a1b4, | |
711 0xffb41400, 0x0000c2b4, 0xffbd1400, 0x0000e2b4, | |
712 0xffc51400, 0x000000bd, 0xffcd1400, 0x000020bd, | |
713 0xffd51400, 0x000040bd, 0xffde1400, 0x000061bd, | |
714 0xffe61400, 0x000081bd, 0xffee1400, 0x0000a1bd, | |
715 0xfff61400, 0x0000c2bd, 0xffff1400, 0x0000e2bd, | |
716 0xff001800, 0x000000c5, 0xff081800, 0x000020c5, | |
717 0xff101800, 0x000040c5, 0xff181800, 0x000061c5, | |
718 0xff201800, 0x000081c5, 0xff291800, 0x0000a1c5, | |
719 0xff311800, 0x0000c2c5, 0xff391800, 0x0000e2c5, | |
720 0xff411800, 0x000000cd, 0xff4a1800, 0x000020cd, | |
721 0xff521800, 0x000040cd, 0xff5a1800, 0x000061cd, | |
722 0xff621800, 0x000081cd, 0xff6a1800, 0x0000a1cd, | |
723 0xff731800, 0x0000c2cd, 0xff7b1800, 0x0000e2cd, | |
724 0xff831800, 0x000000d5, 0xff8b1800, 0x000020d5, | |
725 0xff941800, 0x000040d5, 0xff9c1800, 0x000061d5, | |
726 0xffa41800, 0x000081d5, 0xffac1800, 0x0000a1d5, | |
727 0xffb41800, 0x0000c2d5, 0xffbd1800, 0x0000e2d5, | |
728 0xffc51800, 0x000000de, 0xffcd1800, 0x000020de, | |
729 0xffd51800, 0x000040de, 0xffde1800, 0x000061de, | |
730 0xffe61800, 0x000081de, 0xffee1800, 0x0000a1de, | |
731 0xfff61800, 0x0000c2de, 0xffff1800, 0x0000e2de, | |
732 0xff001c00, 0x000000e6, 0xff081c00, 0x000020e6, | |
733 0xff101c00, 0x000040e6, 0xff181c00, 0x000061e6, | |
734 0xff201c00, 0x000081e6, 0xff291c00, 0x0000a1e6, | |
735 0xff311c00, 0x0000c2e6, 0xff391c00, 0x0000e2e6, | |
736 0xff411c00, 0x000000ee, 0xff4a1c00, 0x000020ee, | |
737 0xff521c00, 0x000040ee, 0xff5a1c00, 0x000061ee, | |
738 0xff621c00, 0x000081ee, 0xff6a1c00, 0x0000a1ee, | |
739 0xff731c00, 0x0000c2ee, 0xff7b1c00, 0x0000e2ee, | |
740 0xff831c00, 0x000000f6, 0xff8b1c00, 0x000020f6, | |
741 0xff941c00, 0x000040f6, 0xff9c1c00, 0x000061f6, | |
742 0xffa41c00, 0x000081f6, 0xffac1c00, 0x0000a1f6, | |
743 0xffb41c00, 0x0000c2f6, 0xffbd1c00, 0x0000e2f6, | |
744 0xffc51c00, 0x000000ff, 0xffcd1c00, 0x000020ff, | |
745 0xffd51c00, 0x000040ff, 0xffde1c00, 0x000061ff, | |
746 0xffe61c00, 0x000081ff, 0xffee1c00, 0x0000a1ff, | |
747 0xfff61c00, 0x0000c2ff, 0xffff1c00, 0x0000e2ff | |
748 }; | |
749 static void Blit_RGB565_ABGR8888(SDL_BlitInfo *info) | |
750 { | |
751 Blit_RGB565_32(info, RGB565_ABGR8888_LUT); | |
752 } | |
753 | |
754 /* Special optimized blit for RGB 5-6-5 --> RGBA 8-8-8-8 */ | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
755 static const Uint32 RGB565_RGBA8888_LUT[512] = { |
0 | 756 0x000000ff, 0x00000000, 0x000008ff, 0x00200000, |
757 0x000010ff, 0x00400000, 0x000018ff, 0x00610000, | |
758 0x000020ff, 0x00810000, 0x000029ff, 0x00a10000, | |
759 0x000031ff, 0x00c20000, 0x000039ff, 0x00e20000, | |
760 0x000041ff, 0x08000000, 0x00004aff, 0x08200000, | |
761 0x000052ff, 0x08400000, 0x00005aff, 0x08610000, | |
762 0x000062ff, 0x08810000, 0x00006aff, 0x08a10000, | |
763 0x000073ff, 0x08c20000, 0x00007bff, 0x08e20000, | |
764 0x000083ff, 0x10000000, 0x00008bff, 0x10200000, | |
765 0x000094ff, 0x10400000, 0x00009cff, 0x10610000, | |
766 0x0000a4ff, 0x10810000, 0x0000acff, 0x10a10000, | |
767 0x0000b4ff, 0x10c20000, 0x0000bdff, 0x10e20000, | |
768 0x0000c5ff, 0x18000000, 0x0000cdff, 0x18200000, | |
769 0x0000d5ff, 0x18400000, 0x0000deff, 0x18610000, | |
770 0x0000e6ff, 0x18810000, 0x0000eeff, 0x18a10000, | |
771 0x0000f6ff, 0x18c20000, 0x0000ffff, 0x18e20000, | |
772 0x000400ff, 0x20000000, 0x000408ff, 0x20200000, | |
773 0x000410ff, 0x20400000, 0x000418ff, 0x20610000, | |
774 0x000420ff, 0x20810000, 0x000429ff, 0x20a10000, | |
775 0x000431ff, 0x20c20000, 0x000439ff, 0x20e20000, | |
776 0x000441ff, 0x29000000, 0x00044aff, 0x29200000, | |
777 0x000452ff, 0x29400000, 0x00045aff, 0x29610000, | |
778 0x000462ff, 0x29810000, 0x00046aff, 0x29a10000, | |
779 0x000473ff, 0x29c20000, 0x00047bff, 0x29e20000, | |
780 0x000483ff, 0x31000000, 0x00048bff, 0x31200000, | |
781 0x000494ff, 0x31400000, 0x00049cff, 0x31610000, | |
782 0x0004a4ff, 0x31810000, 0x0004acff, 0x31a10000, | |
783 0x0004b4ff, 0x31c20000, 0x0004bdff, 0x31e20000, | |
784 0x0004c5ff, 0x39000000, 0x0004cdff, 0x39200000, | |
785 0x0004d5ff, 0x39400000, 0x0004deff, 0x39610000, | |
786 0x0004e6ff, 0x39810000, 0x0004eeff, 0x39a10000, | |
787 0x0004f6ff, 0x39c20000, 0x0004ffff, 0x39e20000, | |
788 0x000800ff, 0x41000000, 0x000808ff, 0x41200000, | |
789 0x000810ff, 0x41400000, 0x000818ff, 0x41610000, | |
790 0x000820ff, 0x41810000, 0x000829ff, 0x41a10000, | |
791 0x000831ff, 0x41c20000, 0x000839ff, 0x41e20000, | |
792 0x000841ff, 0x4a000000, 0x00084aff, 0x4a200000, | |
793 0x000852ff, 0x4a400000, 0x00085aff, 0x4a610000, | |
794 0x000862ff, 0x4a810000, 0x00086aff, 0x4aa10000, | |
795 0x000873ff, 0x4ac20000, 0x00087bff, 0x4ae20000, | |
796 0x000883ff, 0x52000000, 0x00088bff, 0x52200000, | |
797 0x000894ff, 0x52400000, 0x00089cff, 0x52610000, | |
798 0x0008a4ff, 0x52810000, 0x0008acff, 0x52a10000, | |
799 0x0008b4ff, 0x52c20000, 0x0008bdff, 0x52e20000, | |
800 0x0008c5ff, 0x5a000000, 0x0008cdff, 0x5a200000, | |
801 0x0008d5ff, 0x5a400000, 0x0008deff, 0x5a610000, | |
802 0x0008e6ff, 0x5a810000, 0x0008eeff, 0x5aa10000, | |
803 0x0008f6ff, 0x5ac20000, 0x0008ffff, 0x5ae20000, | |
804 0x000c00ff, 0x62000000, 0x000c08ff, 0x62200000, | |
805 0x000c10ff, 0x62400000, 0x000c18ff, 0x62610000, | |
806 0x000c20ff, 0x62810000, 0x000c29ff, 0x62a10000, | |
807 0x000c31ff, 0x62c20000, 0x000c39ff, 0x62e20000, | |
808 0x000c41ff, 0x6a000000, 0x000c4aff, 0x6a200000, | |
809 0x000c52ff, 0x6a400000, 0x000c5aff, 0x6a610000, | |
810 0x000c62ff, 0x6a810000, 0x000c6aff, 0x6aa10000, | |
811 0x000c73ff, 0x6ac20000, 0x000c7bff, 0x6ae20000, | |
812 0x000c83ff, 0x73000000, 0x000c8bff, 0x73200000, | |
813 0x000c94ff, 0x73400000, 0x000c9cff, 0x73610000, | |
814 0x000ca4ff, 0x73810000, 0x000cacff, 0x73a10000, | |
815 0x000cb4ff, 0x73c20000, 0x000cbdff, 0x73e20000, | |
816 0x000cc5ff, 0x7b000000, 0x000ccdff, 0x7b200000, | |
817 0x000cd5ff, 0x7b400000, 0x000cdeff, 0x7b610000, | |
818 0x000ce6ff, 0x7b810000, 0x000ceeff, 0x7ba10000, | |
819 0x000cf6ff, 0x7bc20000, 0x000cffff, 0x7be20000, | |
820 0x001000ff, 0x83000000, 0x001008ff, 0x83200000, | |
821 0x001010ff, 0x83400000, 0x001018ff, 0x83610000, | |
822 0x001020ff, 0x83810000, 0x001029ff, 0x83a10000, | |
823 0x001031ff, 0x83c20000, 0x001039ff, 0x83e20000, | |
824 0x001041ff, 0x8b000000, 0x00104aff, 0x8b200000, | |
825 0x001052ff, 0x8b400000, 0x00105aff, 0x8b610000, | |
826 0x001062ff, 0x8b810000, 0x00106aff, 0x8ba10000, | |
827 0x001073ff, 0x8bc20000, 0x00107bff, 0x8be20000, | |
828 0x001083ff, 0x94000000, 0x00108bff, 0x94200000, | |
829 0x001094ff, 0x94400000, 0x00109cff, 0x94610000, | |
830 0x0010a4ff, 0x94810000, 0x0010acff, 0x94a10000, | |
831 0x0010b4ff, 0x94c20000, 0x0010bdff, 0x94e20000, | |
832 0x0010c5ff, 0x9c000000, 0x0010cdff, 0x9c200000, | |
833 0x0010d5ff, 0x9c400000, 0x0010deff, 0x9c610000, | |
834 0x0010e6ff, 0x9c810000, 0x0010eeff, 0x9ca10000, | |
835 0x0010f6ff, 0x9cc20000, 0x0010ffff, 0x9ce20000, | |
836 0x001400ff, 0xa4000000, 0x001408ff, 0xa4200000, | |
837 0x001410ff, 0xa4400000, 0x001418ff, 0xa4610000, | |
838 0x001420ff, 0xa4810000, 0x001429ff, 0xa4a10000, | |
839 0x001431ff, 0xa4c20000, 0x001439ff, 0xa4e20000, | |
840 0x001441ff, 0xac000000, 0x00144aff, 0xac200000, | |
841 0x001452ff, 0xac400000, 0x00145aff, 0xac610000, | |
842 0x001462ff, 0xac810000, 0x00146aff, 0xaca10000, | |
843 0x001473ff, 0xacc20000, 0x00147bff, 0xace20000, | |
844 0x001483ff, 0xb4000000, 0x00148bff, 0xb4200000, | |
845 0x001494ff, 0xb4400000, 0x00149cff, 0xb4610000, | |
846 0x0014a4ff, 0xb4810000, 0x0014acff, 0xb4a10000, | |
847 0x0014b4ff, 0xb4c20000, 0x0014bdff, 0xb4e20000, | |
848 0x0014c5ff, 0xbd000000, 0x0014cdff, 0xbd200000, | |
849 0x0014d5ff, 0xbd400000, 0x0014deff, 0xbd610000, | |
850 0x0014e6ff, 0xbd810000, 0x0014eeff, 0xbda10000, | |
851 0x0014f6ff, 0xbdc20000, 0x0014ffff, 0xbde20000, | |
852 0x001800ff, 0xc5000000, 0x001808ff, 0xc5200000, | |
853 0x001810ff, 0xc5400000, 0x001818ff, 0xc5610000, | |
854 0x001820ff, 0xc5810000, 0x001829ff, 0xc5a10000, | |
855 0x001831ff, 0xc5c20000, 0x001839ff, 0xc5e20000, | |
856 0x001841ff, 0xcd000000, 0x00184aff, 0xcd200000, | |
857 0x001852ff, 0xcd400000, 0x00185aff, 0xcd610000, | |
858 0x001862ff, 0xcd810000, 0x00186aff, 0xcda10000, | |
859 0x001873ff, 0xcdc20000, 0x00187bff, 0xcde20000, | |
860 0x001883ff, 0xd5000000, 0x00188bff, 0xd5200000, | |
861 0x001894ff, 0xd5400000, 0x00189cff, 0xd5610000, | |
862 0x0018a4ff, 0xd5810000, 0x0018acff, 0xd5a10000, | |
863 0x0018b4ff, 0xd5c20000, 0x0018bdff, 0xd5e20000, | |
864 0x0018c5ff, 0xde000000, 0x0018cdff, 0xde200000, | |
865 0x0018d5ff, 0xde400000, 0x0018deff, 0xde610000, | |
866 0x0018e6ff, 0xde810000, 0x0018eeff, 0xdea10000, | |
867 0x0018f6ff, 0xdec20000, 0x0018ffff, 0xdee20000, | |
868 0x001c00ff, 0xe6000000, 0x001c08ff, 0xe6200000, | |
869 0x001c10ff, 0xe6400000, 0x001c18ff, 0xe6610000, | |
870 0x001c20ff, 0xe6810000, 0x001c29ff, 0xe6a10000, | |
871 0x001c31ff, 0xe6c20000, 0x001c39ff, 0xe6e20000, | |
872 0x001c41ff, 0xee000000, 0x001c4aff, 0xee200000, | |
873 0x001c52ff, 0xee400000, 0x001c5aff, 0xee610000, | |
874 0x001c62ff, 0xee810000, 0x001c6aff, 0xeea10000, | |
875 0x001c73ff, 0xeec20000, 0x001c7bff, 0xeee20000, | |
876 0x001c83ff, 0xf6000000, 0x001c8bff, 0xf6200000, | |
877 0x001c94ff, 0xf6400000, 0x001c9cff, 0xf6610000, | |
878 0x001ca4ff, 0xf6810000, 0x001cacff, 0xf6a10000, | |
879 0x001cb4ff, 0xf6c20000, 0x001cbdff, 0xf6e20000, | |
880 0x001cc5ff, 0xff000000, 0x001ccdff, 0xff200000, | |
881 0x001cd5ff, 0xff400000, 0x001cdeff, 0xff610000, | |
882 0x001ce6ff, 0xff810000, 0x001ceeff, 0xffa10000, | |
883 0x001cf6ff, 0xffc20000, 0x001cffff, 0xffe20000, | |
884 }; | |
885 static void Blit_RGB565_RGBA8888(SDL_BlitInfo *info) | |
886 { | |
887 Blit_RGB565_32(info, RGB565_RGBA8888_LUT); | |
888 } | |
889 | |
890 /* Special optimized blit for RGB 5-6-5 --> BGRA 8-8-8-8 */ | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
891 static const Uint32 RGB565_BGRA8888_LUT[512] = { |
0 | 892 0x00000000, 0x000000ff, 0x08000000, 0x002000ff, |
893 0x10000000, 0x004000ff, 0x18000000, 0x006100ff, | |
894 0x20000000, 0x008100ff, 0x29000000, 0x00a100ff, | |
895 0x31000000, 0x00c200ff, 0x39000000, 0x00e200ff, | |
896 0x41000000, 0x000008ff, 0x4a000000, 0x002008ff, | |
897 0x52000000, 0x004008ff, 0x5a000000, 0x006108ff, | |
898 0x62000000, 0x008108ff, 0x6a000000, 0x00a108ff, | |
899 0x73000000, 0x00c208ff, 0x7b000000, 0x00e208ff, | |
900 0x83000000, 0x000010ff, 0x8b000000, 0x002010ff, | |
901 0x94000000, 0x004010ff, 0x9c000000, 0x006110ff, | |
902 0xa4000000, 0x008110ff, 0xac000000, 0x00a110ff, | |
903 0xb4000000, 0x00c210ff, 0xbd000000, 0x00e210ff, | |
904 0xc5000000, 0x000018ff, 0xcd000000, 0x002018ff, | |
905 0xd5000000, 0x004018ff, 0xde000000, 0x006118ff, | |
906 0xe6000000, 0x008118ff, 0xee000000, 0x00a118ff, | |
907 0xf6000000, 0x00c218ff, 0xff000000, 0x00e218ff, | |
908 0x00040000, 0x000020ff, 0x08040000, 0x002020ff, | |
909 0x10040000, 0x004020ff, 0x18040000, 0x006120ff, | |
910 0x20040000, 0x008120ff, 0x29040000, 0x00a120ff, | |
911 0x31040000, 0x00c220ff, 0x39040000, 0x00e220ff, | |
912 0x41040000, 0x000029ff, 0x4a040000, 0x002029ff, | |
913 0x52040000, 0x004029ff, 0x5a040000, 0x006129ff, | |
914 0x62040000, 0x008129ff, 0x6a040000, 0x00a129ff, | |
915 0x73040000, 0x00c229ff, 0x7b040000, 0x00e229ff, | |
916 0x83040000, 0x000031ff, 0x8b040000, 0x002031ff, | |
917 0x94040000, 0x004031ff, 0x9c040000, 0x006131ff, | |
918 0xa4040000, 0x008131ff, 0xac040000, 0x00a131ff, | |
919 0xb4040000, 0x00c231ff, 0xbd040000, 0x00e231ff, | |
920 0xc5040000, 0x000039ff, 0xcd040000, 0x002039ff, | |
921 0xd5040000, 0x004039ff, 0xde040000, 0x006139ff, | |
922 0xe6040000, 0x008139ff, 0xee040000, 0x00a139ff, | |
923 0xf6040000, 0x00c239ff, 0xff040000, 0x00e239ff, | |
924 0x00080000, 0x000041ff, 0x08080000, 0x002041ff, | |
925 0x10080000, 0x004041ff, 0x18080000, 0x006141ff, | |
926 0x20080000, 0x008141ff, 0x29080000, 0x00a141ff, | |
927 0x31080000, 0x00c241ff, 0x39080000, 0x00e241ff, | |
928 0x41080000, 0x00004aff, 0x4a080000, 0x00204aff, | |
929 0x52080000, 0x00404aff, 0x5a080000, 0x00614aff, | |
930 0x62080000, 0x00814aff, 0x6a080000, 0x00a14aff, | |
931 0x73080000, 0x00c24aff, 0x7b080000, 0x00e24aff, | |
932 0x83080000, 0x000052ff, 0x8b080000, 0x002052ff, | |
933 0x94080000, 0x004052ff, 0x9c080000, 0x006152ff, | |
934 0xa4080000, 0x008152ff, 0xac080000, 0x00a152ff, | |
935 0xb4080000, 0x00c252ff, 0xbd080000, 0x00e252ff, | |
936 0xc5080000, 0x00005aff, 0xcd080000, 0x00205aff, | |
937 0xd5080000, 0x00405aff, 0xde080000, 0x00615aff, | |
938 0xe6080000, 0x00815aff, 0xee080000, 0x00a15aff, | |
939 0xf6080000, 0x00c25aff, 0xff080000, 0x00e25aff, | |
940 0x000c0000, 0x000062ff, 0x080c0000, 0x002062ff, | |
941 0x100c0000, 0x004062ff, 0x180c0000, 0x006162ff, | |
942 0x200c0000, 0x008162ff, 0x290c0000, 0x00a162ff, | |
943 0x310c0000, 0x00c262ff, 0x390c0000, 0x00e262ff, | |
944 0x410c0000, 0x00006aff, 0x4a0c0000, 0x00206aff, | |
945 0x520c0000, 0x00406aff, 0x5a0c0000, 0x00616aff, | |
946 0x620c0000, 0x00816aff, 0x6a0c0000, 0x00a16aff, | |
947 0x730c0000, 0x00c26aff, 0x7b0c0000, 0x00e26aff, | |
948 0x830c0000, 0x000073ff, 0x8b0c0000, 0x002073ff, | |
949 0x940c0000, 0x004073ff, 0x9c0c0000, 0x006173ff, | |
950 0xa40c0000, 0x008173ff, 0xac0c0000, 0x00a173ff, | |
951 0xb40c0000, 0x00c273ff, 0xbd0c0000, 0x00e273ff, | |
952 0xc50c0000, 0x00007bff, 0xcd0c0000, 0x00207bff, | |
953 0xd50c0000, 0x00407bff, 0xde0c0000, 0x00617bff, | |
954 0xe60c0000, 0x00817bff, 0xee0c0000, 0x00a17bff, | |
955 0xf60c0000, 0x00c27bff, 0xff0c0000, 0x00e27bff, | |
956 0x00100000, 0x000083ff, 0x08100000, 0x002083ff, | |
957 0x10100000, 0x004083ff, 0x18100000, 0x006183ff, | |
958 0x20100000, 0x008183ff, 0x29100000, 0x00a183ff, | |
959 0x31100000, 0x00c283ff, 0x39100000, 0x00e283ff, | |
960 0x41100000, 0x00008bff, 0x4a100000, 0x00208bff, | |
961 0x52100000, 0x00408bff, 0x5a100000, 0x00618bff, | |
962 0x62100000, 0x00818bff, 0x6a100000, 0x00a18bff, | |
963 0x73100000, 0x00c28bff, 0x7b100000, 0x00e28bff, | |
964 0x83100000, 0x000094ff, 0x8b100000, 0x002094ff, | |
965 0x94100000, 0x004094ff, 0x9c100000, 0x006194ff, | |
966 0xa4100000, 0x008194ff, 0xac100000, 0x00a194ff, | |
967 0xb4100000, 0x00c294ff, 0xbd100000, 0x00e294ff, | |
968 0xc5100000, 0x00009cff, 0xcd100000, 0x00209cff, | |
969 0xd5100000, 0x00409cff, 0xde100000, 0x00619cff, | |
970 0xe6100000, 0x00819cff, 0xee100000, 0x00a19cff, | |
971 0xf6100000, 0x00c29cff, 0xff100000, 0x00e29cff, | |
972 0x00140000, 0x0000a4ff, 0x08140000, 0x0020a4ff, | |
973 0x10140000, 0x0040a4ff, 0x18140000, 0x0061a4ff, | |
974 0x20140000, 0x0081a4ff, 0x29140000, 0x00a1a4ff, | |
975 0x31140000, 0x00c2a4ff, 0x39140000, 0x00e2a4ff, | |
976 0x41140000, 0x0000acff, 0x4a140000, 0x0020acff, | |
977 0x52140000, 0x0040acff, 0x5a140000, 0x0061acff, | |
978 0x62140000, 0x0081acff, 0x6a140000, 0x00a1acff, | |
979 0x73140000, 0x00c2acff, 0x7b140000, 0x00e2acff, | |
980 0x83140000, 0x0000b4ff, 0x8b140000, 0x0020b4ff, | |
981 0x94140000, 0x0040b4ff, 0x9c140000, 0x0061b4ff, | |
982 0xa4140000, 0x0081b4ff, 0xac140000, 0x00a1b4ff, | |
983 0xb4140000, 0x00c2b4ff, 0xbd140000, 0x00e2b4ff, | |
984 0xc5140000, 0x0000bdff, 0xcd140000, 0x0020bdff, | |
985 0xd5140000, 0x0040bdff, 0xde140000, 0x0061bdff, | |
986 0xe6140000, 0x0081bdff, 0xee140000, 0x00a1bdff, | |
987 0xf6140000, 0x00c2bdff, 0xff140000, 0x00e2bdff, | |
988 0x00180000, 0x0000c5ff, 0x08180000, 0x0020c5ff, | |
989 0x10180000, 0x0040c5ff, 0x18180000, 0x0061c5ff, | |
990 0x20180000, 0x0081c5ff, 0x29180000, 0x00a1c5ff, | |
991 0x31180000, 0x00c2c5ff, 0x39180000, 0x00e2c5ff, | |
992 0x41180000, 0x0000cdff, 0x4a180000, 0x0020cdff, | |
993 0x52180000, 0x0040cdff, 0x5a180000, 0x0061cdff, | |
994 0x62180000, 0x0081cdff, 0x6a180000, 0x00a1cdff, | |
995 0x73180000, 0x00c2cdff, 0x7b180000, 0x00e2cdff, | |
996 0x83180000, 0x0000d5ff, 0x8b180000, 0x0020d5ff, | |
997 0x94180000, 0x0040d5ff, 0x9c180000, 0x0061d5ff, | |
998 0xa4180000, 0x0081d5ff, 0xac180000, 0x00a1d5ff, | |
999 0xb4180000, 0x00c2d5ff, 0xbd180000, 0x00e2d5ff, | |
1000 0xc5180000, 0x0000deff, 0xcd180000, 0x0020deff, | |
1001 0xd5180000, 0x0040deff, 0xde180000, 0x0061deff, | |
1002 0xe6180000, 0x0081deff, 0xee180000, 0x00a1deff, | |
1003 0xf6180000, 0x00c2deff, 0xff180000, 0x00e2deff, | |
1004 0x001c0000, 0x0000e6ff, 0x081c0000, 0x0020e6ff, | |
1005 0x101c0000, 0x0040e6ff, 0x181c0000, 0x0061e6ff, | |
1006 0x201c0000, 0x0081e6ff, 0x291c0000, 0x00a1e6ff, | |
1007 0x311c0000, 0x00c2e6ff, 0x391c0000, 0x00e2e6ff, | |
1008 0x411c0000, 0x0000eeff, 0x4a1c0000, 0x0020eeff, | |
1009 0x521c0000, 0x0040eeff, 0x5a1c0000, 0x0061eeff, | |
1010 0x621c0000, 0x0081eeff, 0x6a1c0000, 0x00a1eeff, | |
1011 0x731c0000, 0x00c2eeff, 0x7b1c0000, 0x00e2eeff, | |
1012 0x831c0000, 0x0000f6ff, 0x8b1c0000, 0x0020f6ff, | |
1013 0x941c0000, 0x0040f6ff, 0x9c1c0000, 0x0061f6ff, | |
1014 0xa41c0000, 0x0081f6ff, 0xac1c0000, 0x00a1f6ff, | |
1015 0xb41c0000, 0x00c2f6ff, 0xbd1c0000, 0x00e2f6ff, | |
1016 0xc51c0000, 0x0000ffff, 0xcd1c0000, 0x0020ffff, | |
1017 0xd51c0000, 0x0040ffff, 0xde1c0000, 0x0061ffff, | |
1018 0xe61c0000, 0x0081ffff, 0xee1c0000, 0x00a1ffff, | |
1019 0xf61c0000, 0x00c2ffff, 0xff1c0000, 0x00e2ffff | |
1020 }; | |
1021 static void Blit_RGB565_BGRA8888(SDL_BlitInfo *info) | |
1022 { | |
1023 Blit_RGB565_32(info, RGB565_BGRA8888_LUT); | |
1024 } | |
1025 | |
1026 /* Special optimized blit for RGB 8-8-8 --> RGB 3-3-2 */ | |
1027 #ifndef RGB888_RGB332 | |
1028 #define RGB888_RGB332(dst, src) { \ | |
1029 dst = (((src)&0x00E00000)>>16)| \ | |
1030 (((src)&0x0000E000)>>11)| \ | |
1031 (((src)&0x000000C0)>>6); \ | |
1032 } | |
1033 #endif | |
1034 static void Blit_RGB888_index8_map(SDL_BlitInfo *info) | |
1035 { | |
1036 #ifndef USE_DUFFS_LOOP | |
1037 int c; | |
1038 #endif | |
1039 int pixel; | |
1040 int width, height; | |
1041 Uint32 *src; | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1042 const Uint8 *map; |
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1043 Uint8 *dst; |
0 | 1044 int srcskip, dstskip; |
1045 | |
1046 /* Set up some basic variables */ | |
1047 width = info->d_width; | |
1048 height = info->d_height; | |
1049 src = (Uint32 *)info->s_pixels; | |
1050 srcskip = info->s_skip/4; | |
1051 dst = info->d_pixels; | |
1052 dstskip = info->d_skip; | |
1053 map = info->table; | |
1054 | |
1055 #ifdef USE_DUFFS_LOOP | |
1056 while ( height-- ) { | |
1057 DUFFS_LOOP( | |
1058 RGB888_RGB332(pixel, *src); | |
1059 *dst++ = map[pixel]; | |
1060 ++src; | |
1061 , width); | |
1062 src += srcskip; | |
1063 dst += dstskip; | |
1064 } | |
1065 #else | |
1066 while ( height-- ) { | |
1067 for ( c=width/4; c; --c ) { | |
1068 /* Pack RGB into 8bit pixel */ | |
1069 RGB888_RGB332(pixel, *src); | |
1070 *dst++ = map[pixel]; | |
1071 ++src; | |
1072 RGB888_RGB332(pixel, *src); | |
1073 *dst++ = map[pixel]; | |
1074 ++src; | |
1075 RGB888_RGB332(pixel, *src); | |
1076 *dst++ = map[pixel]; | |
1077 ++src; | |
1078 RGB888_RGB332(pixel, *src); | |
1079 *dst++ = map[pixel]; | |
1080 ++src; | |
1081 } | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1082 switch ( width & 3 ) { |
0 | 1083 case 3: |
1084 RGB888_RGB332(pixel, *src); | |
1085 *dst++ = map[pixel]; | |
1086 ++src; | |
1087 case 2: | |
1088 RGB888_RGB332(pixel, *src); | |
1089 *dst++ = map[pixel]; | |
1090 ++src; | |
1091 case 1: | |
1092 RGB888_RGB332(pixel, *src); | |
1093 *dst++ = map[pixel]; | |
1094 ++src; | |
1095 } | |
1096 src += srcskip; | |
1097 dst += dstskip; | |
1098 } | |
1099 #endif /* USE_DUFFS_LOOP */ | |
1100 } | |
1101 static void BlitNto1(SDL_BlitInfo *info) | |
1102 { | |
1103 #ifndef USE_DUFFS_LOOP | |
1104 int c; | |
1105 #endif | |
1106 int width, height; | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1107 Uint8 *src; |
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1108 const Uint8 *map; |
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1109 Uint8 *dst; |
0 | 1110 int srcskip, dstskip; |
1111 int srcbpp; | |
1112 Uint32 pixel; | |
1113 int sR, sG, sB; | |
1114 SDL_PixelFormat *srcfmt; | |
1115 | |
1116 /* Set up some basic variables */ | |
1117 width = info->d_width; | |
1118 height = info->d_height; | |
1119 src = info->s_pixels; | |
1120 srcskip = info->s_skip; | |
1121 dst = info->d_pixels; | |
1122 dstskip = info->d_skip; | |
1123 map = info->table; | |
1124 srcfmt = info->src; | |
1125 srcbpp = srcfmt->BytesPerPixel; | |
1126 | |
1127 if ( map == NULL ) { | |
1128 while ( height-- ) { | |
1129 #ifdef USE_DUFFS_LOOP | |
1130 DUFFS_LOOP( | |
1131 DISEMBLE_RGB(src, srcbpp, srcfmt, pixel, | |
1132 sR, sG, sB); | |
1133 if ( 1 ) { | |
1134 /* Pack RGB into 8bit pixel */ | |
1135 *dst = ((sR>>5)<<(3+2))| | |
1136 ((sG>>5)<<(2)) | | |
1137 ((sB>>6)<<(0)) ; | |
1138 } | |
1139 dst++; | |
1140 src += srcbpp; | |
1141 , width); | |
1142 #else | |
1143 for ( c=width; c; --c ) { | |
1144 DISEMBLE_RGB(src, srcbpp, srcfmt, pixel, | |
1145 sR, sG, sB); | |
1146 if ( 1 ) { | |
1147 /* Pack RGB into 8bit pixel */ | |
1148 *dst = ((sR>>5)<<(3+2))| | |
1149 ((sG>>5)<<(2)) | | |
1150 ((sB>>6)<<(0)) ; | |
1151 } | |
1152 dst++; | |
1153 src += srcbpp; | |
1154 } | |
1155 #endif | |
1156 src += srcskip; | |
1157 dst += dstskip; | |
1158 } | |
1159 } else { | |
1160 while ( height-- ) { | |
1161 #ifdef USE_DUFFS_LOOP | |
1162 DUFFS_LOOP( | |
1163 DISEMBLE_RGB(src, srcbpp, srcfmt, pixel, | |
1164 sR, sG, sB); | |
1165 if ( 1 ) { | |
1166 /* Pack RGB into 8bit pixel */ | |
1167 *dst = map[((sR>>5)<<(3+2))| | |
1168 ((sG>>5)<<(2)) | | |
1169 ((sB>>6)<<(0)) ]; | |
1170 } | |
1171 dst++; | |
1172 src += srcbpp; | |
1173 , width); | |
1174 #else | |
1175 for ( c=width; c; --c ) { | |
1176 DISEMBLE_RGB(src, srcbpp, srcfmt, pixel, | |
1177 sR, sG, sB); | |
1178 if ( 1 ) { | |
1179 /* Pack RGB into 8bit pixel */ | |
1180 *dst = map[((sR>>5)<<(3+2))| | |
1181 ((sG>>5)<<(2)) | | |
1182 ((sB>>6)<<(0)) ]; | |
1183 } | |
1184 dst++; | |
1185 src += srcbpp; | |
1186 } | |
1187 #endif /* USE_DUFFS_LOOP */ | |
1188 src += srcskip; | |
1189 dst += dstskip; | |
1190 } | |
1191 } | |
1192 } | |
1193 static void BlitNtoN(SDL_BlitInfo *info) | |
1194 { | |
1195 int width = info->d_width; | |
1196 int height = info->d_height; | |
1197 Uint8 *src = info->s_pixels; | |
1198 int srcskip = info->s_skip; | |
1199 Uint8 *dst = info->d_pixels; | |
1200 int dstskip = info->d_skip; | |
1201 SDL_PixelFormat *srcfmt = info->src; | |
1202 int srcbpp = srcfmt->BytesPerPixel; | |
1203 SDL_PixelFormat *dstfmt = info->dst; | |
1204 int dstbpp = dstfmt->BytesPerPixel; | |
431
41cadcba32e8
Fixed SDL_DisplayFormatAlpha() on RGB surfaces with alpha
Sam Lantinga <slouken@libsdl.org>
parents:
366
diff
changeset
|
1205 unsigned alpha = dstfmt->Amask ? srcfmt->alpha : 0; |
0 | 1206 |
1207 while ( height-- ) { | |
1208 DUFFS_LOOP( | |
1209 { | |
1210 Uint32 pixel; | |
1211 unsigned sR; | |
1212 unsigned sG; | |
1213 unsigned sB; | |
1214 DISEMBLE_RGB(src, srcbpp, srcfmt, pixel, sR, sG, sB); | |
1215 ASSEMBLE_RGBA(dst, dstbpp, dstfmt, sR, sG, sB, alpha); | |
1216 dst += dstbpp; | |
1217 src += srcbpp; | |
1218 }, | |
1219 width); | |
1220 src += srcskip; | |
1221 dst += dstskip; | |
1222 } | |
1223 } | |
1224 | |
1225 static void BlitNtoNCopyAlpha(SDL_BlitInfo *info) | |
1226 { | |
1227 int width = info->d_width; | |
1228 int height = info->d_height; | |
1229 Uint8 *src = info->s_pixels; | |
1230 int srcskip = info->s_skip; | |
1231 Uint8 *dst = info->d_pixels; | |
1232 int dstskip = info->d_skip; | |
1233 SDL_PixelFormat *srcfmt = info->src; | |
1234 int srcbpp = srcfmt->BytesPerPixel; | |
1235 SDL_PixelFormat *dstfmt = info->dst; | |
1236 int dstbpp = dstfmt->BytesPerPixel; | |
1237 int c; | |
1238 | |
1239 /* FIXME: should map alpha to [0..255] correctly! */ | |
1240 while ( height-- ) { | |
1241 for ( c=width; c; --c ) { | |
1242 Uint32 pixel; | |
1243 unsigned sR, sG, sB, sA; | |
1244 DISEMBLE_RGBA(src, srcbpp, srcfmt, pixel, | |
1245 sR, sG, sB, sA); | |
1246 ASSEMBLE_RGBA(dst, dstbpp, dstfmt, | |
1247 sR, sG, sB, sA); | |
1248 dst += dstbpp; | |
1249 src += srcbpp; | |
1250 } | |
1251 src += srcskip; | |
1252 dst += dstskip; | |
1253 } | |
1254 } | |
1255 | |
1256 static void BlitNto1Key(SDL_BlitInfo *info) | |
1257 { | |
1258 int width = info->d_width; | |
1259 int height = info->d_height; | |
1260 Uint8 *src = info->s_pixels; | |
1261 int srcskip = info->s_skip; | |
1262 Uint8 *dst = info->d_pixels; | |
1263 int dstskip = info->d_skip; | |
1264 SDL_PixelFormat *srcfmt = info->src; | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1265 const Uint8 *palmap = info->table; |
0 | 1266 Uint32 ckey = srcfmt->colorkey; |
1267 Uint32 rgbmask = ~srcfmt->Amask; | |
1268 int srcbpp; | |
1269 Uint32 pixel; | |
1270 Uint8 sR, sG, sB; | |
1271 | |
1272 /* Set up some basic variables */ | |
1273 srcbpp = srcfmt->BytesPerPixel; | |
1274 ckey &= rgbmask; | |
1275 | |
1276 if ( palmap == NULL ) { | |
1277 while ( height-- ) { | |
1278 DUFFS_LOOP( | |
1279 { | |
1280 DISEMBLE_RGB(src, srcbpp, srcfmt, pixel, | |
1281 sR, sG, sB); | |
1282 if ( (pixel & rgbmask) != ckey ) { | |
1283 /* Pack RGB into 8bit pixel */ | |
1284 *dst = ((sR>>5)<<(3+2))| | |
1285 ((sG>>5)<<(2)) | | |
1286 ((sB>>6)<<(0)) ; | |
1287 } | |
1288 dst++; | |
1289 src += srcbpp; | |
1290 }, | |
1291 width); | |
1292 src += srcskip; | |
1293 dst += dstskip; | |
1294 } | |
1295 } else { | |
1296 while ( height-- ) { | |
1297 DUFFS_LOOP( | |
1298 { | |
1299 DISEMBLE_RGB(src, srcbpp, srcfmt, pixel, | |
1300 sR, sG, sB); | |
1301 if ( (pixel & rgbmask) != ckey ) { | |
1302 /* Pack RGB into 8bit pixel */ | |
1303 *dst = palmap[((sR>>5)<<(3+2))| | |
1304 ((sG>>5)<<(2)) | | |
1305 ((sB>>6)<<(0)) ]; | |
1306 } | |
1307 dst++; | |
1308 src += srcbpp; | |
1309 }, | |
1310 width); | |
1311 src += srcskip; | |
1312 dst += dstskip; | |
1313 } | |
1314 } | |
1315 } | |
1316 | |
1317 static void Blit2to2Key(SDL_BlitInfo *info) | |
1318 { | |
1319 int width = info->d_width; | |
1320 int height = info->d_height; | |
1321 Uint16 *srcp = (Uint16 *)info->s_pixels; | |
1322 int srcskip = info->s_skip; | |
1323 Uint16 *dstp = (Uint16 *)info->d_pixels; | |
1324 int dstskip = info->d_skip; | |
1325 Uint32 ckey = info->src->colorkey; | |
1326 Uint32 rgbmask = ~info->src->Amask; | |
1327 | |
1328 /* Set up some basic variables */ | |
1329 srcskip /= 2; | |
1330 dstskip /= 2; | |
1331 ckey &= rgbmask; | |
1332 | |
1333 while ( height-- ) { | |
1334 DUFFS_LOOP( | |
1335 { | |
1336 if ( (*srcp & rgbmask) != ckey ) { | |
1337 *dstp = *srcp; | |
1338 } | |
1339 dstp++; | |
1340 srcp++; | |
1341 }, | |
1342 width); | |
1343 srcp += srcskip; | |
1344 dstp += dstskip; | |
1345 } | |
1346 } | |
1347 | |
1348 static void BlitNtoNKey(SDL_BlitInfo *info) | |
1349 { | |
1350 int width = info->d_width; | |
1351 int height = info->d_height; | |
1352 Uint8 *src = info->s_pixels; | |
1353 int srcskip = info->s_skip; | |
1354 Uint8 *dst = info->d_pixels; | |
1355 int dstskip = info->d_skip; | |
1356 Uint32 ckey = info->src->colorkey; | |
1357 SDL_PixelFormat *srcfmt = info->src; | |
1358 SDL_PixelFormat *dstfmt = info->dst; | |
1359 int srcbpp = srcfmt->BytesPerPixel; | |
1360 int dstbpp = dstfmt->BytesPerPixel; | |
431
41cadcba32e8
Fixed SDL_DisplayFormatAlpha() on RGB surfaces with alpha
Sam Lantinga <slouken@libsdl.org>
parents:
366
diff
changeset
|
1361 unsigned alpha = dstfmt->Amask ? srcfmt->alpha : 0; |
0 | 1362 |
1363 while ( height-- ) { | |
1364 DUFFS_LOOP( | |
1365 { | |
1366 Uint32 pixel; | |
1367 unsigned sR; | |
1368 unsigned sG; | |
1369 unsigned sB; | |
1370 RETRIEVE_RGB_PIXEL(src, srcbpp, pixel); | |
1371 if ( pixel != ckey ) { | |
1372 RGB_FROM_PIXEL(pixel, srcfmt, sR, sG, sB); | |
1373 ASSEMBLE_RGBA(dst, dstbpp, dstfmt, | |
1374 sR, sG, sB, alpha); | |
1375 } | |
1376 dst += dstbpp; | |
1377 src += srcbpp; | |
1378 }, | |
1379 width); | |
1380 src += srcskip; | |
1381 dst += dstskip; | |
1382 } | |
1383 } | |
1384 | |
1385 static void BlitNtoNKeyCopyAlpha(SDL_BlitInfo *info) | |
1386 { | |
1387 int width = info->d_width; | |
1388 int height = info->d_height; | |
1389 Uint8 *src = info->s_pixels; | |
1390 int srcskip = info->s_skip; | |
1391 Uint8 *dst = info->d_pixels; | |
1392 int dstskip = info->d_skip; | |
1393 Uint32 ckey = info->src->colorkey; | |
1394 SDL_PixelFormat *srcfmt = info->src; | |
1395 SDL_PixelFormat *dstfmt = info->dst; | |
1396 Uint32 rgbmask = ~srcfmt->Amask; | |
1397 | |
1398 Uint8 srcbpp; | |
1399 Uint8 dstbpp; | |
1400 Uint32 pixel; | |
1401 Uint8 sR, sG, sB, sA; | |
1402 | |
1403 /* Set up some basic variables */ | |
1404 srcbpp = srcfmt->BytesPerPixel; | |
1405 dstbpp = dstfmt->BytesPerPixel; | |
1406 ckey &= rgbmask; | |
1407 | |
1408 /* FIXME: should map alpha to [0..255] correctly! */ | |
1409 while ( height-- ) { | |
1410 DUFFS_LOOP( | |
1411 { | |
1412 DISEMBLE_RGBA(src, srcbpp, srcfmt, pixel, | |
1413 sR, sG, sB, sA); | |
1414 if ( (pixel & rgbmask) != ckey ) { | |
1415 ASSEMBLE_RGBA(dst, dstbpp, dstfmt, | |
1416 sR, sG, sB, sA); | |
1417 } | |
1418 dst += dstbpp; | |
1419 src += srcbpp; | |
1420 }, | |
1421 width); | |
1422 src += srcskip; | |
1423 dst += dstskip; | |
1424 } | |
1425 } | |
1426 | |
1427 /* Normal N to N optimized blitters */ | |
1428 struct blit_table { | |
1429 Uint32 srcR, srcG, srcB; | |
1430 int dstbpp; | |
1431 Uint32 dstR, dstG, dstB; | |
1432 Uint32 cpu_flags; | |
1433 void *aux_data; | |
1434 SDL_loblit blitfunc; | |
1435 enum { NO_ALPHA, SET_ALPHA, COPY_ALPHA } alpha; | |
1436 }; | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1437 static const struct blit_table normal_blit_1[] = { |
0 | 1438 /* Default for 8-bit RGB source, an invalid combination */ |
1439 { 0,0,0, 0, 0,0,0, 0, NULL, NULL }, | |
1440 }; | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1441 static const struct blit_table normal_blit_2[] = { |
0 | 1442 #ifdef USE_ASMBLIT |
1443 { 0x0000F800,0x000007E0,0x0000001F, 2, 0x0000001F,0x000007E0,0x0000F800, | |
1444 0, ConvertX86p16_16BGR565, ConvertX86, NO_ALPHA }, | |
1445 { 0x0000F800,0x000007E0,0x0000001F, 2, 0x00007C00,0x000003E0,0x0000001F, | |
1446 0, ConvertX86p16_16RGB555, ConvertX86, NO_ALPHA }, | |
1447 { 0x0000F800,0x000007E0,0x0000001F, 2, 0x0000001F,0x000003E0,0x00007C00, | |
1448 0, ConvertX86p16_16BGR555, ConvertX86, NO_ALPHA }, | |
1449 #endif | |
1450 { 0x0000F800,0x000007E0,0x0000001F, 4, 0x00FF0000,0x0000FF00,0x000000FF, | |
1451 0, NULL, Blit_RGB565_ARGB8888, SET_ALPHA }, | |
1452 { 0x0000F800,0x000007E0,0x0000001F, 4, 0x000000FF,0x0000FF00,0x00FF0000, | |
1453 0, NULL, Blit_RGB565_ABGR8888, SET_ALPHA }, | |
1454 { 0x0000F800,0x000007E0,0x0000001F, 4, 0xFF000000,0x00FF0000,0x0000FF00, | |
1455 0, NULL, Blit_RGB565_RGBA8888, SET_ALPHA }, | |
1456 { 0x0000F800,0x000007E0,0x0000001F, 4, 0x0000FF00,0x00FF0000,0xFF000000, | |
1457 0, NULL, Blit_RGB565_BGRA8888, SET_ALPHA }, | |
1458 | |
1459 /* Default for 16-bit RGB source, used if no other blitter matches */ | |
1460 { 0,0,0, 0, 0,0,0, 0, NULL, BlitNtoN, 0 } | |
1461 }; | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1462 static const struct blit_table normal_blit_3[] = { |
0 | 1463 /* Default for 24-bit RGB source, never optimized */ |
1464 { 0,0,0, 0, 0,0,0, 0, NULL, BlitNtoN, 0 } | |
1465 }; | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1466 static const struct blit_table normal_blit_4[] = { |
0 | 1467 #ifdef USE_ASMBLIT |
1468 { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x0000F800,0x000007E0,0x0000001F, | |
1469 MMX_CPU, ConvertMMXpII32_16RGB565, ConvertMMX, NO_ALPHA }, | |
1470 { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x0000F800,0x000007E0,0x0000001F, | |
1471 0, ConvertX86p32_16RGB565, ConvertX86, NO_ALPHA }, | |
1472 { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x0000001F,0x000007E0,0x0000F800, | |
1473 MMX_CPU, ConvertMMXpII32_16BGR565, ConvertMMX, NO_ALPHA }, | |
1474 { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x0000001F,0x000007E0,0x0000F800, | |
1475 0, ConvertX86p32_16BGR565, ConvertX86, NO_ALPHA }, | |
1476 { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x00007C00,0x000003E0,0x0000001F, | |
1477 MMX_CPU, ConvertMMXpII32_16RGB555, ConvertMMX, NO_ALPHA }, | |
1478 { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x00007C00,0x000003E0,0x0000001F, | |
1479 0, ConvertX86p32_16RGB555, ConvertX86, NO_ALPHA }, | |
1480 { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x0000001F,0x000003E0,0x00007C00, | |
1481 MMX_CPU, ConvertMMXpII32_16BGR555, ConvertMMX, NO_ALPHA }, | |
1482 { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x0000001F,0x000003E0,0x00007C00, | |
1483 0, ConvertX86p32_16BGR555, ConvertX86, NO_ALPHA }, | |
1484 { 0x00FF0000,0x0000FF00,0x000000FF, 3, 0x00FF0000,0x0000FF00,0x000000FF, | |
1485 0, ConvertX86p32_24RGB888, ConvertX86, NO_ALPHA }, | |
1486 { 0x00FF0000,0x0000FF00,0x000000FF, 3, 0x000000FF,0x0000FF00,0x00FF0000, | |
1487 0, ConvertX86p32_24BGR888, ConvertX86, NO_ALPHA }, | |
1488 { 0x00FF0000,0x0000FF00,0x000000FF, 4, 0x000000FF,0x0000FF00,0x00FF0000, | |
1489 0, ConvertX86p32_32BGR888, ConvertX86, NO_ALPHA }, | |
1490 { 0x00FF0000,0x0000FF00,0x000000FF, 4, 0xFF000000,0x00FF0000,0x0000FF00, | |
1491 0, ConvertX86p32_32RGBA888, ConvertX86, NO_ALPHA }, | |
1492 { 0x00FF0000,0x0000FF00,0x000000FF, 4, 0x0000FF00,0x00FF0000,0xFF000000, | |
1493 0, ConvertX86p32_32BGRA888, ConvertX86, NO_ALPHA }, | |
1494 #else | |
1495 { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x0000F800,0x000007E0,0x0000001F, | |
1496 0, NULL, Blit_RGB888_RGB565, NO_ALPHA }, | |
1497 { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x00007C00,0x000003E0,0x0000001F, | |
1498 0, NULL, Blit_RGB888_RGB555, NO_ALPHA }, | |
1499 #endif | |
1500 /* Default for 32-bit RGB source, used if no other blitter matches */ | |
1501 { 0,0,0, 0, 0,0,0, 0, NULL, BlitNtoN, 0 } | |
1502 }; | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1503 static const struct blit_table *normal_blit[] = { |
0 | 1504 normal_blit_1, normal_blit_2, normal_blit_3, normal_blit_4 |
1505 }; | |
1506 | |
1507 SDL_loblit SDL_CalculateBlitN(SDL_Surface *surface, int blit_index) | |
1508 { | |
1509 struct private_swaccel *sdata; | |
1510 SDL_PixelFormat *srcfmt; | |
1511 SDL_PixelFormat *dstfmt; | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1512 const struct blit_table *table; |
0 | 1513 int which; |
1514 SDL_loblit blitfun; | |
1515 | |
1516 /* Set up data for choosing the blit */ | |
1517 sdata = surface->map->sw_data; | |
1518 srcfmt = surface->format; | |
1519 dstfmt = surface->map->dst->format; | |
1520 | |
1521 if ( blit_index & 2 ) { | |
1522 /* alpha or alpha+colorkey */ | |
1523 return SDL_CalculateAlphaBlit(surface, blit_index); | |
1524 } | |
1525 | |
1526 /* We don't support destinations less than 8-bits */ | |
1527 if ( dstfmt->BitsPerPixel < 8 ) { | |
1528 return(NULL); | |
1529 } | |
1530 | |
1531 if(blit_index == 1) { | |
1532 /* colorkey blit: Here we don't have too many options, mostly | |
1533 because RLE is the preferred fast way to deal with this. | |
1534 If a particular case turns out to be useful we'll add it. */ | |
1535 | |
1536 if(srcfmt->BytesPerPixel == 2 | |
1537 && surface->map->identity) | |
1538 return Blit2to2Key; | |
1539 else if(dstfmt->BytesPerPixel == 1) | |
1540 return BlitNto1Key; | |
1541 else { | |
1542 if(srcfmt->Amask && dstfmt->Amask) | |
1543 return BlitNtoNKeyCopyAlpha; | |
1544 else | |
1545 return BlitNtoNKey; | |
1546 } | |
1547 } | |
1548 | |
1549 blitfun = NULL; | |
1550 if ( dstfmt->BitsPerPixel == 8 ) { | |
1551 /* We assume 8-bit destinations are palettized */ | |
1552 if ( (srcfmt->BytesPerPixel == 4) && | |
1553 (srcfmt->Rmask == 0x00FF0000) && | |
1554 (srcfmt->Gmask == 0x0000FF00) && | |
1555 (srcfmt->Bmask == 0x000000FF) ) { | |
1556 if ( surface->map->table ) { | |
1557 blitfun = Blit_RGB888_index8_map; | |
1558 } else { | |
1559 #ifdef USE_ASMBLIT | |
1560 sdata->aux_data = ConvertX86p32_8RGB332; | |
1561 blitfun = ConvertX86; | |
1562 #else | |
1563 blitfun = Blit_RGB888_index8; | |
1564 #endif | |
1565 } | |
1566 } else { | |
1567 blitfun = BlitNto1; | |
1568 } | |
1569 } else { | |
1570 /* Now the meat, choose the blitter we want */ | |
1571 int a_need = 0; | |
1572 if(dstfmt->Amask) | |
1573 a_need = srcfmt->Amask ? COPY_ALPHA : SET_ALPHA; | |
1574 table = normal_blit[srcfmt->BytesPerPixel-1]; | |
1575 for ( which=0; table[which].srcR; ++which ) { | |
1576 if ( srcfmt->Rmask == table[which].srcR && | |
1577 srcfmt->Gmask == table[which].srcG && | |
1578 srcfmt->Bmask == table[which].srcB && | |
1579 dstfmt->BytesPerPixel == table[which].dstbpp && | |
1580 dstfmt->Rmask == table[which].dstR && | |
1581 dstfmt->Gmask == table[which].dstG && | |
1582 dstfmt->Bmask == table[which].dstB && | |
1583 (a_need & table[which].alpha) == a_need && | |
1584 (CPU_Flags()&table[which].cpu_flags) == | |
1585 table[which].cpu_flags ) | |
1586 break; | |
1587 } | |
1588 sdata->aux_data = table[which].aux_data; | |
1589 blitfun = table[which].blitfunc; | |
1590 if(a_need == COPY_ALPHA && blitfun == BlitNtoN) | |
1591 blitfun = BlitNtoNCopyAlpha; | |
1592 } | |
1593 | |
1594 #ifdef DEBUG_ASM | |
1595 #ifdef USE_ASMBLIT | |
1596 if ( blitfun == ConvertMMX ) | |
1597 fprintf(stderr, "Using mmx blit\n"); | |
1598 else | |
1599 if ( blitfun == ConvertX86 ) | |
1600 fprintf(stderr, "Using asm blit\n"); | |
1601 else | |
1602 #endif | |
1603 if ( (blitfun == SDL_BlitNtoN) || (blitfun == SDL_BlitNto1) ) | |
1604 fprintf(stderr, "Using C blit\n"); | |
1605 else | |
1606 fprintf(stderr, "Using optimized C blit\n"); | |
1607 #endif /* DEBUG_ASM */ | |
1608 | |
1609 return(blitfun); | |
1610 } |