Path: blob/main/system/include/SDL/SDL_pixels.h
6169 views
/*1Simple DirectMedia Layer2Copyright (C) 1997-2011 Sam Lantinga <[email protected]>34This software is provided 'as-is', without any express or implied5warranty. In no event will the authors be held liable for any damages6arising from the use of this software.78Permission is granted to anyone to use this software for any purpose,9including commercial applications, and to alter it and redistribute it10freely, subject to the following restrictions:11121. The origin of this software must not be misrepresented; you must not13claim that you wrote the original software. If you use this software14in a product, an acknowledgment in the product documentation would be15appreciated but is not required.162. Altered source versions must be plainly marked as such, and must not be17misrepresented as being the original software.183. This notice may not be removed or altered from any source distribution.19*/2021/**22* \file SDL_pixels.h23*24* Header for the enumerated pixel format definitions.25*/2627#ifndef _SDL_pixels_h28#define _SDL_pixels_h2930/* XXX Emscripten: add missing header */31#include "SDL_stdinc.h"3233#include "begin_code.h"34/* Set up for C function definitions, even when using C++ */35#ifdef __cplusplus36/* *INDENT-OFF* */37extern "C" {38/* *INDENT-ON* */39#endif4041/**42* \name Transparency definitions43*44* These define alpha as the opacity of a surface.45*/46/*@{*/47#define SDL_ALPHA_OPAQUE 25548#define SDL_ALPHA_TRANSPARENT 049/*@}*/5051/** Pixel type. */52enum53{54SDL_PIXELTYPE_UNKNOWN,55SDL_PIXELTYPE_INDEX1,56SDL_PIXELTYPE_INDEX4,57SDL_PIXELTYPE_INDEX8,58SDL_PIXELTYPE_PACKED8,59SDL_PIXELTYPE_PACKED16,60SDL_PIXELTYPE_PACKED32,61SDL_PIXELTYPE_ARRAYU8,62SDL_PIXELTYPE_ARRAYU16,63SDL_PIXELTYPE_ARRAYU32,64SDL_PIXELTYPE_ARRAYF16,65SDL_PIXELTYPE_ARRAYF3266};6768/** Bitmap pixel order, high bit -> low bit. */69enum70{71SDL_BITMAPORDER_NONE,72SDL_BITMAPORDER_4321,73SDL_BITMAPORDER_123474};7576/** Packed component order, high bit -> low bit. */77enum78{79SDL_PACKEDORDER_NONE,80SDL_PACKEDORDER_XRGB,81SDL_PACKEDORDER_RGBX,82SDL_PACKEDORDER_ARGB,83SDL_PACKEDORDER_RGBA,84SDL_PACKEDORDER_XBGR,85SDL_PACKEDORDER_BGRX,86SDL_PACKEDORDER_ABGR,87SDL_PACKEDORDER_BGRA88};8990/** Array component order, low byte -> high byte. */91enum92{93SDL_ARRAYORDER_NONE,94SDL_ARRAYORDER_RGB,95SDL_ARRAYORDER_RGBA,96SDL_ARRAYORDER_ARGB,97SDL_ARRAYORDER_BGR,98SDL_ARRAYORDER_BGRA,99SDL_ARRAYORDER_ABGR100};101102/** Packed component layout. */103enum104{105SDL_PACKEDLAYOUT_NONE,106SDL_PACKEDLAYOUT_332,107SDL_PACKEDLAYOUT_4444,108SDL_PACKEDLAYOUT_1555,109SDL_PACKEDLAYOUT_5551,110SDL_PACKEDLAYOUT_565,111SDL_PACKEDLAYOUT_8888,112SDL_PACKEDLAYOUT_2101010,113SDL_PACKEDLAYOUT_1010102114};115116#define SDL_DEFINE_PIXELFOURCC(A, B, C, D) SDL_FOURCC(A, B, C, D)117118#define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \119((1 << 31) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \120((bits) << 8) | ((bytes) << 0))121122#define SDL_PIXELTYPE(X) (((X) >> 24) & 0x0F)123#define SDL_PIXELORDER(X) (((X) >> 20) & 0x0F)124#define SDL_PIXELLAYOUT(X) (((X) >> 16) & 0x0F)125#define SDL_BITSPERPIXEL(X) (((X) >> 8) & 0xFF)126#define SDL_BYTESPERPIXEL(X) \127(SDL_ISPIXELFORMAT_FOURCC(X) ? \128((((X) == SDL_PIXELFORMAT_YUY2) || \129((X) == SDL_PIXELFORMAT_UYVY) || \130((X) == SDL_PIXELFORMAT_YVYU)) ? 2 : 1) : (((X) >> 0) & 0xFF))131132#define SDL_ISPIXELFORMAT_INDEXED(format) \133(!SDL_ISPIXELFORMAT_FOURCC(format) && \134((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \135(SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \136(SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8)))137138#define SDL_ISPIXELFORMAT_ALPHA(format) \139(!SDL_ISPIXELFORMAT_FOURCC(format) && \140((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \141(SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \142(SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \143(SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA)))144145#define SDL_ISPIXELFORMAT_FOURCC(format) \146((format) && !((format) & 0x80000000))147148/* Note: If you modify this list, update SDL_GetPixelFormatName() */149enum150{151SDL_PIXELFORMAT_UNKNOWN,152SDL_PIXELFORMAT_INDEX1LSB =153SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0,1541, 0),155SDL_PIXELFORMAT_INDEX1MSB =156SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0,1571, 0),158SDL_PIXELFORMAT_INDEX4LSB =159SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0,1604, 0),161SDL_PIXELFORMAT_INDEX4MSB =162SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0,1634, 0),164SDL_PIXELFORMAT_INDEX8 =165SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1),166SDL_PIXELFORMAT_RGB332 =167SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB,168SDL_PACKEDLAYOUT_332, 8, 1),169SDL_PIXELFORMAT_RGB444 =170SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB,171SDL_PACKEDLAYOUT_4444, 12, 2),172SDL_PIXELFORMAT_RGB555 =173SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB,174SDL_PACKEDLAYOUT_1555, 15, 2),175SDL_PIXELFORMAT_BGR555 =176SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR,177SDL_PACKEDLAYOUT_1555, 15, 2),178SDL_PIXELFORMAT_ARGB4444 =179SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB,180SDL_PACKEDLAYOUT_4444, 16, 2),181SDL_PIXELFORMAT_RGBA4444 =182SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA,183SDL_PACKEDLAYOUT_4444, 16, 2),184SDL_PIXELFORMAT_ABGR4444 =185SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR,186SDL_PACKEDLAYOUT_4444, 16, 2),187SDL_PIXELFORMAT_BGRA4444 =188SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA,189SDL_PACKEDLAYOUT_4444, 16, 2),190SDL_PIXELFORMAT_ARGB1555 =191SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB,192SDL_PACKEDLAYOUT_1555, 16, 2),193SDL_PIXELFORMAT_RGBA5551 =194SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA,195SDL_PACKEDLAYOUT_5551, 16, 2),196SDL_PIXELFORMAT_ABGR1555 =197SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR,198SDL_PACKEDLAYOUT_1555, 16, 2),199SDL_PIXELFORMAT_BGRA5551 =200SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA,201SDL_PACKEDLAYOUT_5551, 16, 2),202SDL_PIXELFORMAT_RGB565 =203SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB,204SDL_PACKEDLAYOUT_565, 16, 2),205SDL_PIXELFORMAT_BGR565 =206SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR,207SDL_PACKEDLAYOUT_565, 16, 2),208SDL_PIXELFORMAT_RGB24 =209SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0,21024, 3),211SDL_PIXELFORMAT_BGR24 =212SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0,21324, 3),214SDL_PIXELFORMAT_RGB888 =215SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB,216SDL_PACKEDLAYOUT_8888, 24, 4),217SDL_PIXELFORMAT_BGR888 =218SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR,219SDL_PACKEDLAYOUT_8888, 24, 4),220SDL_PIXELFORMAT_ARGB8888 =221SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB,222SDL_PACKEDLAYOUT_8888, 32, 4),223SDL_PIXELFORMAT_RGBA8888 =224SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA,225SDL_PACKEDLAYOUT_8888, 32, 4),226SDL_PIXELFORMAT_ABGR8888 =227SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR,228SDL_PACKEDLAYOUT_8888, 32, 4),229SDL_PIXELFORMAT_BGRA8888 =230SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA,231SDL_PACKEDLAYOUT_8888, 32, 4),232SDL_PIXELFORMAT_ARGB2101010 =233SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB,234SDL_PACKEDLAYOUT_2101010, 32, 4),235236SDL_PIXELFORMAT_YV12 = /**< Planar mode: Y + V + U (3 planes) */237SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'),238SDL_PIXELFORMAT_IYUV = /**< Planar mode: Y + U + V (3 planes) */239SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'),240SDL_PIXELFORMAT_YUY2 = /**< Packed mode: Y0+U0+Y1+V0 (1 plane) */241SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'),242SDL_PIXELFORMAT_UYVY = /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */243SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'),244SDL_PIXELFORMAT_YVYU = /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */245SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U')246};247248typedef struct SDL_Color249{250Uint8 r;251Uint8 g;252Uint8 b;253Uint8 unused;254} SDL_Color;255#define SDL_Colour SDL_Color256257typedef struct SDL_Palette258{259int ncolors;260SDL_Color *colors;261Uint32 version;262int refcount;263} SDL_Palette;264265/**266* \note Everything in the pixel format structure is read-only.267*/268typedef struct SDL_PixelFormat269{270Uint32 format;271SDL_Palette *palette;272Uint8 BitsPerPixel;273Uint8 BytesPerPixel;274Uint8 padding[2];275Uint32 Rmask;276Uint32 Gmask;277Uint32 Bmask;278Uint32 Amask;279Uint8 Rloss;280Uint8 Gloss;281Uint8 Bloss;282Uint8 Aloss;283Uint8 Rshift;284Uint8 Gshift;285Uint8 Bshift;286Uint8 Ashift;287int refcount;288struct SDL_PixelFormat *next;289} SDL_PixelFormat;290291/**292* \brief Get the human readable name of a pixel format293*/294extern DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(Uint32 format);295296/**297* \brief Convert one of the enumerated pixel formats to a bpp and RGBA masks.298*299* \return SDL_TRUE, or SDL_FALSE if the conversion wasn't possible.300*301* \sa SDL_MasksToPixelFormatEnum()302*/303extern DECLSPEC SDL_bool SDLCALL SDL_PixelFormatEnumToMasks(Uint32 format,304int *bpp,305Uint32 * Rmask,306Uint32 * Gmask,307Uint32 * Bmask,308Uint32 * Amask);309310/**311* \brief Convert a bpp and RGBA masks to an enumerated pixel format.312*313* \return The pixel format, or ::SDL_PIXELFORMAT_UNKNOWN if the conversion314* wasn't possible.315*316* \sa SDL_PixelFormatEnumToMasks()317*/318extern DECLSPEC Uint32 SDLCALL SDL_MasksToPixelFormatEnum(int bpp,319Uint32 Rmask,320Uint32 Gmask,321Uint32 Bmask,322Uint32 Amask);323324/**325* \brief Create an SDL_PixelFormat structure from a pixel format enum.326*/327extern DECLSPEC SDL_PixelFormat * SDLCALL SDL_AllocFormat(Uint32 pixel_format);328329/**330* \brief Free an SDL_PixelFormat structure.331*/332extern DECLSPEC void SDLCALL SDL_FreeFormat(SDL_PixelFormat *format);333334/**335* \brief Create a palette structure with the specified number of color336* entries.337*338* \return A new palette, or NULL if there wasn't enough memory.339*340* \note The palette entries are initialized to white.341*342* \sa SDL_FreePalette()343*/344extern DECLSPEC SDL_Palette *SDLCALL SDL_AllocPalette(int ncolors);345346/**347* \brief Set the palette for a pixel format structure.348*/349extern DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * format,350SDL_Palette *palette);351352/**353* \brief Set a range of colors in a palette.354*355* \param palette The palette to modify.356* \param colors An array of colors to copy into the palette.357* \param firstcolor The index of the first palette entry to modify.358* \param ncolors The number of entries to modify.359*360* \return 0 on success, or -1 if not all of the colors could be set.361*/362extern DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette * palette,363const SDL_Color * colors,364int firstcolor, int ncolors);365366/**367* \brief Free a palette created with SDL_AllocPalette().368*369* \sa SDL_AllocPalette()370*/371extern DECLSPEC void SDLCALL SDL_FreePalette(SDL_Palette * palette);372373/**374* \brief Maps an RGB triple to an opaque pixel value for a given pixel format.375*376* \sa SDL_MapRGBA377*/378extern DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format,379Uint8 r, Uint8 g, Uint8 b);380381/**382* \brief Maps an RGBA quadruple to a pixel value for a given pixel format.383*384* \sa SDL_MapRGB385*/386extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format,387Uint8 r, Uint8 g, Uint8 b,388Uint8 a);389390/**391* \brief Get the RGB components from a pixel of the specified format.392*393* \sa SDL_GetRGBA394*/395extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel,396const SDL_PixelFormat * format,397Uint8 * r, Uint8 * g, Uint8 * b);398399/**400* \brief Get the RGBA components from a pixel of the specified format.401*402* \sa SDL_GetRGB403*/404extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel,405const SDL_PixelFormat * format,406Uint8 * r, Uint8 * g, Uint8 * b,407Uint8 * a);408409/**410* \brief Calculate a 256 entry gamma ramp for a gamma value.411*/412extern DECLSPEC void SDLCALL SDL_CalculateGammaRamp(float gamma, Uint16 * ramp);413414415/* Ends C function definitions when using C++ */416#ifdef __cplusplus417/* *INDENT-OFF* */418}419/* *INDENT-ON* */420#endif421#include "close_code.h"422423#endif /* _SDL_pixels_h */424425/* vi: set ts=4 sw=4 expandtab: */426427428