Mercurial > sdl-ios-xcode
annotate src/video/SDL_surface.c @ 5263:f26314c20071
More removal of leak code.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Fri, 11 Feb 2011 14:42:58 -0800 |
parents | bbdf9250ee8b |
children | b530ef003506 |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
3697 | 3 Copyright (C) 1997-2010 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1251
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
0 | 7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1251
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
0 | 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 | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1251
diff
changeset
|
13 Lesser General Public License for more details. |
0 | 14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1251
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1251
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1251
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 18 |
19 Sam Lantinga | |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
130
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
22 #include "SDL_config.h" |
0 | 23 |
24 #include "SDL_video.h" | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
25 #include "SDL_compat.h" |
0 | 26 #include "SDL_sysvideo.h" |
27 #include "SDL_blit.h" | |
28 #include "SDL_RLEaccel_c.h" | |
29 #include "SDL_pixels_c.h" | |
30 | |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1155
diff
changeset
|
31 |
0 | 32 /* Public routines */ |
33 /* | |
34 * Create an empty RGB surface of the appropriate depth | |
35 */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
36 SDL_Surface * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
37 SDL_CreateRGBSurface(Uint32 flags, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
38 int width, int height, int depth, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
39 Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask) |
0 | 40 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
41 SDL_Surface *surface; |
0 | 42 |
2807
365fe1a2aad5
The SDL_RLEACCEL flag is respected in SDL_ConvertSurface(), per the docs.
Sam Lantinga <slouken@libsdl.org>
parents:
2787
diff
changeset
|
43 /* The flags are no longer used, make the compiler happy */ |
4461
39c22a953456
Make the compiler even happier
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
44 (void)flags; |
2807
365fe1a2aad5
The SDL_RLEACCEL flag is respected in SDL_ConvertSurface(), per the docs.
Sam Lantinga <slouken@libsdl.org>
parents:
2787
diff
changeset
|
45 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
46 /* Allocate the surface */ |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1895
diff
changeset
|
47 surface = (SDL_Surface *) SDL_calloc(1, sizeof(*surface)); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
48 if (surface == NULL) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
49 SDL_OutOfMemory(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
50 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
51 } |
940
bb1588ebe47b
Date: Sat, 10 Jul 2004 21:02:33 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
915
diff
changeset
|
52 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
53 surface->format = SDL_AllocFormat(depth, Rmask, Gmask, Bmask, Amask); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
54 if (!surface->format) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
55 SDL_FreeSurface(surface); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
56 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
57 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
58 surface->w = width; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
59 surface->h = height; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
60 surface->pitch = SDL_CalculatePitch(surface); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
61 SDL_SetClipRect(surface, NULL); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
62 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
63 if (surface->format->BitsPerPixel <= 8) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
64 SDL_Palette *palette = |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
65 SDL_AllocPalette((1 << surface->format->BitsPerPixel)); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
66 if (!palette) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
67 SDL_FreeSurface(surface); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
68 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
69 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
70 if (Rmask || Bmask || Gmask) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
71 const SDL_PixelFormat *format = surface->format; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
72 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
73 /* create palette according to masks */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
74 int i; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
75 int Rm = 0, Gm = 0, Bm = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
76 int Rw = 0, Gw = 0, Bw = 0; |
0 | 77 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
78 if (Rmask) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
79 Rw = 8 - format->Rloss; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
80 for (i = format->Rloss; i > 0; i -= Rw) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
81 Rm |= 1 << i; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
82 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
83 if (Gmask) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
84 Gw = 8 - format->Gloss; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
85 for (i = format->Gloss; i > 0; i -= Gw) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
86 Gm |= 1 << i; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
87 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
88 if (Bmask) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
89 Bw = 8 - format->Bloss; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
90 for (i = format->Bloss; i > 0; i -= Bw) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
91 Bm |= 1 << i; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
92 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
93 for (i = 0; i < palette->ncolors; ++i) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
94 int r, g, b; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
95 r = (i & Rmask) >> format->Rshift; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
96 r = (r << format->Rloss) | ((r * Rm) >> Rw); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
97 palette->colors[i].r = r; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
98 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
99 g = (i & Gmask) >> format->Gshift; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
100 g = (g << format->Gloss) | ((g * Gm) >> Gw); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
101 palette->colors[i].g = g; |
0 | 102 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
103 b = (i & Bmask) >> format->Bshift; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
104 b = (b << format->Bloss) | ((b * Bm) >> Bw); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
105 palette->colors[i].b = b; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
106 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
107 } else if (palette->ncolors == 2) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
108 /* Create a black and white bitmap palette */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
109 palette->colors[0].r = 0xFF; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
110 palette->colors[0].g = 0xFF; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
111 palette->colors[0].b = 0xFF; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
112 palette->colors[1].r = 0x00; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
113 palette->colors[1].g = 0x00; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
114 palette->colors[1].b = 0x00; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
115 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
116 SDL_SetSurfacePalette(surface, palette); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
117 SDL_FreePalette(palette); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
118 } |
0 | 119 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
120 /* Get the pixels */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
121 if (surface->w && surface->h) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
122 surface->pixels = SDL_malloc(surface->h * surface->pitch); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
123 if (!surface->pixels) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
124 SDL_FreeSurface(surface); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
125 SDL_OutOfMemory(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
126 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
127 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
128 /* This is important for bitmaps */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
129 SDL_memset(surface->pixels, 0, surface->h * surface->pitch); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
130 } |
0 | 131 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
132 /* Allocate an empty mapping */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
133 surface->map = SDL_AllocBlitMap(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
134 if (!surface->map) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
135 SDL_FreeSurface(surface); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
136 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
137 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
138 SDL_FormatChanged(surface); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
139 |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
140 /* By default surface with an alpha mask are set up for blending */ |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
141 if (Amask) { |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
142 SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND); |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
143 } |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
144 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
145 /* The surface is ready to go */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
146 surface->refcount = 1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
147 return surface; |
0 | 148 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
149 |
0 | 150 /* |
151 * Create an RGB surface from an existing memory buffer | |
152 */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
153 SDL_Surface * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
154 SDL_CreateRGBSurfaceFrom(void *pixels, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
155 int width, int height, int depth, int pitch, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
156 Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
157 Uint32 Amask) |
0 | 158 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
159 SDL_Surface *surface; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
160 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
161 surface = |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
162 SDL_CreateRGBSurface(0, 0, 0, depth, Rmask, Gmask, Bmask, Amask); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
163 if (surface != NULL) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
164 surface->flags |= SDL_PREALLOC; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
165 surface->pixels = pixels; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
166 surface->w = width; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
167 surface->h = height; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
168 surface->pitch = pitch; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
169 SDL_SetClipRect(surface, NULL); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
170 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
171 return surface; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
172 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
173 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
174 static int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
175 SDL_SurfacePaletteChanged(void *userdata, SDL_Palette * palette) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
176 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
177 SDL_Surface *surface = (SDL_Surface *) userdata; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
178 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
179 SDL_FormatChanged(surface); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
180 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
181 return 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
182 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
183 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
184 int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
185 SDL_SetSurfacePalette(SDL_Surface * surface, SDL_Palette * palette) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
186 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
187 if (!surface || !surface->format) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
188 SDL_SetError("SDL_SetSurfacePalette() passed a NULL surface"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
189 return -1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
190 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
191 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
192 if (palette && palette->ncolors != (1 << surface->format->BitsPerPixel)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
193 SDL_SetError |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
194 ("SDL_SetSurfacePalette() passed a palette that doesn't match the surface format"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
195 return -1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
196 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
197 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
198 if (surface->format->palette == palette) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
199 return 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
200 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
201 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
202 if (surface->format->palette) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
203 SDL_DelPaletteWatch(surface->format->palette, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
204 SDL_SurfacePaletteChanged, surface); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
205 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
206 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
207 surface->format->palette = palette; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
208 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
209 if (surface->format->palette) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
210 SDL_AddPaletteWatch(surface->format->palette, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
211 SDL_SurfacePaletteChanged, surface); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
212 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
213 return 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
214 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
215 |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
216 int |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
217 SDL_SetSurfaceRLE(SDL_Surface * surface, int flag) |
0 | 218 { |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
219 int flags; |
0 | 220 |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
221 if (!surface) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
222 return -1; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
223 } |
0 | 224 |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
225 flags = surface->map->info.flags; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
226 if (flag) { |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
227 surface->map->info.flags |= SDL_COPY_RLE_DESIRED; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
228 } else { |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
229 surface->map->info.flags &= ~SDL_COPY_RLE_DESIRED; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
230 } |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
231 if (surface->map->info.flags != flags) { |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
232 SDL_InvalidateMap(surface->map); |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
233 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
234 return 0; |
0 | 235 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
236 |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
237 int |
3560
5543db4239e6
The SDL 1.3 tests have been cleaned up not to include any 1.2 compatibility code.
Sam Lantinga <slouken@libsdl.org>
parents:
3436
diff
changeset
|
238 SDL_SetColorKey(SDL_Surface * surface, int flag, Uint32 key) |
0 | 239 { |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
240 int flags; |
0 | 241 |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
242 if (!surface) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
243 return -1; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
244 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
245 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
246 if (flag & SDL_RLEACCEL) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
247 SDL_SetSurfaceRLE(surface, 1); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
248 } |
0 | 249 |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
250 flags = surface->map->info.flags; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
251 if (flag) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
252 surface->map->info.flags |= SDL_COPY_COLORKEY; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
253 surface->map->info.colorkey = key; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
254 } else { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
255 surface->map->info.flags &= ~SDL_COPY_COLORKEY; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
256 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
257 if (surface->map->info.flags != flags) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
258 SDL_InvalidateMap(surface->map); |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
259 } |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
260 |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
261 /* Compatibility mode */ |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
262 if (surface->map->info.flags & SDL_COPY_COLORKEY) { |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
263 surface->flags |= SDL_SRCCOLORKEY; |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
264 } else { |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
265 surface->flags &= ~SDL_SRCCOLORKEY; |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
266 } |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
267 |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
268 return 0; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
269 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
270 |
3103 | 271 int |
272 SDL_GetColorKey(SDL_Surface * surface, Uint32 * key) | |
273 { | |
274 if (!surface) { | |
275 return -1; | |
276 } | |
277 | |
278 if (!(surface->map->info.flags & SDL_COPY_COLORKEY)) { | |
279 return -1; | |
280 } | |
281 | |
282 if (key) { | |
283 *key = surface->map->info.colorkey; | |
284 } | |
285 return 0; | |
286 } | |
287 | |
2785
fa1095d42a5b
Fixed bug with converting colorkey surface to texture
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
288 /* This is a fairly slow function to switch from colorkey to alpha */ |
2787
93764fe8601a
It turns out both the software and the OpenGL renderer had the same problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2786
diff
changeset
|
289 static void |
2786 | 290 SDL_ConvertColorkeyToAlpha(SDL_Surface * surface) |
2785
fa1095d42a5b
Fixed bug with converting colorkey surface to texture
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
291 { |
2786 | 292 int x, y; |
2785
fa1095d42a5b
Fixed bug with converting colorkey surface to texture
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
293 |
2786 | 294 if (!surface) { |
295 return; | |
296 } | |
2785
fa1095d42a5b
Fixed bug with converting colorkey surface to texture
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
297 |
2786 | 298 if (!(surface->map->info.flags & SDL_COPY_COLORKEY) || |
299 !surface->format->Amask) { | |
300 return; | |
301 } | |
2785
fa1095d42a5b
Fixed bug with converting colorkey surface to texture
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
302 |
2786 | 303 SDL_LockSurface(surface); |
2785
fa1095d42a5b
Fixed bug with converting colorkey surface to texture
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
304 |
2786 | 305 switch (surface->format->BytesPerPixel) { |
306 case 2: | |
307 { | |
308 Uint16 *row, *spot; | |
309 Uint16 ckey = (Uint16) surface->map->info.colorkey; | |
310 Uint16 mask = (Uint16) (~surface->format->Amask); | |
2785
fa1095d42a5b
Fixed bug with converting colorkey surface to texture
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
311 |
2786 | 312 row = (Uint16 *) surface->pixels; |
313 for (y = surface->h; y--;) { | |
314 spot = row; | |
315 for (x = surface->w; x--;) { | |
316 if (*spot == ckey) { | |
317 *spot &= mask; | |
318 } | |
319 ++spot; | |
320 } | |
321 row += surface->pitch / 2; | |
322 } | |
323 } | |
324 break; | |
325 case 3: | |
326 /* FIXME */ | |
327 break; | |
328 case 4: | |
329 { | |
330 Uint32 *row, *spot; | |
331 Uint32 ckey = surface->map->info.colorkey; | |
332 Uint32 mask = ~surface->format->Amask; | |
2785
fa1095d42a5b
Fixed bug with converting colorkey surface to texture
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
333 |
2786 | 334 row = (Uint32 *) surface->pixels; |
335 for (y = surface->h; y--;) { | |
336 spot = row; | |
337 for (x = surface->w; x--;) { | |
338 if (*spot == ckey) { | |
339 *spot &= mask; | |
340 } | |
341 ++spot; | |
342 } | |
343 row += surface->pitch / 4; | |
344 } | |
345 } | |
346 break; | |
347 } | |
2785
fa1095d42a5b
Fixed bug with converting colorkey surface to texture
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
348 |
2786 | 349 SDL_UnlockSurface(surface); |
2785
fa1095d42a5b
Fixed bug with converting colorkey surface to texture
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
350 |
2786 | 351 SDL_SetColorKey(surface, 0, 0); |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
352 SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND); |
2785
fa1095d42a5b
Fixed bug with converting colorkey surface to texture
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
353 } |
fa1095d42a5b
Fixed bug with converting colorkey surface to texture
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
354 |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
355 int |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
356 SDL_SetSurfaceColorMod(SDL_Surface * surface, Uint8 r, Uint8 g, Uint8 b) |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
357 { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
358 int flags; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
359 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
360 if (!surface) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
361 return -1; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
362 } |
0 | 363 |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
364 surface->map->info.r = r; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
365 surface->map->info.g = g; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
366 surface->map->info.b = b; |
0 | 367 |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
368 flags = surface->map->info.flags; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
369 if (r != 0xFF || g != 0xFF || b != 0xFF) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
370 surface->map->info.flags |= SDL_COPY_MODULATE_COLOR; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
371 } else { |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
372 surface->map->info.flags &= ~SDL_COPY_MODULATE_COLOR; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
373 } |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
374 if (surface->map->info.flags != flags) { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
375 SDL_InvalidateMap(surface->map); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
376 } |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
377 return 0; |
0 | 378 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
379 |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
380 |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
381 int |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
382 SDL_GetSurfaceColorMod(SDL_Surface * surface, Uint8 * r, Uint8 * g, Uint8 * b) |
431
41cadcba32e8
Fixed SDL_DisplayFormatAlpha() on RGB surfaces with alpha
Sam Lantinga <slouken@libsdl.org>
parents:
422
diff
changeset
|
383 { |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
384 if (!surface) { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
385 return -1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
386 } |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
387 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
388 if (r) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
389 *r = surface->map->info.r; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
390 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
391 if (g) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
392 *g = surface->map->info.g; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
393 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
394 if (b) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
395 *b = surface->map->info.b; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
396 } |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
397 return 0; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
398 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
399 |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
400 int |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
401 SDL_SetSurfaceAlphaMod(SDL_Surface * surface, Uint8 alpha) |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
402 { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
403 int flags; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
404 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
405 if (!surface) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
406 return -1; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
407 } |
431
41cadcba32e8
Fixed SDL_DisplayFormatAlpha() on RGB surfaces with alpha
Sam Lantinga <slouken@libsdl.org>
parents:
422
diff
changeset
|
408 |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
409 surface->map->info.a = alpha; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
410 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
411 flags = surface->map->info.flags; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
412 if (alpha != 0xFF) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
413 surface->map->info.flags |= SDL_COPY_MODULATE_ALPHA; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
414 } else { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
415 surface->map->info.flags &= ~SDL_COPY_MODULATE_ALPHA; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
416 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
417 if (surface->map->info.flags != flags) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
418 SDL_InvalidateMap(surface->map); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
419 } |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
420 return 0; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
421 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
422 |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
423 int |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
424 SDL_GetSurfaceAlphaMod(SDL_Surface * surface, Uint8 * alpha) |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
425 { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
426 if (!surface) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
427 return -1; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
428 } |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
429 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
430 if (alpha) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
431 *alpha = surface->map->info.a; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
432 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
433 return 0; |
431
41cadcba32e8
Fixed SDL_DisplayFormatAlpha() on RGB surfaces with alpha
Sam Lantinga <slouken@libsdl.org>
parents:
422
diff
changeset
|
434 } |
0 | 435 |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
436 int |
4929
aa8888658021
Use the enumerated type for blend and scale mode instead of int
Sam Lantinga <slouken@libsdl.org>
parents:
4491
diff
changeset
|
437 SDL_SetSurfaceBlendMode(SDL_Surface * surface, SDL_BlendMode blendMode) |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
438 { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
439 int flags, status; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
440 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
441 if (!surface) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
442 return -1; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
443 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
444 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
445 status = 0; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
446 flags = surface->map->info.flags; |
5187
d976b67150c5
Restored SDL_BLENDMODE_MOD for MAME
Sam Lantinga <slouken@libsdl.org>
parents:
5143
diff
changeset
|
447 surface->map->info.flags &= |
d976b67150c5
Restored SDL_BLENDMODE_MOD for MAME
Sam Lantinga <slouken@libsdl.org>
parents:
5143
diff
changeset
|
448 ~(SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD); |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
449 switch (blendMode) { |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
450 case SDL_BLENDMODE_NONE: |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
451 break; |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
452 case SDL_BLENDMODE_BLEND: |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
453 surface->map->info.flags |= SDL_COPY_BLEND; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
454 break; |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
455 case SDL_BLENDMODE_ADD: |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
456 surface->map->info.flags |= SDL_COPY_ADD; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
457 break; |
5187
d976b67150c5
Restored SDL_BLENDMODE_MOD for MAME
Sam Lantinga <slouken@libsdl.org>
parents:
5143
diff
changeset
|
458 case SDL_BLENDMODE_MOD: |
d976b67150c5
Restored SDL_BLENDMODE_MOD for MAME
Sam Lantinga <slouken@libsdl.org>
parents:
5143
diff
changeset
|
459 surface->map->info.flags |= SDL_COPY_MOD; |
d976b67150c5
Restored SDL_BLENDMODE_MOD for MAME
Sam Lantinga <slouken@libsdl.org>
parents:
5143
diff
changeset
|
460 break; |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
461 default: |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
462 SDL_Unsupported(); |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
463 status = -1; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
464 break; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
465 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
466 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
467 if (surface->map->info.flags != flags) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
468 SDL_InvalidateMap(surface->map); |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
469 } |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
470 |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
471 /* Compatibility mode */ |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
472 if (surface->map->info.flags & SDL_COPY_BLEND) { |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
473 surface->flags |= SDL_SRCALPHA; |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
474 } else { |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
475 surface->flags &= ~SDL_SRCALPHA; |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
476 } |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
477 |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
478 return status; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
479 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
480 |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
481 int |
4929
aa8888658021
Use the enumerated type for blend and scale mode instead of int
Sam Lantinga <slouken@libsdl.org>
parents:
4491
diff
changeset
|
482 SDL_GetSurfaceBlendMode(SDL_Surface * surface, SDL_BlendMode *blendMode) |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
483 { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
484 if (!surface) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
485 return -1; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
486 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
487 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
488 if (!blendMode) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
489 return 0; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
490 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
491 |
5187
d976b67150c5
Restored SDL_BLENDMODE_MOD for MAME
Sam Lantinga <slouken@libsdl.org>
parents:
5143
diff
changeset
|
492 switch (surface->map-> |
d976b67150c5
Restored SDL_BLENDMODE_MOD for MAME
Sam Lantinga <slouken@libsdl.org>
parents:
5143
diff
changeset
|
493 info.flags & (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD)) { |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
494 case SDL_COPY_BLEND: |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
495 *blendMode = SDL_BLENDMODE_BLEND; |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
496 break; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
497 case SDL_COPY_ADD: |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
498 *blendMode = SDL_BLENDMODE_ADD; |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
499 break; |
5187
d976b67150c5
Restored SDL_BLENDMODE_MOD for MAME
Sam Lantinga <slouken@libsdl.org>
parents:
5143
diff
changeset
|
500 case SDL_COPY_MOD: |
d976b67150c5
Restored SDL_BLENDMODE_MOD for MAME
Sam Lantinga <slouken@libsdl.org>
parents:
5143
diff
changeset
|
501 *blendMode = SDL_BLENDMODE_MOD; |
d976b67150c5
Restored SDL_BLENDMODE_MOD for MAME
Sam Lantinga <slouken@libsdl.org>
parents:
5143
diff
changeset
|
502 break; |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
503 default: |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
504 *blendMode = SDL_BLENDMODE_NONE; |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
505 break; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
506 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
507 return 0; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
508 } |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
509 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
510 SDL_bool |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
511 SDL_SetClipRect(SDL_Surface * surface, const SDL_Rect * rect) |
0 | 512 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
513 SDL_Rect full_rect; |
0 | 514 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
515 /* Don't do anything if there's no surface to act on */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
516 if (!surface) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
517 return SDL_FALSE; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
518 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
519 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
520 /* Set up the full surface rectangle */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
521 full_rect.x = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
522 full_rect.y = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
523 full_rect.w = surface->w; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
524 full_rect.h = surface->h; |
0 | 525 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
526 /* Set the clipping rectangle */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
527 if (!rect) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
528 surface->clip_rect = full_rect; |
4966 | 529 return SDL_TRUE; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
530 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
531 return SDL_IntersectRect(rect, &full_rect, &surface->clip_rect); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
532 } |
0 | 533 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
534 void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
535 SDL_GetClipRect(SDL_Surface * surface, SDL_Rect * rect) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
536 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
537 if (surface && rect) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
538 *rect = surface->clip_rect; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
539 } |
0 | 540 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
541 |
0 | 542 /* |
543 * Set up a blit between two surfaces -- split into three parts: | |
544 * The upper part, SDL_UpperBlit(), performs clipping and rectangle | |
545 * verification. The lower part is a pointer to a low level | |
546 * accelerated blitting function. | |
547 * | |
548 * These parts are separated out and each used internally by this | |
549 * library in the optimimum places. They are exported so that if | |
550 * you know exactly what you are doing, you can optimize your code | |
551 * by calling the one(s) you need. | |
552 */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
553 int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
554 SDL_LowerBlit(SDL_Surface * src, SDL_Rect * srcrect, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
555 SDL_Surface * dst, SDL_Rect * dstrect) |
0 | 556 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
557 /* Check to make sure the blit mapping is valid */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
558 if ((src->map->dst != dst) || |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
559 (src->map->dst->format_version != src->map->format_version)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
560 if (SDL_MapSurface(src, dst) < 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
561 return (-1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
562 } |
2328
91e601d9df8b
re: bug#563. checking in some commented out trace code and a fix so that the in testalpha.c the background only flashes when alpha == 255. The problem that is being
Bob Pendleton <bob@pendleton.com>
parents:
2267
diff
changeset
|
563 /* just here for debugging */ |
2329 | 564 /* printf */ |
565 /* ("src = 0x%08X src->flags = %08X src->map->info.flags = %08x\ndst = 0x%08X dst->flags = %08X dst->map->info.flags = %08X\nsrc->map->blit = 0x%08x\n", */ | |
566 /* src, dst->flags, src->map->info.flags, dst, dst->flags, */ | |
567 /* dst->map->info.flags, src->map->blit); */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
568 } |
2257
340942cfda48
Moved the colorkey and per-surface alpha into the blit info,
Sam Lantinga <slouken@libsdl.org>
parents:
2253
diff
changeset
|
569 return (src->map->blit(src, srcrect, dst, dstrect)); |
0 | 570 } |
571 | |
572 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
573 int |
4949
68da5a234bba
The source rectangle isn't modified in SDL_UpperBlit
Sam Lantinga <slouken@libsdl.org>
parents:
4929
diff
changeset
|
574 SDL_UpperBlit(SDL_Surface * src, const SDL_Rect * srcrect, |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
575 SDL_Surface * dst, SDL_Rect * dstrect) |
0 | 576 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
577 SDL_Rect fulldst; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
578 int srcx, srcy, w, h; |
0 | 579 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
580 /* Make sure the surfaces aren't locked */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
581 if (!src || !dst) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
582 SDL_SetError("SDL_UpperBlit: passed a NULL surface"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
583 return (-1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
584 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
585 if (src->locked || dst->locked) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
586 SDL_SetError("Surfaces must not be locked during blit"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
587 return (-1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
588 } |
0 | 589 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
590 /* If the destination rectangle is NULL, use the entire dest surface */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
591 if (dstrect == NULL) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
592 fulldst.x = fulldst.y = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
593 dstrect = &fulldst; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
594 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
595 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
596 /* clip the source rectangle to the source surface */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
597 if (srcrect) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
598 int maxw, maxh; |
0 | 599 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
600 srcx = srcrect->x; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
601 w = srcrect->w; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
602 if (srcx < 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
603 w += srcx; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
604 dstrect->x -= srcx; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
605 srcx = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
606 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
607 maxw = src->w - srcx; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
608 if (maxw < w) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
609 w = maxw; |
0 | 610 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
611 srcy = srcrect->y; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
612 h = srcrect->h; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
613 if (srcy < 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
614 h += srcy; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
615 dstrect->y -= srcy; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
616 srcy = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
617 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
618 maxh = src->h - srcy; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
619 if (maxh < h) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
620 h = maxh; |
0 | 621 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
622 } else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
623 srcx = srcy = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
624 w = src->w; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
625 h = src->h; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
626 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
627 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
628 /* clip the destination rectangle against the clip rectangle */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
629 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
630 SDL_Rect *clip = &dst->clip_rect; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
631 int dx, dy; |
0 | 632 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
633 dx = clip->x - dstrect->x; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
634 if (dx > 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
635 w -= dx; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
636 dstrect->x += dx; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
637 srcx += dx; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
638 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
639 dx = dstrect->x + w - clip->x - clip->w; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
640 if (dx > 0) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
641 w -= dx; |
0 | 642 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
643 dy = clip->y - dstrect->y; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
644 if (dy > 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
645 h -= dy; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
646 dstrect->y += dy; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
647 srcy += dy; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
648 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
649 dy = dstrect->y + h - clip->y - clip->h; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
650 if (dy > 0) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
651 h -= dy; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
652 } |
0 | 653 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
654 if (w > 0 && h > 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
655 SDL_Rect sr; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
656 sr.x = srcx; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
657 sr.y = srcy; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
658 sr.w = dstrect->w = w; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
659 sr.h = dstrect->h = h; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
660 return SDL_LowerBlit(src, &sr, dst, dstrect); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
661 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
662 dstrect->w = dstrect->h = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
663 return 0; |
0 | 664 } |
665 | |
666 /* | |
667 * Lock a surface to directly access the pixels | |
668 */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
669 int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
670 SDL_LockSurface(SDL_Surface * surface) |
0 | 671 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
672 if (!surface->locked) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
673 /* Perform the lock */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
674 if (surface->flags & SDL_RLEACCEL) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
675 SDL_UnRLESurface(surface, 1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
676 surface->flags |= SDL_RLEACCEL; /* save accel'd state */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
677 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
678 } |
0 | 679 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
680 /* Increment the surface lock count, for recursive locks */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
681 ++surface->locked; |
0 | 682 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
683 /* Ready to go.. */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
684 return (0); |
0 | 685 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
686 |
0 | 687 /* |
688 * Unlock a previously locked surface | |
689 */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
690 void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
691 SDL_UnlockSurface(SDL_Surface * surface) |
0 | 692 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
693 /* Only perform an unlock if we are locked */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
694 if (!surface->locked || (--surface->locked > 0)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
695 return; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
696 } |
0 | 697 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
698 /* Update RLE encoded surface with new data */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
699 if ((surface->flags & SDL_RLEACCEL) == SDL_RLEACCEL) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
700 surface->flags &= ~SDL_RLEACCEL; /* stop lying */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
701 SDL_RLESurface(surface); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
702 } |
0 | 703 } |
704 | |
705 /* | |
706 * Convert a surface into the specified pixel format. | |
707 */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
708 SDL_Surface * |
2807
365fe1a2aad5
The SDL_RLEACCEL flag is respected in SDL_ConvertSurface(), per the docs.
Sam Lantinga <slouken@libsdl.org>
parents:
2787
diff
changeset
|
709 SDL_ConvertSurface(SDL_Surface * surface, SDL_PixelFormat * format, |
365fe1a2aad5
The SDL_RLEACCEL flag is respected in SDL_ConvertSurface(), per the docs.
Sam Lantinga <slouken@libsdl.org>
parents:
2787
diff
changeset
|
710 Uint32 flags) |
0 | 711 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
712 SDL_Surface *convert; |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
713 Uint32 copy_flags; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
714 SDL_Rect bounds; |
0 | 715 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
716 /* Check for empty destination palette! (results in empty image) */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
717 if (format->palette != NULL) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
718 int i; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
719 for (i = 0; i < format->palette->ncolors; ++i) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
720 if ((format->palette->colors[i].r != 0xFF) || |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
721 (format->palette->colors[i].g != 0xFF) || |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
722 (format->palette->colors[i].b != 0xFF)) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
723 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
724 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
725 if (i == format->palette->ncolors) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
726 SDL_SetError("Empty destination palette"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
727 return (NULL); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
728 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
729 } |
264
c9cd3b564e4b
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
730 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
731 /* Create a new surface with the desired format */ |
2807
365fe1a2aad5
The SDL_RLEACCEL flag is respected in SDL_ConvertSurface(), per the docs.
Sam Lantinga <slouken@libsdl.org>
parents:
2787
diff
changeset
|
732 convert = SDL_CreateRGBSurface(flags, surface->w, surface->h, |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
733 format->BitsPerPixel, format->Rmask, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
734 format->Gmask, format->Bmask, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
735 format->Amask); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
736 if (convert == NULL) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
737 return (NULL); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
738 } |
0 | 739 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
740 /* Copy the palette if any */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
741 if (format->palette && convert->format->palette) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
742 SDL_memcpy(convert->format->palette->colors, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
743 format->palette->colors, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
744 format->palette->ncolors * sizeof(SDL_Color)); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
745 convert->format->palette->ncolors = format->palette->ncolors; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
746 } |
0 | 747 |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
748 /* Save the original copy flags */ |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
749 copy_flags = surface->map->info.flags; |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
750 surface->map->info.flags = 0; |
0 | 751 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
752 /* Copy over the image data */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
753 bounds.x = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
754 bounds.y = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
755 bounds.w = surface->w; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
756 bounds.h = surface->h; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
757 SDL_LowerBlit(surface, &bounds, convert, &bounds); |
0 | 758 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
759 /* Clean up the original surface, and update converted surface */ |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
760 convert->map->info.r = surface->map->info.r; |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
761 convert->map->info.g = surface->map->info.g; |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
762 convert->map->info.b = surface->map->info.b; |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
763 convert->map->info.a = surface->map->info.a; |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
764 convert->map->info.flags = |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
765 (copy_flags & |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
766 ~(SDL_COPY_COLORKEY | SDL_COPY_BLEND |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
767 | SDL_COPY_RLE_DESIRED | SDL_COPY_RLE_COLORKEY | |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
768 SDL_COPY_RLE_ALPHAKEY)); |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
769 surface->map->info.flags = copy_flags; |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
770 if (copy_flags & SDL_COPY_COLORKEY) { |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
771 Uint8 keyR, keyG, keyB, keyA; |
0 | 772 |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
773 SDL_GetRGBA(surface->map->info.colorkey, surface->format, &keyR, |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
774 &keyG, &keyB, &keyA); |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
775 SDL_SetColorKey(convert, 1, |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
776 SDL_MapRGBA(convert->format, keyR, keyG, keyB, keyA)); |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
777 /* This is needed when converting for 3D texture upload */ |
2787
93764fe8601a
It turns out both the software and the OpenGL renderer had the same problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2786
diff
changeset
|
778 SDL_ConvertColorkeyToAlpha(convert); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
779 } |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
780 SDL_SetClipRect(convert, &surface->clip_rect); |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
781 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
782 /* Enable alpha blending by default if the new surface has an |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
783 * alpha channel or alpha modulation */ |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
784 if ((surface->format->Amask && format->Amask) || |
4491
2cd7bb613a83
Turn on blending if we're converting from a surface with colorkey enabled
Sam Lantinga <slouken@libsdl.org>
parents:
4461
diff
changeset
|
785 (copy_flags & (SDL_COPY_COLORKEY|SDL_COPY_MODULATE_ALPHA))) { |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
786 SDL_SetSurfaceBlendMode(convert, SDL_BLENDMODE_BLEND); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
787 } |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
788 if ((copy_flags & SDL_COPY_RLE_DESIRED) || (flags & SDL_RLEACCEL)) { |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
789 SDL_SetSurfaceRLE(convert, SDL_RLEACCEL); |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2807
diff
changeset
|
790 } |
0 | 791 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
792 /* We're ready to go! */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
793 return (convert); |
0 | 794 } |
795 | |
796 /* | |
3434
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
797 * Create a surface on the stack for quick blit operations |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
798 */ |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
799 static __inline__ SDL_bool |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
800 SDL_CreateSurfaceOnStack(int width, int height, Uint32 pixel_format, |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
801 void * pixels, int pitch, SDL_Surface * surface, |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
802 SDL_PixelFormat * format, SDL_BlitMap * blitmap) |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
803 { |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
804 int bpp; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
805 Uint32 Rmask, Gmask, Bmask, Amask; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
806 |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
807 if (!SDL_PixelFormatEnumToMasks(pixel_format, |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
808 &bpp, &Rmask, &Gmask, &Bmask, &Amask)) { |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
809 return SDL_FALSE; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
810 } |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
811 if (bpp <= 8) { |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
812 SDL_SetError("Indexed pixel formats not supported"); |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
813 return SDL_FALSE; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
814 } |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
815 |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
816 SDL_zerop(surface); |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
817 surface->flags = SDL_PREALLOC; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
818 surface->format = SDL_InitFormat(format, bpp, Rmask, Gmask, Bmask, Amask); |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
819 surface->pixels = pixels; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
820 surface->w = width; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
821 surface->h = height; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
822 surface->pitch = pitch; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
823 /* We don't actually need to set up the clip rect for our purposes */ |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
824 /*SDL_SetClipRect(surface, NULL);*/ |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
825 |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
826 /* Allocate an empty mapping */ |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
827 SDL_zerop(blitmap); |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
828 blitmap->info.r = 0xFF; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
829 blitmap->info.g = 0xFF; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
830 blitmap->info.b = 0xFF; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
831 blitmap->info.a = 0xFF; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
832 surface->map = blitmap; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
833 SDL_FormatChanged(surface); |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
834 |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
835 /* The surface is ready to go */ |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
836 surface->refcount = 1; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
837 return SDL_TRUE; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
838 } |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
839 |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
840 /* |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
841 * Copy a block of pixels of one format to another format |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
842 */ |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
843 int SDL_ConvertPixels(int width, int height, |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
844 Uint32 src_format, const void * src, int src_pitch, |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
845 Uint32 dst_format, void * dst, int dst_pitch) |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
846 { |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
847 SDL_Surface src_surface, dst_surface; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
848 SDL_PixelFormat src_fmt, dst_fmt; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
849 SDL_BlitMap src_blitmap, dst_blitmap; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
850 SDL_Rect rect; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
851 |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
852 /* Fast path for same format copy */ |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
853 if (src_format == dst_format) { |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
854 int bpp; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
855 |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
856 if (SDL_ISPIXELFORMAT_FOURCC(src_format)) { |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
857 switch (src_format) { |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
858 case SDL_PIXELFORMAT_YV12: |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
859 case SDL_PIXELFORMAT_IYUV: |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
860 case SDL_PIXELFORMAT_YUY2: |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
861 case SDL_PIXELFORMAT_UYVY: |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
862 case SDL_PIXELFORMAT_YVYU: |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
863 bpp = 2; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
864 default: |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
865 SDL_SetError("Unknown FOURCC pixel format"); |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
866 return -1; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
867 } |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
868 } else { |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
869 bpp = SDL_BYTESPERPIXEL(src_format); |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
870 } |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
871 width *= bpp; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
872 |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
873 while (height-- > 0) { |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
874 SDL_memcpy(dst, src, width); |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
875 src = (Uint8*)src + src_pitch; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
876 dst = (Uint8*)dst + dst_pitch; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
877 } |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
878 return SDL_TRUE; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
879 } |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
880 |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
881 if (!SDL_CreateSurfaceOnStack(width, height, src_format, (void*)src, |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
882 src_pitch, |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
883 &src_surface, &src_fmt, &src_blitmap)) { |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
884 return -1; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
885 } |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
886 if (!SDL_CreateSurfaceOnStack(width, height, dst_format, dst, dst_pitch, |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
887 &dst_surface, &dst_fmt, &dst_blitmap)) { |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
888 return -1; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
889 } |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
890 |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
891 /* Set up the rect and go! */ |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
892 rect.x = 0; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
893 rect.y = 0; |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
894 rect.w = width; |
3436
0538362b98d3
Fixed memory corruption in SW_RenderReadPixels()
Sam Lantinga <slouken@libsdl.org>
parents:
3434
diff
changeset
|
895 rect.h = height; |
3434
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
896 return SDL_LowerBlit(&src_surface, &rect, &dst_surface, &rect); |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
897 } |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
898 |
147d6ef5be03
Added a utility function to convert blocks of pixels
Sam Lantinga <slouken@libsdl.org>
parents:
3103
diff
changeset
|
899 /* |
0 | 900 * Free a surface created by the above function. |
901 */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
902 void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
903 SDL_FreeSurface(SDL_Surface * surface) |
0 | 904 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
905 if (surface == NULL) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
906 return; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
907 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
908 if (--surface->refcount > 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
909 return; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
910 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
911 while (surface->locked > 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
912 SDL_UnlockSurface(surface); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
913 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
914 if (surface->flags & SDL_RLEACCEL) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
915 SDL_UnRLESurface(surface, 0); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
916 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
917 if (surface->format) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
918 SDL_SetSurfacePalette(surface, NULL); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
919 SDL_FreeFormat(surface->format); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
920 surface->format = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
921 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
922 if (surface->map != NULL) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
923 SDL_FreeBlitMap(surface->map); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
924 surface->map = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
925 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
926 if (surface->pixels && ((surface->flags & SDL_PREALLOC) != SDL_PREALLOC)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
927 SDL_free(surface->pixels); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
928 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
929 SDL_free(surface); |
0 | 930 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
931 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1456
diff
changeset
|
932 /* vi: set ts=4 sw=4 expandtab: */ |