sdl3.c3l/sdl3_pixels.c3i

290 lines
13 KiB
Plaintext

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");