module sdl3::sdl; const char ALPHA_OPAQUE = 255; const char ALPHA_TRANSPARENT = 0; const float ALPHA_OPAQUE_FLOAT = 1.0; const float ALPHA_TRANSPARENT_FLOAT = 0.0; enum PixelType : inline CInt { PIXELTYPE_UNKNOWN, PIXELTYPE_INDEX1, PIXELTYPE_INDEX4, PIXELTYPE_INDEX8, PIXELTYPE_PACKED8, PIXELTYPE_PACKED16, PIXELTYPE_PACKED32, PIXELTYPE_ARRAYU8, PIXELTYPE_ARRAYU16, PIXELTYPE_ARRAYU32, PIXELTYPE_ARRAYF16, PIXELTYPE_ARRAYF32, PIXELTYPE_INDEX2 } enum SDL_BitmapOrder : inline CInt { BITMAPORDER_NONE, BITMAPORDER_4321, BITMAPORDER_1234 } enum PackedOrder : inline CInt { PACKEDORDER_NONE, PACKEDORDER_XRGB, PACKEDORDER_RGBX, PACKEDORDER_ARGB, PACKEDORDER_RGBA, PACKEDORDER_XBGR, PACKEDORDER_BGRX, PACKEDORDER_ABGR, PACKEDORDER_BGRA } enum ArrayOrder : inline CInt { ARRAYORDER_NONE, ARRAYORDER_RGB, ARRAYORDER_RGBA, ARRAYORDER_ARGB, ARRAYORDER_BGR, ARRAYORDER_BGRA, ARRAYORDER_ABGR } enum PackedLayout : inline CInt { PACKEDLAYOUT_NONE, PACKEDLAYOUT_332, PACKEDLAYOUT_4444, PACKEDLAYOUT_1555, PACKEDLAYOUT_5551, PACKEDLAYOUT_565, PACKEDLAYOUT_8888, PACKEDLAYOUT_2101010, PACKEDLAYOUT_1010102 } // TODO: a bunch of pixleformat related macros here i don't want to bother implementing typedef PixelFormat = CInt; const PixelFormat PIXELFORMAT_UNKNOWN @builtin = 0; const PixelFormat PIXELFORMAT_INDEX1LSB @builtin = 0x11100100; const PixelFormat PIXELFORMAT_INDEX1MSB @builtin = 0x11200100; const PixelFormat PIXELFORMAT_INDEX2LSB @builtin = 0x1c100200; const PixelFormat PIXELFORMAT_INDEX2MSB @builtin = 0x1c200200; const PixelFormat PIXELFORMAT_INDEX4LSB @builtin = 0x12100400; const PixelFormat PIXELFORMAT_INDEX4MSB @builtin = 0x12200400; const PixelFormat PIXELFORMAT_INDEX8 @builtin = 0x13000801; const PixelFormat PIXELFORMAT_RGB332 @builtin = 0x14110801; const PixelFormat PIXELFORMAT_XRGB4444 @builtin = 0x15120c02; const PixelFormat PIXELFORMAT_XBGR4444 @builtin = 0x15520c02; const PixelFormat PIXELFORMAT_XRGB1555 @builtin = 0x15130f02; const PixelFormat PIXELFORMAT_XBGR1555 @builtin = 0x15530f02; const PixelFormat PIXELFORMAT_ARGB4444 @builtin = 0x15321002; const PixelFormat PIXELFORMAT_RGBA4444 @builtin = 0x15421002; const PixelFormat PIXELFORMAT_ABGR4444 @builtin = 0x15721002; const PixelFormat PIXELFORMAT_BGRA4444 @builtin = 0x15821002; const PixelFormat PIXELFORMAT_ARGB1555 @builtin = 0x15331002; const PixelFormat PIXELFORMAT_RGBA5551 @builtin = 0x15441002; const PixelFormat PIXELFORMAT_ABGR1555 @builtin = 0x15731002; const PixelFormat PIXELFORMAT_BGRA5551 @builtin = 0x15841002; const PixelFormat PIXELFORMAT_RGB565 @builtin = 0x15151002; const PixelFormat PIXELFORMAT_BGR565 @builtin = 0x15551002; const PixelFormat PIXELFORMAT_RGB24 @builtin = 0x17101803; const PixelFormat PIXELFORMAT_BGR24 @builtin = 0x17401803; const PixelFormat PIXELFORMAT_XRGB8888 @builtin = 0x16161804; const PixelFormat PIXELFORMAT_RGBX8888 @builtin = 0x16261804; const PixelFormat PIXELFORMAT_XBGR8888 @builtin = 0x16561804; const PixelFormat PIXELFORMAT_BGRX8888 @builtin = 0x16661804; const PixelFormat PIXELFORMAT_ARGB8888 @builtin = 0x16362004; const PixelFormat PIXELFORMAT_RGBA8888 @builtin = 0x16462004; const PixelFormat PIXELFORMAT_ABGR8888 @builtin = 0x16762004; const PixelFormat PIXELFORMAT_BGRA8888 @builtin = 0x16862004; const PixelFormat PIXELFORMAT_XRGB2101010 @builtin = 0x16172004; const PixelFormat PIXELFORMAT_XBGR2101010 @builtin = 0x16572004; const PixelFormat PIXELFORMAT_ARGB2101010 @builtin = 0x16372004; const PixelFormat PIXELFORMAT_ABGR2101010 @builtin = 0x16772004; const PixelFormat PIXELFORMAT_RGB48 @builtin = 0x18103006; const PixelFormat PIXELFORMAT_BGR48 @builtin = 0x18403006; const PixelFormat PIXELFORMAT_RGBA64 @builtin = 0x18204008; const PixelFormat PIXELFORMAT_ARGB64 @builtin = 0x18304008; const PixelFormat PIXELFORMAT_BGRA64 @builtin = 0x18504008; const PixelFormat PIXELFORMAT_ABGR64 @builtin = 0x18604008; const PixelFormat PIXELFORMAT_RGB48_FLOAT @builtin = 0x1a103006; const PixelFormat PIXELFORMAT_BGR48_FLOAT @builtin = 0x1a403006; const PixelFormat PIXELFORMAT_RGBA64_FLOAT @builtin = 0x1a204008; const PixelFormat PIXELFORMAT_ARGB64_FLOAT @builtin = 0x1a304008; const PixelFormat PIXELFORMAT_BGRA64_FLOAT @builtin = 0x1a504008; const PixelFormat PIXELFORMAT_ABGR64_FLOAT @builtin = 0x1a604008; const PixelFormat PIXELFORMAT_RGB96_FLOAT @builtin = 0x1b10600c; const PixelFormat PIXELFORMAT_BGR96_FLOAT @builtin = 0x1b40600c; const PixelFormat PIXELFORMAT_RGBA128_FLOAT @builtin = 0x1b208010; const PixelFormat PIXELFORMAT_ARGB128_FLOAT @builtin = 0x1b308010; const PixelFormat PIXELFORMAT_BGRA128_FLOAT @builtin = 0x1b508010; const PixelFormat PIXELFORMAT_ABGR128_FLOAT @builtin = 0x1b608010; const PixelFormat PIXELFORMAT_YV12 @builtin = 0x32315659; const PixelFormat PIXELFORMAT_IYUV @builtin = 0x56555949; const PixelFormat PIXELFORMAT_YUY2 @builtin = 0x32595559; const PixelFormat PIXELFORMAT_UYVY @builtin = 0x59565955; const PixelFormat PIXELFORMAT_YVYU @builtin = 0x55595659; const PixelFormat PIXELFORMAT_NV12 @builtin = 0x3231564e; const PixelFormat PIXELFORMAT_NV21 @builtin = 0x3132564e; const PixelFormat PIXELFORMAT_P010 @builtin = 0x30313050; const PixelFormat PIXELFORMAT_EXTERNAL_OES @builtin = 0x2053454f; const PixelFormat PIXELFORMAT_MJPG @builtin = 0x47504a4d; // FIXME: this only works in little-endian systems const PixelFormat PIXELFORMAT_RGBA32 @builtin = PIXELFORMAT_ABGR8888; const PixelFormat PIXELFORMAT_ARGB32 @builtin = PIXELFORMAT_BGRA8888; const PixelFormat PIXELFORMAT_BGRA32 @builtin = PIXELFORMAT_ARGB8888; const PixelFormat PIXELFORMAT_ABGR32 @builtin = PIXELFORMAT_RGBA8888; const PixelFormat PIXELFORMAT_RGBX32 @builtin = PIXELFORMAT_XBGR8888; const PixelFormat PIXELFORMAT_XRGB32 @builtin = PIXELFORMAT_BGRX8888; const PixelFormat PIXELFORMAT_BGRX32 @builtin = PIXELFORMAT_XRGB8888; const PixelFormat PIXELFORMAT_XBGR32 @builtin = PIXELFORMAT_RGBX8888; enum ColorType : inline CInt { COLOR_TYPE_UNKNOWN, COLOR_TYPE_RGB, COLOR_TYPE_YCBCR } enum ColorRange : inline CInt { COLOR_RANGE_UNKNOWN, COLOR_RANGE_LIMITED, COLOR_RANGE_FULL } typedef ColorPrimaries = CInt; const ColorPrimaries COLOR_PRIMARIES_UNKNOWN @builtin = 0; const ColorPrimaries COLOR_PRIMARIES_BT709 @builtin = 1; const ColorPrimaries COLOR_PRIMARIES_UNSPECIFIED @builtin = 2; const ColorPrimaries COLOR_PRIMARIES_BT470M @builtin = 4; const ColorPrimaries COLOR_PRIMARIES_BT470BG @builtin = 5; const ColorPrimaries COLOR_PRIMARIES_BT601 @builtin = 6; const ColorPrimaries COLOR_PRIMARIES_SMPTE240 @builtin = 7; const ColorPrimaries COLOR_PRIMARIES_GENERIC_FILM @builtin = 8; const ColorPrimaries COLOR_PRIMARIES_BT2020 @builtin = 9; const ColorPrimaries COLOR_PRIMARIES_XYZ @builtin = 10; const ColorPrimaries COLOR_PRIMARIES_SMPTE431 @builtin = 11; const ColorPrimaries COLOR_PRIMARIES_SMPTE432 @builtin = 12; const ColorPrimaries COLOR_PRIMARIES_EBU3213 @builtin = 22; const ColorPrimaries COLOR_PRIMARIES_CUSTOM @builtin = 31; typedef TransferCharacteristics = CInt; const TransferCharacteristics TRANSFER_CHARACTERISTICS_UNKNOWN @builtin = 0; const TransferCharacteristics TRANSFER_CHARACTERISTICS_BT709 @builtin = 1; const TransferCharacteristics TRANSFER_CHARACTERISTICS_UNSPECIFIED @builtin = 2; const TransferCharacteristics TRANSFER_CHARACTERISTICS_GAMMA22 @builtin = 4; const TransferCharacteristics TRANSFER_CHARACTERISTICS_GAMMA28 @builtin = 5; const TransferCharacteristics TRANSFER_CHARACTERISTICS_BT601 @builtin = 6; const TransferCharacteristics TRANSFER_CHARACTERISTICS_SMPTE240 @builtin = 7; const TransferCharacteristics TRANSFER_CHARACTERISTICS_LINEAR @builtin = 8; const TransferCharacteristics TRANSFER_CHARACTERISTICS_LOG100 @builtin = 9; const TransferCharacteristics TRANSFER_CHARACTERISTICS_LOG100_SQRT10 @builtin = 10; const TransferCharacteristics TRANSFER_CHARACTERISTICS_IEC61966 @builtin = 11; const TransferCharacteristics TRANSFER_CHARACTERISTICS_BT1361 @builtin = 12; const TransferCharacteristics TRANSFER_CHARACTERISTICS_SRGB @builtin = 13; const TransferCharacteristics TRANSFER_CHARACTERISTICS_BT2020_10BIT @builtin = 14; const TransferCharacteristics TRANSFER_CHARACTERISTICS_BT2020_12BIT @builtin = 15; const TransferCharacteristics TRANSFER_CHARACTERISTICS_PQ @builtin = 16; const TransferCharacteristics TRANSFER_CHARACTERISTICS_SMPTE428 @builtin = 17; const TransferCharacteristics TRANSFER_CHARACTERISTICS_HLG @builtin = 18; const TransferCharacteristics TRANSFER_CHARACTERISTICS_CUSTOM @builtin = 31; typedef MatrixCoefficients = CInt; const MatrixCoefficients MATRIX_COEFFICIENTS_IDENTITY @builtin = 0; const MatrixCoefficients MATRIX_COEFFICIENTS_BT709 @builtin = 1; const MatrixCoefficients MATRIX_COEFFICIENTS_UNSPECIFIED @builtin = 2; const MatrixCoefficients MATRIX_COEFFICIENTS_FCC @builtin = 4; const MatrixCoefficients MATRIX_COEFFICIENTS_BT470BG @builtin = 5; const MatrixCoefficients MATRIX_COEFFICIENTS_BT601 @builtin = 6; const MatrixCoefficients MATRIX_COEFFICIENTS_SMPTE240 @builtin = 7; const MatrixCoefficients MATRIX_COEFFICIENTS_YCGCO @builtin = 8; const MatrixCoefficients MATRIX_COEFFICIENTS_BT2020_NCL @builtin = 9; const MatrixCoefficients MATRIX_COEFFICIENTS_BT2020_CL @builtin = 10; const MatrixCoefficients MATRIX_COEFFICIENTS_SMPTE2085 @builtin = 11; const MatrixCoefficients MATRIX_COEFFICIENTS_CHROMA_DERIVED_NCL @builtin = 12; const MatrixCoefficients MATRIX_COEFFICIENTS_CHROMA_DERIVED_CL @builtin = 13; const MatrixCoefficients MATRIX_COEFFICIENTS_ICTCP @builtin = 14; const MatrixCoefficients MATRIX_COEFFICIENTS_CUSTOM @builtin = 31; typedef ChromaLocation = CInt; const ChromaLocation CHROMA_LOCATION_NONE @builtin = 0; const ChromaLocation CHROMA_LOCATION_LEFT @builtin = 1; const ChromaLocation CHROMA_LOCATION_CENTER @builtin = 2; const ChromaLocation CHROMA_LOCATION_TOPLEFT @builtin = 3; // TODO: a bunch color space related macros are omitted typedef Colorspace = CInt; const Colorspace COLORSPACE_UNKNOWN @builtin = 0; const Colorspace COLORSPACE_SRGB @builtin = 0x120005a0; const Colorspace COLORSPACE_SRGB_LINEAR @builtin = 0x12000500; const Colorspace COLORSPACE_HDR10 @builtin = 0x12002600; const Colorspace COLORSPACE_JPEG @builtin = 0x220004c6; const Colorspace COLORSPACE_BT601_LIMITED @builtin = 0x211018c6; const Colorspace COLORSPACE_BT601_FULL @builtin = 0x221018c6; const Colorspace COLORSPACE_BT709_LIMITED @builtin = 0x21100421; const Colorspace COLORSPACE_BT709_FULL @builtin = 0x22100421; const Colorspace COLORSPACE_BT2020_LIMITED @builtin = 0x21102609; const Colorspace COLORSPACE_BT2020_FULL @builtin = 0x22102609; const Colorspace COLORSPACE_RGB_DEFAULT @builtin = COLORSPACE_SRGB; const Colorspace COLORSPACE_YUV_DEFAULT @builtin = COLORSPACE_JPEG; struct Color { char r; char g; char b; char a; } struct FColor { float r; float g; float b; float a; } struct Palette { int ncolors; Color* colors; uint version; int refcount; } struct PixelFormatDetails { PixelFormat format; char bits_per_pixel; char bytes_per_pixel; char[2] padding; uint rmask; uint gmask; uint bmask; uint amask; char rbits; char gbits; char bbits; char abits; char rshift; char gshift; char bshift; char ashift; } extern fn ZString get_pixel_format_name(PixelFormat format) @extern("SDL_GetPixelFormatName"); extern fn bool get_masks_for_pixel_format(PixelFormat format, int *bpp, uint *rmask, uint *gmask, uint *bmask, uint *amask) @extern("SDL_GetMasksForPixelFormat"); extern fn PixelFormat get_pixel_format_for_masks(int bpp, uint rmask, uint gmask, uint bmask, uint amask) @extern("SDL_GetPixelFormatForMasks"); extern fn PixelFormatDetails* get_pixel_format_details(PixelFormat format) @extern("SDL_GetPixelFormatDetails"); extern fn Palette* create_palette(int ncolors) @extern("SDL_CreatePalette"); extern fn bool set_palette_colors(Palette* palette, Color* colors, int firstcolor, int ncolors) @extern("SDL_SetPaletteColors"); extern fn void destroy_palette(Palette* palette) @extern("SDL_DestroyPalette"); extern fn uint map_rgb(PixelFormatDetails *format, Palette* palette, char r, char g, char b) @extern("SDL_MapRGB"); extern fn uint map_rgba(PixelFormatDetails *format, Palette* palette, char r, char g, char b, char a) @extern("SDL_MapRGBA"); extern fn void get_rgb(uint pixel, PixelFormatDetails *format, Palette* palette, char *r, char *g, char *b) @extern("SDL_GetRGB"); extern fn void get_rgba(uint pixel, PixelFormatDetails *format, Palette* palette, char *r, char *g, char *b, char *a) @extern("SDL_GetRGBA");