include/SDL_pixels.h
author Sam Lantinga <slouken@libsdl.org>
Mon, 07 Mar 2011 00:30:05 -0800
changeset 5438 b705640cb34a
parent 5434 fb5e9db92a77
child 5466 006883d5fa51
permissions -rw-r--r--
Fixed bitmap order interpretation; SDL defaults to MSB ordering so a bitstream corresponds to a pixel stream.

The bitmap ordering is defined such that the numbering refers to the pixel index from left to right, and the number position refers to the bit position in the byte.

SDL_BITMAPORDER_4321 is the fourth pixel at the high bit and the first pixel at the low bit (LSBFirst)

SDL_BITMAPORDER_1234 is the first pixel at the high bit and the fourth pixel at the low bit (MSBFirst)
slouken@1895
     1
/*
slouken@1895
     2
    SDL - Simple DirectMedia Layer
slouken@5262
     3
    Copyright (C) 1997-2011 Sam Lantinga
slouken@1895
     4
slouken@1895
     5
    This library is free software; you can redistribute it and/or
slouken@1895
     6
    modify it under the terms of the GNU Lesser General Public
slouken@1895
     7
    License as published by the Free Software Foundation; either
slouken@1895
     8
    version 2.1 of the License, or (at your option) any later version.
slouken@1895
     9
slouken@1895
    10
    This library is distributed in the hope that it will be useful,
slouken@1895
    11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
slouken@1895
    12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
slouken@1895
    13
    Lesser General Public License for more details.
slouken@1895
    14
slouken@1895
    15
    You should have received a copy of the GNU Lesser General Public
slouken@1895
    16
    License along with this library; if not, write to the Free Software
slouken@1895
    17
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
slouken@1895
    18
slouken@1895
    19
    Sam Lantinga
slouken@1895
    20
    slouken@libsdl.org
slouken@1895
    21
*/
slouken@1895
    22
slouken@1895
    23
/**
slouken@3407
    24
 *  \file SDL_pixels.h
slouken@3407
    25
 *  
slouken@3407
    26
 *  Header for the enumerated pixel format definitions.
slouken@1895
    27
 */
slouken@1895
    28
slouken@1895
    29
#ifndef _SDL_pixels_h
slouken@1895
    30
#define _SDL_pixels_h
slouken@1895
    31
slouken@1895
    32
#include "begin_code.h"
slouken@1895
    33
/* Set up for C function definitions, even when using C++ */
slouken@1895
    34
#ifdef __cplusplus
slouken@1895
    35
/* *INDENT-OFF* */
slouken@1895
    36
extern "C" {
slouken@1895
    37
/* *INDENT-ON* */
slouken@1895
    38
#endif
slouken@1895
    39
slouken@3407
    40
/**
slouken@3407
    41
 *  \name Transparency definitions
slouken@3407
    42
 *  
slouken@3407
    43
 *  These define alpha as the opacity of a surface.
slouken@3407
    44
 */
slouken@3407
    45
/*@{*/
slouken@2275
    46
#define SDL_ALPHA_OPAQUE 255
slouken@2275
    47
#define SDL_ALPHA_TRANSPARENT 0
slouken@3407
    48
/*@}*/
slouken@2275
    49
slouken@3407
    50
/** Pixel type. */
slouken@1895
    51
enum
slouken@3407
    52
{
slouken@1965
    53
    SDL_PIXELTYPE_UNKNOWN,
slouken@1965
    54
    SDL_PIXELTYPE_INDEX1,
slouken@1965
    55
    SDL_PIXELTYPE_INDEX4,
slouken@1965
    56
    SDL_PIXELTYPE_INDEX8,
slouken@1965
    57
    SDL_PIXELTYPE_PACKED8,
slouken@1965
    58
    SDL_PIXELTYPE_PACKED16,
slouken@1965
    59
    SDL_PIXELTYPE_PACKED32,
slouken@1965
    60
    SDL_PIXELTYPE_ARRAYU8,
slouken@1965
    61
    SDL_PIXELTYPE_ARRAYU16,
slouken@1965
    62
    SDL_PIXELTYPE_ARRAYU32,
slouken@1965
    63
    SDL_PIXELTYPE_ARRAYF16,
slouken@2208
    64
    SDL_PIXELTYPE_ARRAYF32
slouken@1895
    65
};
slouken@1895
    66
slouken@3407
    67
/** Bitmap pixel order, high bit -> low bit. */
slouken@1895
    68
enum
slouken@3407
    69
{
slouken@1965
    70
    SDL_BITMAPORDER_NONE,
slouken@1965
    71
    SDL_BITMAPORDER_4321,
slouken@2208
    72
    SDL_BITMAPORDER_1234
slouken@1895
    73
};
slouken@3407
    74
slouken@3407
    75
/** Packed component order, high bit -> low bit. */
slouken@1895
    76
enum
slouken@3407
    77
{
slouken@1965
    78
    SDL_PACKEDORDER_NONE,
slouken@1965
    79
    SDL_PACKEDORDER_XRGB,
slouken@1965
    80
    SDL_PACKEDORDER_RGBX,
slouken@1965
    81
    SDL_PACKEDORDER_ARGB,
slouken@1965
    82
    SDL_PACKEDORDER_RGBA,
slouken@1965
    83
    SDL_PACKEDORDER_XBGR,
slouken@1965
    84
    SDL_PACKEDORDER_BGRX,
slouken@1965
    85
    SDL_PACKEDORDER_ABGR,
slouken@2208
    86
    SDL_PACKEDORDER_BGRA
slouken@1895
    87
};
slouken@3407
    88
slouken@3407
    89
/** Array component order, low byte -> high byte. */
slouken@1895
    90
enum
slouken@3407
    91
{
slouken@1965
    92
    SDL_ARRAYORDER_NONE,
slouken@1965
    93
    SDL_ARRAYORDER_RGB,
slouken@1965
    94
    SDL_ARRAYORDER_RGBA,
slouken@1965
    95
    SDL_ARRAYORDER_ARGB,
slouken@1965
    96
    SDL_ARRAYORDER_BGR,
slouken@1965
    97
    SDL_ARRAYORDER_BGRA,
slouken@2208
    98
    SDL_ARRAYORDER_ABGR
slouken@1895
    99
};
slouken@1895
   100
slouken@3407
   101
/** Packed component layout. */
slouken@1895
   102
enum
slouken@3407
   103
{
slouken@1965
   104
    SDL_PACKEDLAYOUT_NONE,
slouken@1965
   105
    SDL_PACKEDLAYOUT_332,
slouken@1965
   106
    SDL_PACKEDLAYOUT_4444,
slouken@1965
   107
    SDL_PACKEDLAYOUT_1555,
slouken@1965
   108
    SDL_PACKEDLAYOUT_5551,
slouken@1965
   109
    SDL_PACKEDLAYOUT_565,
slouken@1965
   110
    SDL_PACKEDLAYOUT_8888,
slouken@1965
   111
    SDL_PACKEDLAYOUT_2101010,
slouken@2208
   112
    SDL_PACKEDLAYOUT_1010102
slouken@1895
   113
};
slouken@1895
   114
slouken@4492
   115
#define SDL_DEFINE_PIXELFOURCC(A, B, C, D) SDL_FOURCC(A, B, C, D)
slouken@1895
   116
slouken@1895
   117
#define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \
slouken@1895
   118
    ((1 << 31) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \
slouken@1895
   119
     ((bits) << 8) | ((bytes) << 0))
slouken@1895
   120
slouken@1895
   121
#define SDL_PIXELTYPE(X)	(((X) >> 24) & 0x0F)
slouken@1895
   122
#define SDL_PIXELORDER(X)	(((X) >> 20) & 0x0F)
slouken@1895
   123
#define SDL_PIXELLAYOUT(X)	(((X) >> 16) & 0x0F)
slouken@1895
   124
#define SDL_BITSPERPIXEL(X)	(((X) >> 8) & 0xFF)
slouken@5156
   125
#define SDL_BYTESPERPIXEL(X) \
slouken@5156
   126
    (SDL_ISPIXELFORMAT_FOURCC(X) ? \
slouken@5264
   127
        ((((X) == SDL_PIXELFORMAT_YUY2) || \
slouken@5156
   128
          ((X) == SDL_PIXELFORMAT_UYVY) || \
slouken@5156
   129
          ((X) == SDL_PIXELFORMAT_YVYU)) ? 2 : 1) : (((X) >> 0) & 0xFF))
slouken@1895
   130
slouken@1895
   131
#define SDL_ISPIXELFORMAT_INDEXED(format)   \
slouken@5156
   132
    (!SDL_ISPIXELFORMAT_FOURCC(format) && \
slouken@5156
   133
     ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \
slouken@5156
   134
      (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \
slouken@5156
   135
      (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8)))
slouken@1895
   136
slouken@3054
   137
#define SDL_ISPIXELFORMAT_ALPHA(format)   \
slouken@5156
   138
    (!SDL_ISPIXELFORMAT_FOURCC(format) && \
slouken@5156
   139
     ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \
slouken@5156
   140
      (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \
slouken@5156
   141
      (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \
slouken@5156
   142
      (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA)))
slouken@3054
   143
slouken@1895
   144
#define SDL_ISPIXELFORMAT_FOURCC(format)    \
slouken@1895
   145
    ((format) && !((format) & 0x80000000))
slouken@1895
   146
slouken@4982
   147
/* Note: If you modify this list, update SDL_GetPixelFormatName() */
slouken@1895
   148
enum
slouken@1895
   149
{
slouken@1965
   150
    SDL_PIXELFORMAT_UNKNOWN,
slouken@1965
   151
    SDL_PIXELFORMAT_INDEX1LSB =
slouken@5438
   152
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0,
slouken@5438
   153
                               1, 0),
slouken@5438
   154
    SDL_PIXELFORMAT_INDEX1MSB =
slouken@1965
   155
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0,
slouken@1895
   156
                               1, 0),
slouken@1965
   157
    SDL_PIXELFORMAT_INDEX4LSB =
slouken@5438
   158
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0,
slouken@3177
   159
                               4, 0),
slouken@1965
   160
    SDL_PIXELFORMAT_INDEX4MSB =
slouken@5438
   161
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0,
slouken@3177
   162
                               4, 0),
slouken@1965
   163
    SDL_PIXELFORMAT_INDEX8 =
slouken@1965
   164
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1),
slouken@1965
   165
    SDL_PIXELFORMAT_RGB332 =
slouken@1965
   166
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB,
slouken@1965
   167
                               SDL_PACKEDLAYOUT_332, 8, 1),
slouken@1965
   168
    SDL_PIXELFORMAT_RGB444 =
slouken@1965
   169
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB,
slouken@1965
   170
                               SDL_PACKEDLAYOUT_4444, 12, 2),
slouken@1965
   171
    SDL_PIXELFORMAT_RGB555 =
slouken@1965
   172
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB,
slouken@1965
   173
                               SDL_PACKEDLAYOUT_1555, 15, 2),
slouken@2735
   174
    SDL_PIXELFORMAT_BGR555 =
slouken@2735
   175
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR,
slouken@2735
   176
                               SDL_PACKEDLAYOUT_1555, 15, 2),
slouken@1965
   177
    SDL_PIXELFORMAT_ARGB4444 =
slouken@1965
   178
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB,
slouken@1965
   179
                               SDL_PACKEDLAYOUT_4444, 16, 2),
slouken@4982
   180
    SDL_PIXELFORMAT_RGBA4444 =
slouken@4982
   181
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA,
slouken@4982
   182
                               SDL_PACKEDLAYOUT_4444, 16, 2),
lestat@3163
   183
    SDL_PIXELFORMAT_ABGR4444 =
lestat@3163
   184
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR,
lestat@3163
   185
                               SDL_PACKEDLAYOUT_4444, 16, 2),
slouken@4982
   186
    SDL_PIXELFORMAT_BGRA4444 =
slouken@4982
   187
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA,
slouken@4982
   188
                               SDL_PACKEDLAYOUT_4444, 16, 2),
slouken@1965
   189
    SDL_PIXELFORMAT_ARGB1555 =
slouken@1965
   190
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB,
slouken@1965
   191
                               SDL_PACKEDLAYOUT_1555, 16, 2),
slouken@4982
   192
    SDL_PIXELFORMAT_RGBA5551 =
slouken@4982
   193
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA,
slouken@4982
   194
                               SDL_PACKEDLAYOUT_5551, 16, 2),
slouken@2735
   195
    SDL_PIXELFORMAT_ABGR1555 =
slouken@2735
   196
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR,
slouken@2735
   197
                               SDL_PACKEDLAYOUT_1555, 16, 2),
slouken@4982
   198
    SDL_PIXELFORMAT_BGRA5551 =
slouken@4982
   199
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA,
slouken@4982
   200
                               SDL_PACKEDLAYOUT_5551, 16, 2),
slouken@1965
   201
    SDL_PIXELFORMAT_RGB565 =
slouken@1965
   202
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB,
slouken@1965
   203
                               SDL_PACKEDLAYOUT_565, 16, 2),
lestat@3163
   204
    SDL_PIXELFORMAT_BGR565 =
lestat@3163
   205
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR,
lestat@3163
   206
                               SDL_PACKEDLAYOUT_565, 16, 2),
slouken@1965
   207
    SDL_PIXELFORMAT_RGB24 =
slouken@1965
   208
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0,
slouken@1895
   209
                               24, 3),
slouken@1965
   210
    SDL_PIXELFORMAT_BGR24 =
slouken@1965
   211
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0,
slouken@1895
   212
                               24, 3),
slouken@1965
   213
    SDL_PIXELFORMAT_RGB888 =
slouken@1965
   214
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB,
slouken@1965
   215
                               SDL_PACKEDLAYOUT_8888, 24, 4),
slouken@1965
   216
    SDL_PIXELFORMAT_BGR888 =
slouken@1965
   217
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR,
slouken@1965
   218
                               SDL_PACKEDLAYOUT_8888, 24, 4),
slouken@1965
   219
    SDL_PIXELFORMAT_ARGB8888 =
slouken@1965
   220
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB,
slouken@1965
   221
                               SDL_PACKEDLAYOUT_8888, 32, 4),
slouken@1965
   222
    SDL_PIXELFORMAT_RGBA8888 =
slouken@1965
   223
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA,
slouken@1965
   224
                               SDL_PACKEDLAYOUT_8888, 32, 4),
slouken@1965
   225
    SDL_PIXELFORMAT_ABGR8888 =
slouken@1965
   226
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR,
slouken@1965
   227
                               SDL_PACKEDLAYOUT_8888, 32, 4),
slouken@1965
   228
    SDL_PIXELFORMAT_BGRA8888 =
slouken@1965
   229
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA,
slouken@1965
   230
                               SDL_PACKEDLAYOUT_8888, 32, 4),
slouken@1965
   231
    SDL_PIXELFORMAT_ARGB2101010 =
slouken@1965
   232
        SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB,
slouken@1965
   233
                               SDL_PACKEDLAYOUT_2101010, 32, 4),
slouken@1895
   234
slouken@3407
   235
    SDL_PIXELFORMAT_YV12 =      /**< Planar mode: Y + V + U  (3 planes) */
slouken@1895
   236
        SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'),
slouken@3407
   237
    SDL_PIXELFORMAT_IYUV =      /**< Planar mode: Y + U + V  (3 planes) */
slouken@1895
   238
        SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'),
slouken@3407
   239
    SDL_PIXELFORMAT_YUY2 =      /**< Packed mode: Y0+U0+Y1+V0 (1 plane) */
slouken@1895
   240
        SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'),
slouken@3407
   241
    SDL_PIXELFORMAT_UYVY =      /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */
slouken@1895
   242
        SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'),
slouken@3407
   243
    SDL_PIXELFORMAT_YVYU =      /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */
slouken@2208
   244
        SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U')
slouken@1895
   245
};
slouken@1895
   246
slouken@1895
   247
typedef struct SDL_Color
slouken@1895
   248
{
slouken@1895
   249
    Uint8 r;
slouken@1895
   250
    Uint8 g;
slouken@1895
   251
    Uint8 b;
slouken@1895
   252
    Uint8 unused;
slouken@1895
   253
} SDL_Color;
slouken@1895
   254
#define SDL_Colour SDL_Color
slouken@1895
   255
slouken@5288
   256
typedef struct SDL_Palette
slouken@1895
   257
{
slouken@1895
   258
    int ncolors;
slouken@1895
   259
    SDL_Color *colors;
slouken@5288
   260
    Uint32 version;
slouken@1895
   261
    int refcount;
slouken@5288
   262
} SDL_Palette;
slouken@1895
   263
slouken@3407
   264
/**
slouken@3407
   265
 *  \note Everything in the pixel format structure is read-only.
slouken@3407
   266
 */
slouken@1895
   267
typedef struct SDL_PixelFormat
slouken@1895
   268
{
slouken@5288
   269
    Uint32 format;
slouken@1895
   270
    SDL_Palette *palette;
slouken@1895
   271
    Uint8 BitsPerPixel;
slouken@1895
   272
    Uint8 BytesPerPixel;
slouken@5434
   273
    Uint8 padding[2];
slouken@5434
   274
    Uint32 Rmask;
slouken@5434
   275
    Uint32 Gmask;
slouken@5434
   276
    Uint32 Bmask;
slouken@5434
   277
    Uint32 Amask;
slouken@1895
   278
    Uint8 Rloss;
slouken@1895
   279
    Uint8 Gloss;
slouken@1895
   280
    Uint8 Bloss;
slouken@1895
   281
    Uint8 Aloss;
slouken@1895
   282
    Uint8 Rshift;
slouken@1895
   283
    Uint8 Gshift;
slouken@1895
   284
    Uint8 Bshift;
slouken@1895
   285
    Uint8 Ashift;
slouken@5288
   286
    int refcount;
slouken@5288
   287
    struct SDL_PixelFormat *next;
slouken@1895
   288
} SDL_PixelFormat;
slouken@1895
   289
slouken@1895
   290
/**
slouken@4982
   291
 * \brief Get the human readable name of a pixel format
slouken@4982
   292
 */
slouken@4982
   293
extern DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(Uint32 format);
slouken@4982
   294
slouken@4982
   295
/**
slouken@3407
   296
 *  \brief Convert one of the enumerated pixel formats to a bpp and RGBA masks.
slouken@3407
   297
 *  
slouken@3407
   298
 *  \return SDL_TRUE, or SDL_FALSE if the conversion wasn't possible.
slouken@3407
   299
 *  
slouken@3407
   300
 *  \sa SDL_MasksToPixelFormatEnum()
slouken@1895
   301
 */
slouken@1895
   302
extern DECLSPEC SDL_bool SDLCALL SDL_PixelFormatEnumToMasks(Uint32 format,
slouken@1895
   303
                                                            int *bpp,
slouken@1895
   304
                                                            Uint32 * Rmask,
slouken@1895
   305
                                                            Uint32 * Gmask,
slouken@1895
   306
                                                            Uint32 * Bmask,
slouken@1895
   307
                                                            Uint32 * Amask);
slouken@1895
   308
slouken@1895
   309
/**
slouken@3407
   310
 *  \brief Convert a bpp and RGBA masks to an enumerated pixel format.
slouken@3407
   311
 *  
slouken@3407
   312
 *  \return The pixel format, or ::SDL_PIXELFORMAT_UNKNOWN if the conversion 
slouken@3407
   313
 *          wasn't possible.
slouken@3407
   314
 *  
slouken@3407
   315
 *  \sa SDL_PixelFormatEnumToMasks()
slouken@1895
   316
 */
slouken@1895
   317
extern DECLSPEC Uint32 SDLCALL SDL_MasksToPixelFormatEnum(int bpp,
slouken@1895
   318
                                                          Uint32 Rmask,
slouken@1895
   319
                                                          Uint32 Gmask,
slouken@1895
   320
                                                          Uint32 Bmask,
slouken@1895
   321
                                                          Uint32 Amask);
slouken@1895
   322
slouken@1895
   323
/**
slouken@5288
   324
 *  \brief Create an SDL_PixelFormat structure from a pixel format enum.
slouken@5288
   325
 */
slouken@5288
   326
extern DECLSPEC SDL_PixelFormat * SDLCALL SDL_AllocFormat(Uint32 pixel_format);
slouken@5288
   327
slouken@5288
   328
/**
slouken@5288
   329
 *  \brief Free an SDL_PixelFormat structure.
slouken@5288
   330
 */
slouken@5288
   331
extern DECLSPEC void SDLCALL SDL_FreeFormat(SDL_PixelFormat *format);
slouken@5288
   332
slouken@5288
   333
/**
slouken@3407
   334
 *  \brief Create a palette structure with the specified number of color 
slouken@3407
   335
 *         entries.
slouken@3407
   336
 *  
slouken@3407
   337
 *  \return A new palette, or NULL if there wasn't enough memory.
slouken@3407
   338
 *  
slouken@3407
   339
 *  \note The palette entries are initialized to white.
slouken@3407
   340
 *  
slouken@3407
   341
 *  \sa SDL_FreePalette()
slouken@1895
   342
 */
slouken@1895
   343
extern DECLSPEC SDL_Palette *SDLCALL SDL_AllocPalette(int ncolors);
slouken@1895
   344
slouken@1895
   345
/**
slouken@5288
   346
 *  \brief Set the palette for a pixel format structure.
slouken@1895
   347
 */
slouken@5288
   348
extern DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * format,
slouken@5288
   349
                                                      SDL_Palette *palette);
slouken@1895
   350
slouken@1895
   351
/**
slouken@3407
   352
 *  \brief Set a range of colors in a palette.
slouken@3407
   353
 *  
slouken@3407
   354
 *  \param palette    The palette to modify.
slouken@3407
   355
 *  \param colors     An array of colors to copy into the palette.
slouken@3407
   356
 *  \param firstcolor The index of the first palette entry to modify.
slouken@3407
   357
 *  \param ncolors    The number of entries to modify.
slouken@3407
   358
 *  
slouken@3407
   359
 *  \return 0 on success, or -1 if not all of the colors could be set.
slouken@1895
   360
 */
slouken@1895
   361
extern DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette * palette,
slouken@1895
   362
                                                 const SDL_Color * colors,
slouken@1895
   363
                                                 int firstcolor, int ncolors);
slouken@1895
   364
slouken@1895
   365
/**
slouken@3407
   366
 *  \brief Free a palette created with SDL_AllocPalette().
slouken@3407
   367
 *  
slouken@3407
   368
 *  \sa SDL_AllocPalette()
slouken@1895
   369
 */
slouken@1895
   370
extern DECLSPEC void SDLCALL SDL_FreePalette(SDL_Palette * palette);
slouken@1895
   371
slouken@2275
   372
/**
slouken@3407
   373
 *  \brief Maps an RGB triple to an opaque pixel value for a given pixel format.
slouken@3407
   374
 *  
slouken@3407
   375
 *  \sa SDL_MapRGBA
slouken@2275
   376
 */
slouken@2275
   377
extern DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format,
slouken@2275
   378
                                          Uint8 r, Uint8 g, Uint8 b);
slouken@2275
   379
slouken@2275
   380
/**
slouken@3407
   381
 *  \brief Maps an RGBA quadruple to a pixel value for a given pixel format.
slouken@3407
   382
 *  
slouken@3407
   383
 *  \sa SDL_MapRGB
slouken@2275
   384
 */
slouken@2275
   385
extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format,
slouken@2275
   386
                                           Uint8 r, Uint8 g, Uint8 b,
slouken@2275
   387
                                           Uint8 a);
slouken@2275
   388
slouken@2275
   389
/**
slouken@3483
   390
 *  \brief Get the RGB components from a pixel of the specified format.
slouken@3407
   391
 *  
slouken@3407
   392
 *  \sa SDL_GetRGBA
slouken@2275
   393
 */
slouken@2275
   394
extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel,
slouken@2275
   395
                                        const SDL_PixelFormat * format,
slouken@2275
   396
                                        Uint8 * r, Uint8 * g, Uint8 * b);
slouken@2275
   397
slouken@2275
   398
/**
slouken@3483
   399
 *  \brief Get the RGBA components from a pixel of the specified format.
slouken@3407
   400
 *  
slouken@3407
   401
 *  \sa SDL_GetRGB
slouken@2275
   402
 */
slouken@2275
   403
extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel,
slouken@2275
   404
                                         const SDL_PixelFormat * format,
slouken@2275
   405
                                         Uint8 * r, Uint8 * g, Uint8 * b,
slouken@2275
   406
                                         Uint8 * a);
slouken@2275
   407
slouken@1895
   408
/* Ends C function definitions when using C++ */
slouken@1895
   409
#ifdef __cplusplus
slouken@1895
   410
/* *INDENT-OFF* */
slouken@1895
   411
}
slouken@1895
   412
/* *INDENT-ON* */
slouken@1895
   413
#endif
slouken@1895
   414
#include "close_code.h"
slouken@1895
   415
slouken@1895
   416
#endif /* _SDL_pixels_h */
slouken@1895
   417
slouken@1895
   418
/* vi: set ts=4 sw=4 expandtab: */