2 Simple DirectMedia Layer
5 This software is provided 'as-is', without any express or implied
6 warranty. In no event will the authors be held liable for any damages
7 arising from the use of this software.
9 Permission is granted to anyone to use this software for any purpose,
10 including commercial applications, and to alter it and redistribute it
11 freely, subject to the following restrictions:
13 1. The origin of this software must not be misrepresented; you must not
14 claim that you wrote the original software. If you use this software
15 in a product, an acknowledgment in the product documentation would be
16 appreciated but is not required.
17 2. Altered source versions must be plainly marked as such, and must not be
18 misrepresented as being the original software.
19 3. This notice may not be removed or altered from any source distribution.
25 * Header for the enumerated pixel format definitions.
31 #include "SDL_stdinc.h"
33 #include "begin_code.h"
34 /* Set up for C function definitions, even when using C++ */
40 * \name Transparency definitions
42 * These define alpha as the opacity of a surface.
45 #define SDL_ALPHA_OPAQUE 255
46 #define SDL_ALPHA_TRANSPARENT 0
52 SDL_PIXELTYPE_UNKNOWN,
56 SDL_PIXELTYPE_PACKED8,
57 SDL_PIXELTYPE_PACKED16,
58 SDL_PIXELTYPE_PACKED32,
59 SDL_PIXELTYPE_ARRAYU8,
60 SDL_PIXELTYPE_ARRAYU16,
61 SDL_PIXELTYPE_ARRAYU32,
62 SDL_PIXELTYPE_ARRAYF16,
63 SDL_PIXELTYPE_ARRAYF32
66 /** Bitmap pixel order, high bit -> low bit. */
74 /** Packed component order, high bit -> low bit. */
88 /** Array component order, low byte -> high byte. */
100 /** Packed component layout. */
103 SDL_PACKEDLAYOUT_NONE,
104 SDL_PACKEDLAYOUT_332,
105 SDL_PACKEDLAYOUT_4444,
106 SDL_PACKEDLAYOUT_1555,
107 SDL_PACKEDLAYOUT_5551,
108 SDL_PACKEDLAYOUT_565,
109 SDL_PACKEDLAYOUT_8888,
110 SDL_PACKEDLAYOUT_2101010,
111 SDL_PACKEDLAYOUT_1010102
114 #define SDL_DEFINE_PIXELFOURCC(A, B, C, D) SDL_FOURCC(A, B, C, D)
116 #define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \
117 ((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \
118 ((bits) << 8) | ((bytes) << 0))
120 #define SDL_PIXELFLAG(X) (((X) >> 28) & 0x0F)
121 #define SDL_PIXELTYPE(X) (((X) >> 24) & 0x0F)
122 #define SDL_PIXELORDER(X) (((X) >> 20) & 0x0F)
123 #define SDL_PIXELLAYOUT(X) (((X) >> 16) & 0x0F)
124 #define SDL_BITSPERPIXEL(X) (((X) >> 8) & 0xFF)
125 #define SDL_BYTESPERPIXEL(X) \
126 (SDL_ISPIXELFORMAT_FOURCC(X) ? \
127 ((((X) == SDL_PIXELFORMAT_YUY2) || \
128 ((X) == SDL_PIXELFORMAT_UYVY) || \
129 ((X) == SDL_PIXELFORMAT_YVYU)) ? 2 : 1) : (((X) >> 0) & 0xFF))
131 #define SDL_ISPIXELFORMAT_INDEXED(format) \
132 (!SDL_ISPIXELFORMAT_FOURCC(format) && \
133 ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \
134 (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \
135 (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8)))
137 #define SDL_ISPIXELFORMAT_ALPHA(format) \
138 (!SDL_ISPIXELFORMAT_FOURCC(format) && \
139 ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \
140 (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \
141 (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \
142 (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA)))
144 /* The flag is set to 1 because 0x1? is not in the printable ASCII range */
145 #define SDL_ISPIXELFORMAT_FOURCC(format) \
146 ((format) && (SDL_PIXELFLAG(format) != 1))
148 /* Note: If you modify this list, update SDL_GetPixelFormatName() */
151 SDL_PIXELFORMAT_UNKNOWN,
152 SDL_PIXELFORMAT_INDEX1LSB =
153 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0,
155 SDL_PIXELFORMAT_INDEX1MSB =
156 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0,
158 SDL_PIXELFORMAT_INDEX4LSB =
159 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0,
161 SDL_PIXELFORMAT_INDEX4MSB =
162 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0,
164 SDL_PIXELFORMAT_INDEX8 =
165 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1),
166 SDL_PIXELFORMAT_RGB332 =
167 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB,
168 SDL_PACKEDLAYOUT_332, 8, 1),
169 SDL_PIXELFORMAT_RGB444 =
170 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB,
171 SDL_PACKEDLAYOUT_4444, 12, 2),
172 SDL_PIXELFORMAT_RGB555 =
173 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB,
174 SDL_PACKEDLAYOUT_1555, 15, 2),
175 SDL_PIXELFORMAT_BGR555 =
176 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR,
177 SDL_PACKEDLAYOUT_1555, 15, 2),
178 SDL_PIXELFORMAT_ARGB4444 =
179 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB,
180 SDL_PACKEDLAYOUT_4444, 16, 2),
181 SDL_PIXELFORMAT_RGBA4444 =
182 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA,
183 SDL_PACKEDLAYOUT_4444, 16, 2),
184 SDL_PIXELFORMAT_ABGR4444 =
185 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR,
186 SDL_PACKEDLAYOUT_4444, 16, 2),
187 SDL_PIXELFORMAT_BGRA4444 =
188 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA,
189 SDL_PACKEDLAYOUT_4444, 16, 2),
190 SDL_PIXELFORMAT_ARGB1555 =
191 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB,
192 SDL_PACKEDLAYOUT_1555, 16, 2),
193 SDL_PIXELFORMAT_RGBA5551 =
194 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA,
195 SDL_PACKEDLAYOUT_5551, 16, 2),
196 SDL_PIXELFORMAT_ABGR1555 =
197 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR,
198 SDL_PACKEDLAYOUT_1555, 16, 2),
199 SDL_PIXELFORMAT_BGRA5551 =
200 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA,
201 SDL_PACKEDLAYOUT_5551, 16, 2),
202 SDL_PIXELFORMAT_RGB565 =
203 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB,
204 SDL_PACKEDLAYOUT_565, 16, 2),
205 SDL_PIXELFORMAT_BGR565 =
206 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR,
207 SDL_PACKEDLAYOUT_565, 16, 2),
208 SDL_PIXELFORMAT_RGB24 =
209 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0,
211 SDL_PIXELFORMAT_BGR24 =
212 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0,
214 SDL_PIXELFORMAT_RGB888 =
215 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB,
216 SDL_PACKEDLAYOUT_8888, 24, 4),
217 SDL_PIXELFORMAT_RGBX8888 =
218 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX,
219 SDL_PACKEDLAYOUT_8888, 24, 4),
220 SDL_PIXELFORMAT_BGR888 =
221 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR,
222 SDL_PACKEDLAYOUT_8888, 24, 4),
223 SDL_PIXELFORMAT_BGRX8888 =
224 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRX,
225 SDL_PACKEDLAYOUT_8888, 24, 4),
226 SDL_PIXELFORMAT_ARGB8888 =
227 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB,
228 SDL_PACKEDLAYOUT_8888, 32, 4),
229 SDL_PIXELFORMAT_RGBA8888 =
230 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA,
231 SDL_PACKEDLAYOUT_8888, 32, 4),
232 SDL_PIXELFORMAT_ABGR8888 =
233 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR,
234 SDL_PACKEDLAYOUT_8888, 32, 4),
235 SDL_PIXELFORMAT_BGRA8888 =
236 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA,
237 SDL_PACKEDLAYOUT_8888, 32, 4),
238 SDL_PIXELFORMAT_ARGB2101010 =
239 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB,
240 SDL_PACKEDLAYOUT_2101010, 32, 4),
242 SDL_PIXELFORMAT_YV12 = /**< Planar mode: Y + V + U (3 planes) */
243 SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'),
244 SDL_PIXELFORMAT_IYUV = /**< Planar mode: Y + U + V (3 planes) */
245 SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'),
246 SDL_PIXELFORMAT_YUY2 = /**< Packed mode: Y0+U0+Y1+V0 (1 plane) */
247 SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'),
248 SDL_PIXELFORMAT_UYVY = /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */
249 SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'),
250 SDL_PIXELFORMAT_YVYU = /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */
251 SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U')
254 typedef struct SDL_Color
261 #define SDL_Colour SDL_Color
263 typedef struct SDL_Palette
272 * \note Everything in the pixel format structure is read-only.
274 typedef struct SDL_PixelFormat
277 SDL_Palette *palette;
294 struct SDL_PixelFormat *next;
298 * \brief Get the human readable name of a pixel format
300 extern DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(Uint32 format);
303 * \brief Convert one of the enumerated pixel formats to a bpp and RGBA masks.
305 * \return SDL_TRUE, or SDL_FALSE if the conversion wasn't possible.
307 * \sa SDL_MasksToPixelFormatEnum()
309 extern DECLSPEC SDL_bool SDLCALL SDL_PixelFormatEnumToMasks(Uint32 format,
317 * \brief Convert a bpp and RGBA masks to an enumerated pixel format.
319 * \return The pixel format, or ::SDL_PIXELFORMAT_UNKNOWN if the conversion
322 * \sa SDL_PixelFormatEnumToMasks()
324 extern DECLSPEC Uint32 SDLCALL SDL_MasksToPixelFormatEnum(int bpp,
331 * \brief Create an SDL_PixelFormat structure from a pixel format enum.
333 extern DECLSPEC SDL_PixelFormat * SDLCALL SDL_AllocFormat(Uint32 pixel_format);
336 * \brief Free an SDL_PixelFormat structure.
338 extern DECLSPEC void SDLCALL SDL_FreeFormat(SDL_PixelFormat *format);
341 * \brief Create a palette structure with the specified number of color
344 * \return A new palette, or NULL if there wasn't enough memory.
346 * \note The palette entries are initialized to white.
348 * \sa SDL_FreePalette()
350 extern DECLSPEC SDL_Palette *SDLCALL SDL_AllocPalette(int ncolors);
353 * \brief Set the palette for a pixel format structure.
355 extern DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * format,
356 SDL_Palette *palette);
359 * \brief Set a range of colors in a palette.
361 * \param palette The palette to modify.
362 * \param colors An array of colors to copy into the palette.
363 * \param firstcolor The index of the first palette entry to modify.
364 * \param ncolors The number of entries to modify.
366 * \return 0 on success, or -1 if not all of the colors could be set.
368 extern DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette * palette,
369 const SDL_Color * colors,
370 int firstcolor, int ncolors);
373 * \brief Free a palette created with SDL_AllocPalette().
375 * \sa SDL_AllocPalette()
377 extern DECLSPEC void SDLCALL SDL_FreePalette(SDL_Palette * palette);
380 * \brief Maps an RGB triple to an opaque pixel value for a given pixel format.
384 extern DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format,
385 Uint8 r, Uint8 g, Uint8 b);
388 * \brief Maps an RGBA quadruple to a pixel value for a given pixel format.
392 extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format,
393 Uint8 r, Uint8 g, Uint8 b,
397 * \brief Get the RGB components from a pixel of the specified format.
401 extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel,
402 const SDL_PixelFormat * format,
403 Uint8 * r, Uint8 * g, Uint8 * b);
406 * \brief Get the RGBA components from a pixel of the specified format.
410 extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel,
411 const SDL_PixelFormat * format,
412 Uint8 * r, Uint8 * g, Uint8 * b,
416 * \brief Calculate a 256 entry gamma ramp for a gamma value.
418 extern DECLSPEC void SDLCALL SDL_CalculateGammaRamp(float gamma, Uint16 * ramp);
421 /* Ends C function definitions when using C++ */
425 #include "close_code.h"
427 #endif /* _SDL_pixels_h */
429 /* vi: set ts=4 sw=4 expandtab: */