include/SDL_pixels.h
author Sam Lantinga <slouken@libsdl.org>
Mon, 29 May 2006 04:04:35 +0000
branchSDL-1.3
changeset 1668 4da1ee79c9af
parent 1662 782fd950bd46
child 1675 d33dcfc3fde7
permissions -rw-r--r--
more tweaking indent options
     1 /*
     2     SDL - Simple DirectMedia Layer
     3     Copyright (C) 1997-2006 Sam Lantinga
     4 
     5     This library is free software; you can redistribute it and/or
     6     modify it under the terms of the GNU Lesser General Public
     7     License as published by the Free Software Foundation; either
     8     version 2.1 of the License, or (at your option) any later version.
     9 
    10     This library is distributed in the hope that it will be useful,
    11     but WITHOUT ANY WARRANTY; without even the implied warranty of
    12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13     Lesser General Public License for more details.
    14 
    15     You should have received a copy of the GNU Lesser General Public
    16     License along with this library; if not, write to the Free Software
    17     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    18 
    19     Sam Lantinga
    20     slouken@libsdl.org
    21 */
    22 
    23 /**
    24  * \file SDL_pixels.h
    25  *
    26  * Header for the enumerated pixel format definitions
    27  */
    28 
    29 #ifndef _SDL_pixels_h
    30 #define _SDL_pixels_h
    31 
    32 #include "begin_code.h"
    33 /* Set up for C function definitions, even when using C++ */
    34 #ifdef __cplusplus
    35 /* *INDENT-OFF* */
    36 extern "C" {
    37 /* *INDENT-ON* */
    38 #endif
    39 
    40 enum
    41 {                               /* Pixel type */
    42     SDL_PixelType_Unknown,
    43     SDL_PixelType_Index1,
    44     SDL_PixelType_Index4,
    45     SDL_PixelType_Index8,
    46     SDL_PixelType_Packed8,
    47     SDL_PixelType_Packed16,
    48     SDL_PixelType_Packed32,
    49     SDL_PixelType_ArrayU8,
    50     SDL_PixelType_ArrayU16,
    51     SDL_PixelType_ArrayU32,
    52     SDL_PixelType_ArrayF16,
    53     SDL_PixelType_ArrayF32,
    54 };
    55 
    56 enum
    57 {                               /* bitmap pixel order, high bit -> low bit */
    58     SDL_BitmapOrder_None,
    59     SDL_BitmapOrder_4321,
    60     SDL_BitmapOrder_1234,
    61 };
    62 enum
    63 {                               /* packed component order, high bit -> low bit */
    64     SDL_PackedOrder_None,
    65     SDL_PackedOrder_XRGB,
    66     SDL_PackedOrder_RGBX,
    67     SDL_PackedOrder_ARGB,
    68     SDL_PackedOrder_RGBA,
    69     SDL_PackedOrder_XBGR,
    70     SDL_PackedOrder_BGRX,
    71     SDL_PackedOrder_ABGR,
    72     SDL_PackedOrder_BGRA,
    73 };
    74 enum
    75 {                               /* array component order, low byte -> high byte */
    76     SDL_ArrayOrder_None,
    77     SDL_ArrayOrder_RGB,
    78     SDL_ArrayOrder_RGBA,
    79     SDL_ArrayOrder_ARGB,
    80     SDL_ArrayOrder_BGR,
    81     SDL_ArrayOrder_BGRA,
    82     SDL_ArrayOrder_ABGR,
    83 };
    84 
    85 enum
    86 {                               /* Packed component layout */
    87     SDL_PackedLayout_None,
    88     SDL_PackedLayout_332,
    89     SDL_PackedLayout_4444,
    90     SDL_PackedLayout_1555,
    91     SDL_PackedLayout_5551,
    92     SDL_PackedLayout_565,
    93     SDL_PackedLayout_8888,
    94     SDL_PackedLayout_2101010,
    95     SDL_PackedLayout_1010102,
    96 };
    97 
    98 #define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \
    99     ((1 << 31) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \
   100      ((bits) << 8) | ((bytes) << 0))
   101 
   102 #define SDL_PIXELTYPE(X)	(((X) >> 24) & 0x0F)
   103 #define SDL_PIXELORDER(X)	(((X) >> 20) & 0x0F)
   104 #define SDL_PIXELLAYOUT(X)	(((X) >> 16) & 0x0F)
   105 #define SDL_BITSPERPIXEL(X)	(((X) >> 8) & 0xFF)
   106 #define SDL_BYTESPERPIXEL(X)	(((X) >> 0) & 0xFF)
   107 
   108 enum
   109 {
   110     SDL_PixelFormat_Unknown,
   111     SDL_PixelFormat_Index1LSB =
   112         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Index1, SDL_BitmapOrder_1234, 0,
   113                                1, 0),
   114     SDL_PixelFormat_Index1MSB =
   115         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Index1, SDL_BitmapOrder_4321, 0,
   116                                1, 0),
   117     SDL_PixelFormat_Index4LSB =
   118         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Index4, SDL_BitmapOrder_1234, 0,
   119                                2, 0),
   120     SDL_PixelFormat_Index4MSB =
   121         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Index4, SDL_BitmapOrder_4321, 0,
   122                                2, 0),
   123     SDL_PixelFormat_Index8 =
   124         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Index8, 0, 0, 8, 1),
   125     SDL_PixelFormat_RGB332 =
   126         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Packed8, SDL_PackedOrder_XRGB,
   127                                SDL_PackedLayout_332, 8, 1),
   128     SDL_PixelFormat_RGB444 =
   129         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Packed16, SDL_PackedOrder_XRGB,
   130                                SDL_PackedLayout_4444, 12, 2),
   131     SDL_PixelFormat_RGB555 =
   132         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Packed16, SDL_PackedOrder_XRGB,
   133                                SDL_PackedLayout_1555, 15, 2),
   134     SDL_PixelFormat_ARGB4444 =
   135         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Packed16, SDL_PackedOrder_ARGB,
   136                                SDL_PackedLayout_4444, 16, 2),
   137     SDL_PixelFormat_ARGB1555 =
   138         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Packed16, SDL_PackedOrder_ARGB,
   139                                SDL_PackedLayout_1555, 16, 2),
   140     SDL_PixelFormat_RGB565 =
   141         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Packed16, SDL_PackedOrder_XRGB,
   142                                SDL_PackedLayout_565, 16, 2),
   143     SDL_PixelFormat_RGB24 =
   144         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_ArrayU8, SDL_ArrayOrder_RGB, 0,
   145                                24, 3),
   146     SDL_PixelFormat_BGR24 =
   147         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_ArrayU8, SDL_ArrayOrder_BGR, 0,
   148                                24, 3),
   149     SDL_PixelFormat_RGB888 =
   150         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Packed32, SDL_PackedOrder_XRGB,
   151                                SDL_PackedLayout_8888, 24, 4),
   152     SDL_PixelFormat_BGR888 =
   153         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Packed32, SDL_PackedOrder_XBGR,
   154                                SDL_PackedLayout_8888, 24, 4),
   155     SDL_PixelFormat_ARGB8888 =
   156         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Packed32, SDL_PackedOrder_ARGB,
   157                                SDL_PackedLayout_8888, 32, 4),
   158     SDL_PixelFormat_RGBA8888 =
   159         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Packed32, SDL_PackedOrder_RGBA,
   160                                SDL_PackedLayout_8888, 32, 4),
   161     SDL_PixelFormat_ABGR8888 =
   162         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Packed32, SDL_PackedOrder_ABGR,
   163                                SDL_PackedLayout_8888, 32, 4),
   164     SDL_PixelFormat_BGRA8888 =
   165         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Packed32, SDL_PackedOrder_BGRA,
   166                                SDL_PackedLayout_8888, 32, 4),
   167     SDL_PixelFormat_ARGB2101010 =
   168         SDL_DEFINE_PIXELFORMAT(SDL_PixelType_Packed32, SDL_PackedOrder_ARGB,
   169                                SDL_PackedLayout_2101010, 32, 4),
   170 };
   171 
   172 typedef struct SDL_Color
   173 {
   174     Uint8 r;
   175     Uint8 g;
   176     Uint8 b;
   177     Uint8 unused;
   178 } SDL_Color;
   179 #define SDL_Colour SDL_Color
   180 
   181 typedef struct SDL_Palette
   182 {
   183     int ncolors;
   184     SDL_Color *colors;
   185 } SDL_Palette;
   186 
   187 /* Everything in the pixel format structure is read-only */
   188 typedef struct SDL_PixelFormat
   189 {
   190     SDL_Palette *palette;
   191     Uint8 BitsPerPixel;
   192     Uint8 BytesPerPixel;
   193     Uint8 Rloss;
   194     Uint8 Gloss;
   195     Uint8 Bloss;
   196     Uint8 Aloss;
   197     Uint8 Rshift;
   198     Uint8 Gshift;
   199     Uint8 Bshift;
   200     Uint8 Ashift;
   201     Uint32 Rmask;
   202     Uint32 Gmask;
   203     Uint32 Bmask;
   204     Uint32 Amask;
   205 
   206     /* RGB color key information */
   207     Uint32 colorkey;
   208     /* Alpha value information (per-surface alpha) */
   209     Uint8 alpha;
   210 } SDL_PixelFormat;
   211 
   212 /*
   213  * Convert one of the enumerated formats above to a bpp and RGBA masks.
   214  * Returns SDL_TRUE, or SDL_FALSE if the conversion wasn't possible.
   215  */
   216 extern DECLSPEC SDL_bool SDL_PixelFormatEnumToMasks(Uint32 format, int *bpp,
   217                                                     Uint32 * Rmask,
   218                                                     Uint32 * Gmask,
   219                                                     Uint32 * Bmask,
   220                                                     Uint32 * Amask);
   221 
   222 /*
   223  * Convert a bpp and RGBA masks to one of the enumerated formats above.
   224  * Returns SDL_PixelFormat_Unknown if the conversion wasn't possible.
   225  */
   226 extern DECLSPEC Uint32 SDL_MasksToPixelFormatEnum(int bpp, Uint32 Rmask,
   227                                                   Uint32 Gmask, Uint32 Bmask,
   228                                                   Uint32 Amask);
   229 
   230 /* Ends C function definitions when using C++ */
   231 #ifdef __cplusplus
   232 /* *INDENT-OFF* */
   233 }
   234 /* *INDENT-ON* */
   235 #endif
   236 #include "close_code.h"
   237 
   238 #endif /* _SDL_pixels_h */
   239 
   240 /* vi: set ts=4 sw=4 expandtab: */