diff --git a/units/SDL3.pas b/units/SDL3.pas index 7d77b57..4fe60df 100644 --- a/units/SDL3.pas +++ b/units/SDL3.pas @@ -360,5 +360,212 @@ function SDL_CreateThreadWithProperties(props: TSDL_PropertiesID): PSDL_Thread; SDL_CreateThreadWithProperties:=SDL_CreateThreadWithPropertiesRuntime(props,TSDL_FunctionPointer(SDL_BeginThreadFunction),TSDL_FunctionPointer(SDL_EndThreadFunction)); end; -end. +{ Macros from SDL_mouse.h } +function SDL_BUTTON_MASK(X: TSDL_MouseButtonFlags): TSDL_MouseButtonFlags; +begin + Result := TSDL_MouseButtonFlags(1) shl (X-1) +end; + +{ Macros from SDL_stdinc.h} +function SDL_FOURCC(A, B, C, D: AnsiChar): cuint32; +begin + Result := (cuint32(Ord(A)) shl 0) or (cuint32(Ord(B)) shl 8) or (cuint32(Ord(C)) shl 16) or (cuint32(Ord(D)) shl 24) +end; + +{ Macros from SDL_pixels.h } +function SDL_DEFINE_PIXELFOURCC(A, B, C, D: AnsiChar): TSDL_PixelFormat; +begin + Result := SDL_FOURCC(A, B, C, D) +end; + +function SDL_DEFINE_PIXELFORMAT(type_: TSDL_PixelType; order: Integer; layout: TSDL_PackedLayout; bits, bytes: Integer): TSDL_PixelFormat; +begin + Result := (1 shl 28) or (type_ shl 24) or (order shl 20) or (layout shl 16) or (bits shl 8) or (bytes shl 0) +end; + +function SDL_PIXELFLAG(format: TSDL_PixelFormat): Integer; +begin + Result := (format shr 28) and $0F +end; + +function SDL_PIXELTYPE(format: TSDL_PixelFormat): TSDL_PixelType; +begin + Result := (format shr 24) and $0F +end; + +function SDL_PIXELORDER(format: TSDL_PixelFormat): Integer; +begin + Result := (format shr 20) and $0F +end; + +function SDL_PIXELLAYOUT(format: TSDL_PixelFormat): TSDL_PackedLayout; +begin + Result := (format shr 16) and $0F +end; + +function SDL_BITSPERPIXEL(format: TSDL_PixelFormat): Integer; +begin + If SDL_ISPIXELFORMAT_FOURCC(format) then + Result := 0 + else + Result := (format shr 8) and $0F +end; + +function SDL_BYTESPERPIXEL(format: TSDL_PixelFormat): Integer; +begin + If SDL_ISPIXELFORMAT_FOURCC(format) then + If (format = SDL_PIXELFORMAT_YUY2) or (format = SDL_PIXELFORMAT_UYVY) or (format = SDL_PIXELFORMAT_YVYU) or (format = SDL_PIXELFORMAT_P010) then + Result := 2 + else + Result := 1 + else + Result := (format shr 0) and $0F +end; + +function SDL_ISPIXELFORMAT_INDEXED(format: TSDL_PixelFormat): Boolean; +begin + Result := (Not SDL_ISPIXELFORMAT_FOURCC(format)) and + ( + (SDL_PIXELTYPE(format) = SDL_PIXELTYPE_INDEX1) or + (SDL_PIXELTYPE(format) = SDL_PIXELTYPE_INDEX2) or + (SDL_PIXELTYPE(format) = SDL_PIXELTYPE_INDEX4) or + (SDL_PIXELTYPE(format) = SDL_PIXELTYPE_INDEX8) + ) +end; +function SDL_ISPIXELFORMAT_PACKED(format: TSDL_PixelFormat): Boolean; +begin + Result := (Not SDL_ISPIXELFORMAT_FOURCC(format)) and + ( + (SDL_PIXELTYPE(format) = SDL_PIXELTYPE_PACKED8) or + (SDL_PIXELTYPE(format) = SDL_PIXELTYPE_PACKED16) or + (SDL_PIXELTYPE(format) = SDL_PIXELTYPE_PACKED32) + ) +end; + +function SDL_ISPIXELFORMAT_ARRAY(format: TSDL_PixelFormat): Boolean; +begin + Result := (Not SDL_ISPIXELFORMAT_FOURCC(format)) and + ( + (SDL_PIXELTYPE(format) = SDL_PIXELTYPE_ARRAYU8) or + (SDL_PIXELTYPE(format) = SDL_PIXELTYPE_ARRAYU16) or + (SDL_PIXELTYPE(format) = SDL_PIXELTYPE_ARRAYU32) or + (SDL_PIXELTYPE(format) = SDL_PIXELTYPE_ARRAYF16) or + (SDL_PIXELTYPE(format) = SDL_PIXELTYPE_ARRAYF32) + ) +end; + +function SDL_ISPIXELFORMAT_10BIT(format: TSDL_PixelFormat): Boolean; +begin + Result := (Not SDL_ISPIXELFORMAT_FOURCC(format)) and + (SDL_PIXELTYPE(format) = SDL_PIXELTYPE_PACKED32) and + (SDL_PIXELLAYOUT(format) = SDL_PACKEDLAYOUT_2101010) +end; + +function SDL_ISPIXELFORMAT_FLOAT(format: TSDL_PixelFormat): Boolean; +begin + Result := (Not SDL_ISPIXELFORMAT_FOURCC(format)) and + ((SDL_PIXELTYPE(format) = SDL_PIXELTYPE_ARRAYF16) or (SDL_PIXELTYPE(format) = SDL_PIXELTYPE_ARRAYF32)) +end; + +function SDL_ISPIXELFORMAT_ALPHA(format: TSDL_PixelFormat): Boolean; +begin + Result := + ( + ( + SDL_ISPIXELFORMAT_PACKED(format) and + ( + (SDL_PIXELORDER(format) = SDL_PACKEDORDER_ARGB) or + (SDL_PIXELORDER(format) = SDL_PACKEDORDER_RGBA) or + (SDL_PIXELORDER(format) = SDL_PACKEDORDER_ABGR) or + (SDL_PIXELORDER(format) = SDL_PACKEDORDER_BGRA) + ) + ) + or + ( + SDL_ISPIXELFORMAT_ARRAY(format) and + ( + (SDL_PIXELORDER(format) = SDL_ARRAYORDER_ARGB) or + (SDL_PIXELORDER(format) = SDL_ARRAYORDER_RGBA) or + (SDL_PIXELORDER(format) = SDL_ARRAYORDER_ABGR) or + (SDL_PIXELORDER(format) = SDL_ARRAYORDER_BGRA) + ) + ) + ) +end; + +function SDL_ISPIXELFORMAT_FOURCC(format: TSDL_PixelFormat): Boolean; +begin + (* The flag is set to 1 because 0x1? is not in the printable ASCII range *) + Result := (format <> 0) and (SDL_PIXELFLAG(format) <> 1) +end; + +function SDL_DEFINE_COLORSPACE( + type_: TSDL_ColorType; + range: TSDL_ColorRange; + primaries: TSDL_ColorPrimaries; + transfer: TSDL_TransferCharacteristics; + matrix: TSDL_MatrixCoefficients; + chroma: TSDL_ChromaLocation +): TSDL_Colorspace; +begin + Result := (cuint32(type_) shl 28) or (cuint32(range) shl 24) or (cuint32(chroma) shl 20) or + (cuint32(primaries) shl 10) or (cuint32(transfer) shl 5) or (cuint32(matrix) shl 0) +end; + +function SDL_COLORSPACETYPE(cspace: TSDL_Colorspace): TSDL_ColorType; +begin + Result := (TSDL_ColorType(cspace) shr 28) and $0F +end; + +function SDL_COLORSPACERANGE(cspace: TSDL_Colorspace): TSDL_ColorRange; +begin + Result := (TSDL_ColorRange(cspace) shr 24) and $0F +end; + +function SDL_COLORSPACECHROMA(cspace: TSDL_Colorspace): TSDL_ChromaLocation; +begin + Result := (TSDL_ChromaLocation(cspace) shr 20) and $0F +end; + +function SDL_COLORSPACEPRIMARIES(cspace: TSDL_Colorspace): TSDL_ColorPrimaries; +begin + Result := (TSDL_ColorPrimaries(cspace) shr 10) and $1F +end; + +function SDL_COLORSPACETRANSFER(cspace: TSDL_Colorspace): TSDL_TransferCharacteristics; +begin + Result := (TSDL_TransferCharacteristics(cspace) shr 5) and $1F +end; + +function SDL_COLORSPACEMATRIX(cspace: TSDL_Colorspace): TSDL_MatrixCoefficients; +begin + Result := TSDL_MatrixCoefficients(cspace) and $1F +end; + +function SDL_ISCOLORSPACE_MATRIX_BT601(cspace: TSDL_Colorspace): Boolean; +begin + Result := (SDL_COLORSPACEMATRIX(cspace) = SDL_MATRIX_COEFFICIENTS_BT601) or (SDL_COLORSPACEMATRIX(cspace) = SDL_MATRIX_COEFFICIENTS_BT470BG) +end; + +function SDL_ISCOLORSPACE_MATRIX_BT709(cspace: TSDL_Colorspace): Boolean; +begin + Result := SDL_COLORSPACEMATRIX(cspace) = SDL_MATRIX_COEFFICIENTS_BT709 +end; + +function SDL_ISCOLORSPACE_MATRIX_BT2020_NCL(cspace: TSDL_Colorspace): Boolean; +begin + Result := SDL_COLORSPACEMATRIX(cspace) = SDL_MATRIX_COEFFICIENTS_BT2020_NCL +end; + +function SDL_ISCOLORSPACE_LIMITED_RANGE(cspace: TSDL_Colorspace): Boolean; +begin + Result := SDL_COLORSPACERANGE(cspace) <> SDL_COLOR_RANGE_FULL +end; + +function SDL_ISCOLORSPACE_FULL_RANGE(cspace: TSDL_Colorspace): Boolean; +begin + Result := SDL_COLORSPACERANGE(cspace) = SDL_COLOR_RANGE_FULL +end; + +end. diff --git a/units/SDL_mouse.inc b/units/SDL_mouse.inc index 696a675..be98526 100644 --- a/units/SDL_mouse.inc +++ b/units/SDL_mouse.inc @@ -145,6 +145,8 @@ type PSDL_MouseButtonFlags = ^TSDL_MouseButtonFlags; TSDL_MouseButtonFlags = type cuint32; +function SDL_BUTTON_MASK(X: TSDL_MouseButtonFlags): TSDL_MouseButtonFlags; + const SDL_BUTTON_LEFT = TSDL_MouseButtonFlags(1); SDL_BUTTON_MIDDLE = TSDL_MouseButtonFlags(2); @@ -152,9 +154,8 @@ const SDL_BUTTON_X1 = TSDL_MouseButtonFlags(4); SDL_BUTTON_X2 = TSDL_MouseButtonFlags(5); - {SDL3-for-Pascal: The C macro SDL_BUTTON_MASK is not implemented but the mask - defines are directly translated. } - {#define SDL_BUTTON_MASK(X) (1u << ((X)-1)) } + {SDL3-for-Pascal: FPC does not allow assigning function results to consts, + so these values are calculated manually. } SDL_BUTTON_LMASK = TSDL_MouseButtonFlags(1 shl SDL_BUTTON_LEFT-1); { SDL_BUTTON_MASK(SDL_BUTTON_LEFT) } SDL_BUTTON_MMASK = TSDL_MouseButtonFlags(1 shl SDL_BUTTON_MIDDLE-1); { SDL_BUTTON_MASK(SDL_BUTTON_MIDDLE) } SDL_BUTTON_RMASK = TSDL_MouseButtonFlags(1 shl SDL_BUTTON_RIGHT-1); { SDL_BUTTON_MASK(SDL_BUTTON_RIGHT) } diff --git a/units/SDL_pixels.inc b/units/SDL_pixels.inc index f2b50d9..ba79a47 100644 --- a/units/SDL_pixels.inc +++ b/units/SDL_pixels.inc @@ -193,9 +193,155 @@ const SDL_PACKEDLAYOUT_2101010 = TSDL_PackedLayout(7); SDL_PACKEDLAYOUT_1010102 = TSDL_PackedLayout(8); -{ #todo : SDL3-for-Pascal: Translate these macros. } -{ -/** +{ Note: If you modify this enum, update SDL_GetPixelFormatName() } + +{* + * Pixel format. + * + * SDL's pixel formats have the following naming convention: + * + * - Names with a list of components and a single bit count, such as RGB24 and + * ABGR32, define a platform-independent encoding into bytes in the order + * specified. For example, in RGB24 data, each pixel is encoded in 3 bytes + * (red, green, blue) in that order, and in ABGR32 data, each pixel is + * encoded in 4 bytes alpha, blue, green, red) in that order. Use these + * names if the property of a format that is important to you is the order + * of the bytes in memory or on disk. + * - Names with a bit count per component, such as ARGB8888 and XRGB1555, are + * "packed" into an appropriately-sized integer in the platform's native + * endianness. For example, ARGB8888 is a sequence of 32-bit integers; in + * each integer, the most significant bits are alpha, and the least + * significant bits are blue. On a little-endian CPU such as x86, the least + * significant bits of each integer are arranged first in memory, but on a + * big-endian CPU such as s390x, the most significant bits are arranged + * first. Use these names if the property of a format that is important to + * you is the meaning of each bit position within a native-endianness + * integer. + * - In indexed formats such as INDEX4LSB, each pixel is represented by + * encoding an index into the palette into the indicated number of bits, + * with multiple pixels packed into each byte if appropriate. In LSB + * formats, the first (leftmost) pixel is stored in the least-significant + * bits of the byte; in MSB formats, it's stored in the most-significant + * bits. INDEX8 does not need LSB/MSB variants, because each pixel exactly + * fills one byte. + * + * The 32-bit byte-array encodings such as RGBA32 are aliases for the + * appropriate 8888 encoding for the current platform. For example, RGBA32 is + * an alias for ABGR8888 on little-endian CPUs like x86, or an alias for + * RGBA8888 on big-endian CPUs. + * + * \since This enum is available since SDL 3.2.0. + } +type + PPSDL_PixelFormat = ^PSDL_PixelFormat; + PSDL_PixelFormat = ^TSDL_PixelFormat; + TSDL_PixelFormat = Integer; +const + SDL_PIXELFORMAT_UNKNOWN = TSDL_PixelFormat(0); + SDL_PIXELFORMAT_INDEX1LSB = TSDL_PixelFormat($11100100); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0, 1, 0), } + SDL_PIXELFORMAT_INDEX1MSB = TSDL_PixelFormat($11200100); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0, 1, 0), } + SDL_PIXELFORMAT_INDEX2LSB = TSDL_PixelFormat($1c100200); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX2, SDL_BITMAPORDER_4321, 0, 2, 0), } + SDL_PIXELFORMAT_INDEX2MSB = TSDL_PixelFormat($1c200200); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX2, SDL_BITMAPORDER_1234, 0, 2, 0), } + SDL_PIXELFORMAT_INDEX4LSB = TSDL_PixelFormat($12100400); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0, 4, 0), } + SDL_PIXELFORMAT_INDEX4MSB = TSDL_PixelFormat($12200400); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0, 4, 0), } + SDL_PIXELFORMAT_INDEX8 = TSDL_PixelFormat($13000801); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1), } + SDL_PIXELFORMAT_RGB332 = TSDL_PixelFormat($14110801); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_332, 8, 1), } + SDL_PIXELFORMAT_XRGB4444 = TSDL_PixelFormat($15120c02); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_4444, 12, 2), } + SDL_PIXELFORMAT_XBGR4444 = TSDL_PixelFormat($15520c02); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_4444, 12, 2), } + SDL_PIXELFORMAT_XRGB1555 = TSDL_PixelFormat($15130f02); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_1555, 15, 2), } + SDL_PIXELFORMAT_XBGR1555 = TSDL_PixelFormat($15530f02); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_1555, 15, 2), } + SDL_PIXELFORMAT_ARGB4444 = TSDL_PixelFormat($15321002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_4444, 16, 2), } + SDL_PIXELFORMAT_RGBA4444 = TSDL_PixelFormat($15421002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_4444, 16, 2), } + SDL_PIXELFORMAT_ABGR4444 = TSDL_PixelFormat($15721002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_4444, 16, 2), } + SDL_PIXELFORMAT_BGRA4444 = TSDL_PixelFormat($15821002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_4444, 16, 2), } + SDL_PIXELFORMAT_ARGB1555 = TSDL_PixelFormat($15331002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_1555, 16, 2), } + SDL_PIXELFORMAT_RGBA5551 = TSDL_PixelFormat($15441002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_5551, 16, 2), } + SDL_PIXELFORMAT_ABGR1555 = TSDL_PixelFormat($15731002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_1555, 16, 2), } + SDL_PIXELFORMAT_BGRA5551 = TSDL_PixelFormat($15841002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_5551, 16, 2), } + SDL_PIXELFORMAT_RGB565 = TSDL_PixelFormat($15151002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_565, 16, 2), } + SDL_PIXELFORMAT_BGR565 = TSDL_PixelFormat($15551002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_565, 16, 2), } + SDL_PIXELFORMAT_RGB24 = TSDL_PixelFormat($17101803); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0, 24, 3), } + SDL_PIXELFORMAT_BGR24 = TSDL_PixelFormat($17401803); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0, 24, 3), } + SDL_PIXELFORMAT_XRGB8888 = TSDL_PixelFormat($16161804); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_8888, 24, 4), } + SDL_PIXELFORMAT_RGBX8888 = TSDL_PixelFormat($16261804); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX, SDL_PACKEDLAYOUT_8888, 24, 4), } + SDL_PIXELFORMAT_XBGR8888 = TSDL_PixelFormat($16561804); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_8888, 24, 4), } + SDL_PIXELFORMAT_BGRX8888 = TSDL_PixelFormat($16661804); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRX, SDL_PACKEDLAYOUT_8888, 24, 4), } + SDL_PIXELFORMAT_ARGB8888 = TSDL_PixelFormat($16362004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_8888, 32, 4), } + SDL_PIXELFORMAT_RGBA8888 = TSDL_PixelFormat($16462004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_8888, 32, 4), } + SDL_PIXELFORMAT_ABGR8888 = TSDL_PixelFormat($16762004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_8888, 32, 4), } + SDL_PIXELFORMAT_BGRA8888 = TSDL_PixelFormat($16862004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_8888, 32, 4), } + SDL_PIXELFORMAT_XRGB2101010 = TSDL_PixelFormat($16172004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_2101010, 32, 4),} + SDL_PIXELFORMAT_XBGR2101010 = TSDL_PixelFormat($16572004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_2101010, 32, 4),} + SDL_PIXELFORMAT_ARGB2101010 = TSDL_PixelFormat($16372004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_2101010, 32, 4),} + SDL_PIXELFORMAT_ABGR2101010 = TSDL_PixelFormat($16772004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_2101010, 32, 4),} + SDL_PIXELFORMAT_RGB48 = TSDL_PixelFormat($18103006); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_RGB, 0, 48, 6), } + SDL_PIXELFORMAT_BGR48 = TSDL_PixelFormat($18403006); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_BGR, 0, 48, 6), } + SDL_PIXELFORMAT_RGBA64 = TSDL_PixelFormat($18204008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_RGBA, 0, 64, 8), } + SDL_PIXELFORMAT_ARGB64 = TSDL_PixelFormat($18304008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_ARGB, 0, 64, 8), } + SDL_PIXELFORMAT_BGRA64 = TSDL_PixelFormat($18504008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_BGRA, 0, 64, 8), } + SDL_PIXELFORMAT_ABGR64 = TSDL_PixelFormat($18604008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_ABGR, 0, 64, 8), } + SDL_PIXELFORMAT_RGB48_FLOAT = TSDL_PixelFormat($1a103006); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_RGB, 0, 48, 6), } + SDL_PIXELFORMAT_BGR48_FLOAT = TSDL_PixelFormat($1a403006); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_BGR, 0, 48, 6), } + SDL_PIXELFORMAT_RGBA64_FLOAT = TSDL_PixelFormat($1a204008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_RGBA, 0, 64, 8), } + SDL_PIXELFORMAT_ARGB64_FLOAT = TSDL_PixelFormat($1a304008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_ARGB, 0, 64, 8), } + SDL_PIXELFORMAT_BGRA64_FLOAT = TSDL_PixelFormat($1a504008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_BGRA, 0, 64, 8), } + SDL_PIXELFORMAT_ABGR64_FLOAT = TSDL_PixelFormat($1a604008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_ABGR, 0, 64, 8), } + SDL_PIXELFORMAT_RGB96_FLOAT = TSDL_PixelFormat($1b10600c); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_RGB, 0, 96, 12), } + SDL_PIXELFORMAT_BGR96_FLOAT = TSDL_PixelFormat($1b40600c); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_BGR, 0, 96, 12), } + SDL_PIXELFORMAT_RGBA128_FLOAT = TSDL_PixelFormat($1b208010); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_RGBA, 0, 128, 16), } + SDL_PIXELFORMAT_ARGB128_FLOAT = TSDL_PixelFormat($1b308010); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_ARGB, 0, 128, 16), } + SDL_PIXELFORMAT_BGRA128_FLOAT = TSDL_PixelFormat($1b508010); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_BGRA, 0, 128, 16), } + SDL_PIXELFORMAT_ABGR128_FLOAT = TSDL_PixelFormat($1b608010); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_ABGR, 0, 128, 16), } + + SDL_PIXELFORMAT_YV12 = TSDL_PixelFormat($32315659); {*< Planar mode: Y + V + U (3 planes) } + { SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'), } + SDL_PIXELFORMAT_IYUV = TSDL_PixelFormat($56555949); {*< Planar mode: Y + U + V (3 planes) } + { SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'), } + SDL_PIXELFORMAT_YUY2 = TSDL_PixelFormat($32595559); {*< Packed mode: Y0+U0+Y1+V0 (1 plane) } + { SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'), } + SDL_PIXELFORMAT_UYVY = TSDL_PixelFormat($59565955); {*< Packed mode: U0+Y0+V0+Y1 (1 plane) } + { SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'), } + SDL_PIXELFORMAT_YVYU = TSDL_PixelFormat($55595659); {*< Packed mode: Y0+V0+Y1+U0 (1 plane) } + { SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U'), } + SDL_PIXELFORMAT_NV12 = TSDL_PixelFormat($3231564e); {*< Planar mode: Y + U/V interleaved (2 planes) } + { SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2'), } + SDL_PIXELFORMAT_NV21 = TSDL_PixelFormat($3132564e); {*< Planar mode: Y + V/U interleaved (2 planes) } + { SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1'), } + SDL_PIXELFORMAT_P010 = TSDL_PixelFormat($30313050); {*< Planar mode: Y + U/V interleaved (2 planes) } + { SDL_DEFINE_PIXELFOURCC('P', '0', '1', '0'), } + SDL_PIXELFORMAT_EXTERNAL_OES = TSDL_PixelFormat($2053454f); {*< Android video texture format } + { SDL_DEFINE_PIXELFOURCC('O', 'E', 'S', ' ') } + + SDL_PIXELFORMAT_MJPG = TSDL_PixelFormat($47504a4d); {*< Motion JPEG *} + { SDL_DEFINE_PIXELFOURCC('M', 'J', 'P', 'G') } + + { Aliases for RGBA byte arrays of color data, for the current platform } + { #todo : SDL3-for-Pascal: Delphi solution for endian determination needed. } + {$IFDEF FPC} + {$IF DEFINED(ENDIAN_BIG)} + SDL_PIXELFORMAT_RGBA32 = TSDL_PixelFormat(SDL_PIXELFORMAT_RGBA8888); + SDL_PIXELFORMAT_ARGB32 = TSDL_PixelFormat(SDL_PIXELFORMAT_ARGB8888); + SDL_PIXELFORMAT_BGRA32 = TSDL_PixelFormat(SDL_PIXELFORMAT_BGRA8888); + SDL_PIXELFORMAT_ABGR32 = TSDL_PixelFormat(SDL_PIXELFORMAT_ABGR8888); + SDL_PIXELFORMAT_RGBX32 = TSDL_PixelFormat(SDL_PIXELFORMAT_RGBX8888); + SDL_PIXELFORMAT_XRGB32 = TSDL_PixelFormat(SDL_PIXELFORMAT_XRGB8888); + SDL_PIXELFORMAT_BGRX32 = TSDL_PixelFormat(SDL_PIXELFORMAT_BGRX8888); + SDL_PIXELFORMAT_XBGR32 = TSDL_PixelFormat(SDL_PIXELFORMAT_XBGR8888); + {$ELSEIF DEFINED(ENDIAN_LITTLE)} + SDL_PIXELFORMAT_RGBA32 = TSDL_PixelFormat(SDL_PIXELFORMAT_ABGR8888); + SDL_PIXELFORMAT_ARGB32 = TSDL_PixelFormat(SDL_PIXELFORMAT_BGRA8888); + SDL_PIXELFORMAT_BGRA32 = TSDL_PixelFormat(SDL_PIXELFORMAT_ARGB8888); + SDL_PIXELFORMAT_ABGR32 = TSDL_PixelFormat(SDL_PIXELFORMAT_RGBA8888); + SDL_PIXELFORMAT_RGBX32 = TSDL_PixelFormat(SDL_PIXELFORMAT_XBGR8888); + SDL_PIXELFORMAT_XRGB32 = TSDL_PixelFormat(SDL_PIXELFORMAT_BGRX8888); + SDL_PIXELFORMAT_BGRX32 = TSDL_PixelFormat(SDL_PIXELFORMAT_XRGB8888); + SDL_PIXELFORMAT_XBGR32 = TSDL_PixelFormat(SDL_PIXELFORMAT_RGBX8888); + {$ELSE} + {$FATAL Cannot determine endianness.} + {$IFEND} + {$ENDIF} + +{* * A macro for defining custom FourCC pixel formats. * * For example, defining SDL_PIXELFORMAT_YV12 looks like this: @@ -213,10 +359,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_DEFINE_PIXELFOURCC(A, B, C, D) SDL_FOURCC(A, B, C, D) + *} +function SDL_DEFINE_PIXELFOURCC(A, B, C, D: AnsiChar): TSDL_PixelFormat; -/** +{* * A macro for defining custom non-FourCC pixel formats. * * For example, defining SDL_PIXELFORMAT_RGBA8888 looks like this: @@ -237,12 +383,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \ - ((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \ - ((bits) << 8) | ((bytes) << 0)) + *} +function SDL_DEFINE_PIXELFORMAT(type_: TSDL_PixelType; order: Integer; layout: TSDL_PackedLayout; bits, bytes: Integer): TSDL_PixelFormat; -/** +{* * A macro to retrieve the flags of an SDL_PixelFormat. * * This macro is generally not needed directly by an app, which should use @@ -254,10 +398,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_PIXELFLAG(format) (((format) >> 28) & 0x0F) + *} +function SDL_PIXELFLAG(format: TSDL_PixelFormat): Integer; -/** +{* * A macro to retrieve the type of an SDL_PixelFormat. * * This is usually a value from the SDL_PixelType enumeration. @@ -268,10 +412,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_PIXELTYPE(format) (((format) >> 24) & 0x0F) + *} +function SDL_PIXELTYPE(format: TSDL_PixelFormat): TSDL_PixelType; -/** +{* * A macro to retrieve the order of an SDL_PixelFormat. * * This is usually a value from the SDL_BitmapOrder, SDL_PackedOrder, or @@ -283,10 +427,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_PIXELORDER(format) (((format) >> 20) & 0x0F) + *} +function SDL_PIXELORDER(format: TSDL_PixelFormat): Integer; -/** +{* * A macro to retrieve the layout of an SDL_PixelFormat. * * This is usually a value from the SDL_PackedLayout enumeration, or zero if a @@ -298,10 +442,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_PIXELLAYOUT(format) (((format) >> 16) & 0x0F) + *} +function SDL_PIXELLAYOUT(format: TSDL_PixelFormat): TSDL_PackedLayout; -/** +{** * A macro to determine an SDL_PixelFormat's bits per pixel. * * Note that this macro double-evaluates its parameter, so do not use @@ -318,11 +462,10 @@ const * \since This macro is available since SDL 3.2.0. * * \sa SDL_BYTESPERPIXEL - */ -#define SDL_BITSPERPIXEL(format) \ - (SDL_ISPIXELFORMAT_FOURCC(format) ? 0 : (((format) >> 8) & 0xFF)) + *} +function SDL_BITSPERPIXEL(format: TSDL_PixelFormat): Integer; -/** +{** * A macro to determine an SDL_PixelFormat's bytes per pixel. * * Note that this macro double-evaluates its parameter, so do not use @@ -339,16 +482,10 @@ const * \since This macro is available since SDL 3.2.0. * * \sa SDL_BITSPERPIXEL - */ -#define SDL_BYTESPERPIXEL(format) \ - (SDL_ISPIXELFORMAT_FOURCC(format) ? \ - ((((format) == SDL_PIXELFORMAT_YUY2) || \ - ((format) == SDL_PIXELFORMAT_UYVY) || \ - ((format) == SDL_PIXELFORMAT_YVYU) || \ - ((format) == SDL_PIXELFORMAT_P010)) ? 2 : 1) : (((format) >> 0) & 0xFF)) - + *} +function SDL_BYTESPERPIXEL(format: TSDL_PixelFormat): Integer; -/** +{** * A macro to determine if an SDL_PixelFormat is an indexed format. * * Note that this macro double-evaluates its parameter, so do not use @@ -360,15 +497,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_ISPIXELFORMAT_INDEXED(format) \ - (!SDL_ISPIXELFORMAT_FOURCC(format) && \ - ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX2) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8))) - -/** + *} +function SDL_ISPIXELFORMAT_INDEXED(format: TSDL_PixelFormat): Boolean; + +{* * A macro to determine if an SDL_PixelFormat is a packed format. * * Note that this macro double-evaluates its parameter, so do not use @@ -380,14 +512,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_ISPIXELFORMAT_PACKED(format) \ - (!SDL_ISPIXELFORMAT_FOURCC(format) && \ - ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED8) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED16) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32))) - -/** + *} +function SDL_ISPIXELFORMAT_PACKED(format: TSDL_PixelFormat): Boolean; + +{** * A macro to determine if an SDL_PixelFormat is an array format. * * Note that this macro double-evaluates its parameter, so do not use @@ -399,16 +527,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_ISPIXELFORMAT_ARRAY(format) \ - (!SDL_ISPIXELFORMAT_FOURCC(format) && \ - ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU8) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU16) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU32) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32))) - -/** + *} +function SDL_ISPIXELFORMAT_ARRAY(format: TSDL_PixelFormat): Boolean; + +{** * A macro to determine if an SDL_PixelFormat is a 10-bit format. * * Note that this macro double-evaluates its parameter, so do not use @@ -420,13 +542,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_ISPIXELFORMAT_10BIT(format) \ - (!SDL_ISPIXELFORMAT_FOURCC(format) && \ - ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32) && \ - (SDL_PIXELLAYOUT(format) == SDL_PACKEDLAYOUT_2101010))) + *} +function SDL_ISPIXELFORMAT_10BIT(format: TSDL_PixelFormat): Boolean; -/** +{** * A macro to determine if an SDL_PixelFormat is a floating point format. * * Note that this macro double-evaluates its parameter, so do not use @@ -438,13 +557,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_ISPIXELFORMAT_FLOAT(format) \ - (!SDL_ISPIXELFORMAT_FOURCC(format) && \ - ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32))) + *} +function SDL_ISPIXELFORMAT_FLOAT(format: TSDL_PixelFormat): Boolean; -/** +{** * A macro to determine if an SDL_PixelFormat has an alpha channel. * * Note that this macro double-evaluates its parameter, so do not use @@ -456,187 +572,26 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_ISPIXELFORMAT_ALPHA(format) \ - ((SDL_ISPIXELFORMAT_PACKED(format) && \ - ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \ - (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \ - (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \ - (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) || \ - (SDL_ISPIXELFORMAT_ARRAY(format) && \ - ((SDL_PIXELORDER(format) == SDL_ARRAYORDER_ARGB) || \ - (SDL_PIXELORDER(format) == SDL_ARRAYORDER_RGBA) || \ - (SDL_PIXELORDER(format) == SDL_ARRAYORDER_ABGR) || \ - (SDL_PIXELORDER(format) == SDL_ARRAYORDER_BGRA)))) - - - -/** - * A macro to determine if an SDL_PixelFormat is a "FourCC" format. - * - * This covers custom and other unusual formats. - * - * Note that this macro double-evaluates its parameter, so do not use - * expressions with side-effects here. - * - * \param format an SDL_PixelFormat to check. - * \returns true if the format has alpha, false otherwise. - * - * \threadsafety It is safe to call this macro from any thread. - * - * \since This macro is available since SDL 3.2.0. - */ -#define SDL_ISPIXELFORMAT_FOURCC(format) /* The flag is set to 1 because 0x1? is not in the printable ASCII range */ \ - ((format) && (SDL_PIXELFLAG(format) != 1)) -} - -{ Note: If you modify this enum, update SDL_GetPixelFormatName() } + *} +function SDL_ISPIXELFORMAT_ALPHA(format: TSDL_PixelFormat): Boolean; -{* - * Pixel format. - * - * SDL's pixel formats have the following naming convention: - * - * - Names with a list of components and a single bit count, such as RGB24 and - * ABGR32, define a platform-independent encoding into bytes in the order - * specified. For example, in RGB24 data, each pixel is encoded in 3 bytes - * (red, green, blue) in that order, and in ABGR32 data, each pixel is - * encoded in 4 bytes alpha, blue, green, red) in that order. Use these - * names if the property of a format that is important to you is the order - * of the bytes in memory or on disk. - * - Names with a bit count per component, such as ARGB8888 and XRGB1555, are - * "packed" into an appropriately-sized integer in the platform's native - * endianness. For example, ARGB8888 is a sequence of 32-bit integers; in - * each integer, the most significant bits are alpha, and the least - * significant bits are blue. On a little-endian CPU such as x86, the least - * significant bits of each integer are arranged first in memory, but on a - * big-endian CPU such as s390x, the most significant bits are arranged - * first. Use these names if the property of a format that is important to - * you is the meaning of each bit position within a native-endianness - * integer. - * - In indexed formats such as INDEX4LSB, each pixel is represented by - * encoding an index into the palette into the indicated number of bits, - * with multiple pixels packed into each byte if appropriate. In LSB - * formats, the first (leftmost) pixel is stored in the least-significant - * bits of the byte; in MSB formats, it's stored in the most-significant - * bits. INDEX8 does not need LSB/MSB variants, because each pixel exactly - * fills one byte. - * - * The 32-bit byte-array encodings such as RGBA32 are aliases for the - * appropriate 8888 encoding for the current platform. For example, RGBA32 is - * an alias for ABGR8888 on little-endian CPUs like x86, or an alias for - * RGBA8888 on big-endian CPUs. - * - * \since This enum is available since SDL 3.2.0. - } -type - PPSDL_PixelFormat = ^PSDL_PixelFormat; - PSDL_PixelFormat = ^TSDL_PixelFormat; - TSDL_PixelFormat = Integer; -const - SDL_PIXELFORMAT_UNKNOWN = TSDL_PixelFormat(0); - SDL_PIXELFORMAT_INDEX1LSB = TSDL_PixelFormat($11100100); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0, 1, 0), } - SDL_PIXELFORMAT_INDEX1MSB = TSDL_PixelFormat($11200100); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0, 1, 0), } - SDL_PIXELFORMAT_INDEX2LSB = TSDL_PixelFormat($1c100200); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX2, SDL_BITMAPORDER_4321, 0, 2, 0), } - SDL_PIXELFORMAT_INDEX2MSB = TSDL_PixelFormat($1c200200); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX2, SDL_BITMAPORDER_1234, 0, 2, 0), } - SDL_PIXELFORMAT_INDEX4LSB = TSDL_PixelFormat($12100400); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0, 4, 0), } - SDL_PIXELFORMAT_INDEX4MSB = TSDL_PixelFormat($12200400); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0, 4, 0), } - SDL_PIXELFORMAT_INDEX8 = TSDL_PixelFormat($13000801); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1), } - SDL_PIXELFORMAT_RGB332 = TSDL_PixelFormat($14110801); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_332, 8, 1), } - SDL_PIXELFORMAT_XRGB4444 = TSDL_PixelFormat($15120c02); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_4444, 12, 2), } - SDL_PIXELFORMAT_XBGR4444 = TSDL_PixelFormat($15520c02); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_4444, 12, 2), } - SDL_PIXELFORMAT_XRGB1555 = TSDL_PixelFormat($15130f02); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_1555, 15, 2), } - SDL_PIXELFORMAT_XBGR1555 = TSDL_PixelFormat($15530f02); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_1555, 15, 2), } - SDL_PIXELFORMAT_ARGB4444 = TSDL_PixelFormat($15321002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_4444, 16, 2), } - SDL_PIXELFORMAT_RGBA4444 = TSDL_PixelFormat($15421002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_4444, 16, 2), } - SDL_PIXELFORMAT_ABGR4444 = TSDL_PixelFormat($15721002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_4444, 16, 2), } - SDL_PIXELFORMAT_BGRA4444 = TSDL_PixelFormat($15821002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_4444, 16, 2), } - SDL_PIXELFORMAT_ARGB1555 = TSDL_PixelFormat($15331002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_1555, 16, 2), } - SDL_PIXELFORMAT_RGBA5551 = TSDL_PixelFormat($15441002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_5551, 16, 2), } - SDL_PIXELFORMAT_ABGR1555 = TSDL_PixelFormat($15731002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_1555, 16, 2), } - SDL_PIXELFORMAT_BGRA5551 = TSDL_PixelFormat($15841002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_5551, 16, 2), } - SDL_PIXELFORMAT_RGB565 = TSDL_PixelFormat($15151002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_565, 16, 2), } - SDL_PIXELFORMAT_BGR565 = TSDL_PixelFormat($15551002); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_565, 16, 2), } - SDL_PIXELFORMAT_RGB24 = TSDL_PixelFormat($17101803); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0, 24, 3), } - SDL_PIXELFORMAT_BGR24 = TSDL_PixelFormat($17401803); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0, 24, 3), } - SDL_PIXELFORMAT_XRGB8888 = TSDL_PixelFormat($16161804); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_8888, 24, 4), } - SDL_PIXELFORMAT_RGBX8888 = TSDL_PixelFormat($16261804); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX, SDL_PACKEDLAYOUT_8888, 24, 4), } - SDL_PIXELFORMAT_XBGR8888 = TSDL_PixelFormat($16561804); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_8888, 24, 4), } - SDL_PIXELFORMAT_BGRX8888 = TSDL_PixelFormat($16661804); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRX, SDL_PACKEDLAYOUT_8888, 24, 4), } - SDL_PIXELFORMAT_ARGB8888 = TSDL_PixelFormat($16362004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_8888, 32, 4), } - SDL_PIXELFORMAT_RGBA8888 = TSDL_PixelFormat($16462004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_8888, 32, 4), } - SDL_PIXELFORMAT_ABGR8888 = TSDL_PixelFormat($16762004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_8888, 32, 4), } - SDL_PIXELFORMAT_BGRA8888 = TSDL_PixelFormat($16862004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_8888, 32, 4), } - SDL_PIXELFORMAT_XRGB2101010 = TSDL_PixelFormat($16172004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_2101010, 32, 4),} - SDL_PIXELFORMAT_XBGR2101010 = TSDL_PixelFormat($16572004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_2101010, 32, 4),} - SDL_PIXELFORMAT_ARGB2101010 = TSDL_PixelFormat($16372004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_2101010, 32, 4),} - SDL_PIXELFORMAT_ABGR2101010 = TSDL_PixelFormat($16772004); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_2101010, 32, 4),} - SDL_PIXELFORMAT_RGB48 = TSDL_PixelFormat($18103006); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_RGB, 0, 48, 6), } - SDL_PIXELFORMAT_BGR48 = TSDL_PixelFormat($18403006); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_BGR, 0, 48, 6), } - SDL_PIXELFORMAT_RGBA64 = TSDL_PixelFormat($18204008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_RGBA, 0, 64, 8), } - SDL_PIXELFORMAT_ARGB64 = TSDL_PixelFormat($18304008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_ARGB, 0, 64, 8), } - SDL_PIXELFORMAT_BGRA64 = TSDL_PixelFormat($18504008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_BGRA, 0, 64, 8), } - SDL_PIXELFORMAT_ABGR64 = TSDL_PixelFormat($18604008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU16, SDL_ARRAYORDER_ABGR, 0, 64, 8), } - SDL_PIXELFORMAT_RGB48_FLOAT = TSDL_PixelFormat($1a103006); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_RGB, 0, 48, 6), } - SDL_PIXELFORMAT_BGR48_FLOAT = TSDL_PixelFormat($1a403006); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_BGR, 0, 48, 6), } - SDL_PIXELFORMAT_RGBA64_FLOAT = TSDL_PixelFormat($1a204008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_RGBA, 0, 64, 8), } - SDL_PIXELFORMAT_ARGB64_FLOAT = TSDL_PixelFormat($1a304008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_ARGB, 0, 64, 8), } - SDL_PIXELFORMAT_BGRA64_FLOAT = TSDL_PixelFormat($1a504008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_BGRA, 0, 64, 8), } - SDL_PIXELFORMAT_ABGR64_FLOAT = TSDL_PixelFormat($1a604008); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF16, SDL_ARRAYORDER_ABGR, 0, 64, 8), } - SDL_PIXELFORMAT_RGB96_FLOAT = TSDL_PixelFormat($1b10600c); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_RGB, 0, 96, 12), } - SDL_PIXELFORMAT_BGR96_FLOAT = TSDL_PixelFormat($1b40600c); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_BGR, 0, 96, 12), } - SDL_PIXELFORMAT_RGBA128_FLOAT = TSDL_PixelFormat($1b208010); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_RGBA, 0, 128, 16), } - SDL_PIXELFORMAT_ARGB128_FLOAT = TSDL_PixelFormat($1b308010); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_ARGB, 0, 128, 16), } - SDL_PIXELFORMAT_BGRA128_FLOAT = TSDL_PixelFormat($1b508010); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_BGRA, 0, 128, 16), } - SDL_PIXELFORMAT_ABGR128_FLOAT = TSDL_PixelFormat($1b608010); { SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYF32, SDL_ARRAYORDER_ABGR, 0, 128, 16), } - - SDL_PIXELFORMAT_YV12 = TSDL_PixelFormat($32315659); {*< Planar mode: Y + V + U (3 planes) } - { SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'), } - SDL_PIXELFORMAT_IYUV = TSDL_PixelFormat($56555949); {*< Planar mode: Y + U + V (3 planes) } - { SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'), } - SDL_PIXELFORMAT_YUY2 = TSDL_PixelFormat($32595559); {*< Packed mode: Y0+U0+Y1+V0 (1 plane) } - { SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'), } - SDL_PIXELFORMAT_UYVY = TSDL_PixelFormat($59565955); {*< Packed mode: U0+Y0+V0+Y1 (1 plane) } - { SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'), } - SDL_PIXELFORMAT_YVYU = TSDL_PixelFormat($55595659); {*< Packed mode: Y0+V0+Y1+U0 (1 plane) } - { SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U'), } - SDL_PIXELFORMAT_NV12 = TSDL_PixelFormat($3231564e); {*< Planar mode: Y + U/V interleaved (2 planes) } - { SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2'), } - SDL_PIXELFORMAT_NV21 = TSDL_PixelFormat($3132564e); {*< Planar mode: Y + V/U interleaved (2 planes) } - { SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1'), } - SDL_PIXELFORMAT_P010 = TSDL_PixelFormat($30313050); {*< Planar mode: Y + U/V interleaved (2 planes) } - { SDL_DEFINE_PIXELFOURCC('P', '0', '1', '0'), } - SDL_PIXELFORMAT_EXTERNAL_OES = TSDL_PixelFormat($2053454f); {*< Android video texture format } - { SDL_DEFINE_PIXELFOURCC('O', 'E', 'S', ' ') } - - SDL_PIXELFORMAT_MJPG = TSDL_PixelFormat($47504a4d); {*< Motion JPEG *} - { SDL_DEFINE_PIXELFOURCC('M', 'J', 'P', 'G') } +{** + * A macro to determine if an SDL_PixelFormat is a "FourCC" format. + * + * This covers custom and other unusual formats. + * + * Note that this macro double-evaluates its parameter, so do not use + * expressions with side-effects here. + * + * \param format an SDL_PixelFormat to check. + * \returns true if the format has alpha, false otherwise. + * + * \threadsafety It is safe to call this macro from any thread. + * + * \since This macro is available since SDL 3.2.0. + *} +function SDL_ISPIXELFORMAT_FOURCC(format: TSDL_PixelFormat): Boolean; - { Aliases for RGBA byte arrays of color data, for the current platform } - { #todo : SDL3-for-Pascal: Delphi solution for endian determination needed. } - {$IFDEF FPC} - {$IF DEFINED(ENDIAN_BIG)} - SDL_PIXELFORMAT_RGBA32 = TSDL_PixelFormat(SDL_PIXELFORMAT_RGBA8888); - SDL_PIXELFORMAT_ARGB32 = TSDL_PixelFormat(SDL_PIXELFORMAT_ARGB8888); - SDL_PIXELFORMAT_BGRA32 = TSDL_PixelFormat(SDL_PIXELFORMAT_BGRA8888); - SDL_PIXELFORMAT_ABGR32 = TSDL_PixelFormat(SDL_PIXELFORMAT_ABGR8888); - SDL_PIXELFORMAT_RGBX32 = TSDL_PixelFormat(SDL_PIXELFORMAT_RGBX8888); - SDL_PIXELFORMAT_XRGB32 = TSDL_PixelFormat(SDL_PIXELFORMAT_XRGB8888); - SDL_PIXELFORMAT_BGRX32 = TSDL_PixelFormat(SDL_PIXELFORMAT_BGRX8888); - SDL_PIXELFORMAT_XBGR32 = TSDL_PixelFormat(SDL_PIXELFORMAT_XBGR8888); - {$ELSEIF DEFINED(ENDIAN_LITTLE)} - SDL_PIXELFORMAT_RGBA32 = TSDL_PixelFormat(SDL_PIXELFORMAT_ABGR8888); - SDL_PIXELFORMAT_ARGB32 = TSDL_PixelFormat(SDL_PIXELFORMAT_BGRA8888); - SDL_PIXELFORMAT_BGRA32 = TSDL_PixelFormat(SDL_PIXELFORMAT_ARGB8888); - SDL_PIXELFORMAT_ABGR32 = TSDL_PixelFormat(SDL_PIXELFORMAT_RGBA8888); - SDL_PIXELFORMAT_RGBX32 = TSDL_PixelFormat(SDL_PIXELFORMAT_XBGR8888); - SDL_PIXELFORMAT_XRGB32 = TSDL_PixelFormat(SDL_PIXELFORMAT_BGRX8888); - SDL_PIXELFORMAT_BGRX32 = TSDL_PixelFormat(SDL_PIXELFORMAT_XRGB8888); - SDL_PIXELFORMAT_XBGR32 = TSDL_PixelFormat(SDL_PIXELFORMAT_RGBX8888); - {$ELSE} - {$FATAL Cannot determine endianness.} - {$IFEND} - {$ENDIF} {* * Colorspace color type. @@ -768,10 +723,117 @@ const SDL_CHROMA_LOCATION_CENTER = TSDL_ChromaLocation(2); {*< In JPEG/JFIF, H.261, and MPEG-1, Cb and Cr are taken at the center of the 2x2 square. In other words, they are offset one-half pixel to the right and one-half pixel down compared to the top-left pixel. } SDL_CHROMA_LOCATION_TOPLEFT = TSDL_ChromaLocation(3); {*< In HEVC for BT.2020 and BT.2100 content (in particular on Blu-rays), Cb and Cr are sampled at the same location as the group's top-left Y pixel ("co-sited", "co-located"). } -{ #todo : SDL3-for-Pascal: Translate these macros. } { Colorspace definition } -{ -/** + +{* + * Colorspace definitions. + * + * Since similar colorspaces may vary in their details (matrix, transfer + * function, etc.), this is not an exhaustive list, but rather a + * representative sample of the kinds of colorspaces supported in SDL. + * + * \since This enum is available since SDL 3.2.0. + * + * \sa SDL_ColorPrimaries + * \sa SDL_ColorRange + * \sa SDL_ColorType + * \sa SDL_MatrixCoefficients + * \sa SDL_TransferCharacteristics + } +type + PPSDL_Colorspace = ^PSDL_Colorspace; + PSDL_Colorspace = ^TSDL_Colorspace; + TSDL_Colorspace = Integer; +const + SDL_COLORSPACE_UNKNOWN = TSDL_Colorspace(0); + + { sRGB is a gamma corrected colorspace, and the default colorspace for SDL rendering and 8-bit RGB surfaces } + SDL_COLORSPACE_SRGB = TSDL_Colorspace($120005a0); {*< Equivalent to DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 } + { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_RGB, + SDL_COLOR_RANGE_FULL, + SDL_COLOR_PRIMARIES_BT709, + SDL_TRANSFER_CHARACTERISTICS_SRGB, + SDL_MATRIX_COEFFICIENTS_IDENTITY, + SDL_CHROMA_LOCATION_NONE), } + + { This is a linear colorspace and the default colorspace for floating point surfaces. On Windows this is the scRGB colorspace, and on Apple platforms this is kCGColorSpaceExtendedLinearSRGB for EDR content } + SDL_COLORSPACE_SRGB_LINEAR = TSDL_Colorspace($12000500); {*< Equivalent to DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709 } + { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_RGB, + SDL_COLOR_RANGE_FULL, + SDL_COLOR_PRIMARIES_BT709, + SDL_TRANSFER_CHARACTERISTICS_LINEAR, + SDL_MATRIX_COEFFICIENTS_IDENTITY, + SDL_CHROMA_LOCATION_NONE), } + + { HDR10 is a non-linear HDR colorspace and the default colorspace for 10-bit surfaces } + SDL_COLORSPACE_HDR10 = TSDL_Colorspace($12002600); {*< Equivalent to DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 } + { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_RGB, + SDL_COLOR_RANGE_FULL, + SDL_COLOR_PRIMARIES_BT2020, + SDL_TRANSFER_CHARACTERISTICS_PQ, + SDL_MATRIX_COEFFICIENTS_IDENTITY, + SDL_CHROMA_LOCATION_NONE), } + + SDL_COLORSPACE_JPEG = TSDL_Colorspace($220004c6); {*< Equivalent to DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601 } + { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR, + SDL_COLOR_RANGE_FULL, + SDL_COLOR_PRIMARIES_BT709, + SDL_TRANSFER_CHARACTERISTICS_BT601, + SDL_MATRIX_COEFFICIENTS_BT601, + SDL_CHROMA_LOCATION_NONE), } + + SDL_COLORSPACE_BT601_LIMITED = TSDL_Colorspace($211018c6); {*< Equivalent to DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601 } + { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR, + SDL_COLOR_RANGE_LIMITED, + SDL_COLOR_PRIMARIES_BT601, + SDL_TRANSFER_CHARACTERISTICS_BT601, + SDL_MATRIX_COEFFICIENTS_BT601, + SDL_CHROMA_LOCATION_LEFT), } + + SDL_COLORSPACE_BT601_FULL = TSDL_Colorspace($221018c6); {*< Equivalent to DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601 } + { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR, + SDL_COLOR_RANGE_FULL, + SDL_COLOR_PRIMARIES_BT601, + SDL_TRANSFER_CHARACTERISTICS_BT601, + SDL_MATRIX_COEFFICIENTS_BT601, + SDL_CHROMA_LOCATION_LEFT), } + + SDL_COLORSPACE_BT709_LIMITED = TSDL_Colorspace($21100421); {*< Equivalent to DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709 } + { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR, + SDL_COLOR_RANGE_LIMITED, + SDL_COLOR_PRIMARIES_BT709, + SDL_TRANSFER_CHARACTERISTICS_BT709, + SDL_MATRIX_COEFFICIENTS_BT709, + SDL_CHROMA_LOCATION_LEFT), } + + SDL_COLORSPACE_BT709_FULL = TSDL_Colorspace($22100421); {*< Equivalent to DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709 } + { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR, + SDL_COLOR_RANGE_FULL, + SDL_COLOR_PRIMARIES_BT709, + SDL_TRANSFER_CHARACTERISTICS_BT709, + SDL_MATRIX_COEFFICIENTS_BT709, + SDL_CHROMA_LOCATION_LEFT), } + + SDL_COLORSPACE_BT2020_LIMITED = TSDL_Colorspace($21102609); {*< Equivalent to DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020 } + { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR, + SDL_COLOR_RANGE_LIMITED, + SDL_COLOR_PRIMARIES_BT2020, + SDL_TRANSFER_CHARACTERISTICS_PQ, + SDL_MATRIX_COEFFICIENTS_BT2020_NCL, + SDL_CHROMA_LOCATION_LEFT), } + + SDL_COLORSPACE_BT2020_FULL = TSDL_Colorspace($22102609); {*< Equivalent to DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020 } + { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR, + SDL_COLOR_RANGE_FULL, + SDL_COLOR_PRIMARIES_BT2020, + SDL_TRANSFER_CHARACTERISTICS_PQ, + SDL_MATRIX_COEFFICIENTS_BT2020_NCL, + SDL_CHROMA_LOCATION_LEFT), } + + SDL_COLORSPACE_RGB_DEFAULT = TSDL_Colorspace(SDL_COLORSPACE_SRGB); {*< The default colorspace for RGB surfaces if no colorspace is specified } + SDL_COLORSPACE_YUV_DEFAULT = TSDL_Colorspace(SDL_COLORSPACE_BT601_LIMITED); {*< The default colorspace for YUV surfaces if no colorspace is specified } + +{** * A macro for defining custom SDL_Colorspace formats. * * For example, defining SDL_COLORSPACE_SRGB looks like this: @@ -800,12 +862,17 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_DEFINE_COLORSPACE(type, range, primaries, transfer, matrix, chroma) \ - (((Uint32)(type) << 28) | ((Uint32)(range) << 24) | ((Uint32)(chroma) << 20) | \ - ((Uint32)(primaries) << 10) | ((Uint32)(transfer) << 5) | ((Uint32)(matrix) << 0)) - -/** + *} +function SDL_DEFINE_COLORSPACE( + type_: TSDL_ColorType; + range: TSDL_ColorRange; + primaries: TSDL_ColorPrimaries; + transfer: TSDL_TransferCharacteristics; + matrix: TSDL_MatrixCoefficients; + chroma: TSDL_ChromaLocation +): TSDL_Colorspace; + +{** * A macro to retrieve the type of an SDL_Colorspace. * * \param cspace an SDL_Colorspace to check. @@ -814,10 +881,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_COLORSPACETYPE(cspace) (SDL_ColorType)(((cspace) >> 28) & 0x0F) + *} +function SDL_COLORSPACETYPE(cspace: TSDL_Colorspace): TSDL_ColorType; -/** +{** * A macro to retrieve the range of an SDL_Colorspace. * * \param cspace an SDL_Colorspace to check. @@ -826,10 +893,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_COLORSPACERANGE(cspace) (SDL_ColorRange)(((cspace) >> 24) & 0x0F) + *} +function SDL_COLORSPACERANGE(cspace: TSDL_Colorspace): TSDL_ColorRange; -/** +{** * A macro to retrieve the chroma sample location of an SDL_Colorspace. * * \param cspace an SDL_Colorspace to check. @@ -838,10 +905,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_COLORSPACECHROMA(cspace) (SDL_ChromaLocation)(((cspace) >> 20) & 0x0F) + *} +function SDL_COLORSPACECHROMA(cspace: TSDL_Colorspace): TSDL_ChromaLocation; -/** +{** * A macro to retrieve the primaries of an SDL_Colorspace. * * \param cspace an SDL_Colorspace to check. @@ -850,10 +917,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_COLORSPACEPRIMARIES(cspace) (SDL_ColorPrimaries)(((cspace) >> 10) & 0x1F) + *} +function SDL_COLORSPACEPRIMARIES(cspace: TSDL_Colorspace): TSDL_ColorPrimaries; -/** +{** * A macro to retrieve the transfer characteristics of an SDL_Colorspace. * * \param cspace an SDL_Colorspace to check. @@ -862,10 +929,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_COLORSPACETRANSFER(cspace) (SDL_TransferCharacteristics)(((cspace) >> 5) & 0x1F) + *} +function SDL_COLORSPACETRANSFER(cspace: TSDL_Colorspace): TSDL_TransferCharacteristics; -/** +{** * A macro to retrieve the matrix coefficients of an SDL_Colorspace. * * \param cspace an SDL_Colorspace to check. @@ -874,10 +941,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_COLORSPACEMATRIX(cspace) (SDL_MatrixCoefficients)((cspace) & 0x1F) + *} +function SDL_COLORSPACEMATRIX(cspace: TSDL_Colorspace): TSDL_MatrixCoefficients; -/** +{** * A macro to determine if an SDL_Colorspace uses BT601 (or BT470BG) matrix * coefficients. * @@ -890,10 +957,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_ISCOLORSPACE_MATRIX_BT601(cspace) (SDL_COLORSPACEMATRIX(cspace) == SDL_MATRIX_COEFFICIENTS_BT601 || SDL_COLORSPACEMATRIX(cspace) == SDL_MATRIX_COEFFICIENTS_BT470BG) + *} +function SDL_ISCOLORSPACE_MATRIX_BT601(cspace: TSDL_Colorspace): Boolean; -/** +{** * A macro to determine if an SDL_Colorspace uses BT709 matrix coefficients. * * \param cspace an SDL_Colorspace to check. @@ -902,10 +969,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_ISCOLORSPACE_MATRIX_BT709(cspace) (SDL_COLORSPACEMATRIX(cspace) == SDL_MATRIX_COEFFICIENTS_BT709) + *} +function SDL_ISCOLORSPACE_MATRIX_BT709(cspace: TSDL_Colorspace): Boolean; -/** +{** * A macro to determine if an SDL_Colorspace uses BT2020_NCL matrix * coefficients. * @@ -915,10 +982,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_ISCOLORSPACE_MATRIX_BT2020_NCL(cspace) (SDL_COLORSPACEMATRIX(cspace) == SDL_MATRIX_COEFFICIENTS_BT2020_NCL) + *} +function SDL_ISCOLORSPACE_MATRIX_BT2020_NCL(cspace: TSDL_Colorspace): Boolean; -/** +{** * A macro to determine if an SDL_Colorspace has a limited range. * * \param cspace an SDL_Colorspace to check. @@ -927,10 +994,10 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_ISCOLORSPACE_LIMITED_RANGE(cspace) (SDL_COLORSPACERANGE(cspace) != SDL_COLOR_RANGE_FULL) + *} +function SDL_ISCOLORSPACE_LIMITED_RANGE(cspace: TSDL_Colorspace): Boolean; -/** +{** * A macro to determine if an SDL_Colorspace has a full range. * * \param cspace an SDL_Colorspace to check. @@ -939,117 +1006,8 @@ const * \threadsafety It is safe to call this macro from any thread. * * \since This macro is available since SDL 3.2.0. - */ -#define SDL_ISCOLORSPACE_FULL_RANGE(cspace) (SDL_COLORSPACERANGE(cspace) == SDL_COLOR_RANGE_FULL) -} - -{* - * Colorspace definitions. - * - * Since similar colorspaces may vary in their details (matrix, transfer - * function, etc.), this is not an exhaustive list, but rather a - * representative sample of the kinds of colorspaces supported in SDL. - * - * \since This enum is available since SDL 3.2.0. - * - * \sa SDL_ColorPrimaries - * \sa SDL_ColorRange - * \sa SDL_ColorType - * \sa SDL_MatrixCoefficients - * \sa SDL_TransferCharacteristics - } -type - PPSDL_Colorspace = ^PSDL_Colorspace; - PSDL_Colorspace = ^TSDL_Colorspace; - TSDL_Colorspace = Integer; -const - SDL_COLORSPACE_UNKNOWN = TSDL_Colorspace(0); - - { sRGB is a gamma corrected colorspace, and the default colorspace for SDL rendering and 8-bit RGB surfaces } - SDL_COLORSPACE_SRGB = TSDL_Colorspace($120005a0); {*< Equivalent to DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 } - { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_RGB, - SDL_COLOR_RANGE_FULL, - SDL_COLOR_PRIMARIES_BT709, - SDL_TRANSFER_CHARACTERISTICS_SRGB, - SDL_MATRIX_COEFFICIENTS_IDENTITY, - SDL_CHROMA_LOCATION_NONE), } - - { This is a linear colorspace and the default colorspace for floating point surfaces. On Windows this is the scRGB colorspace, and on Apple platforms this is kCGColorSpaceExtendedLinearSRGB for EDR content } - SDL_COLORSPACE_SRGB_LINEAR = TSDL_Colorspace($12000500); {*< Equivalent to DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709 } - { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_RGB, - SDL_COLOR_RANGE_FULL, - SDL_COLOR_PRIMARIES_BT709, - SDL_TRANSFER_CHARACTERISTICS_LINEAR, - SDL_MATRIX_COEFFICIENTS_IDENTITY, - SDL_CHROMA_LOCATION_NONE), } - - { HDR10 is a non-linear HDR colorspace and the default colorspace for 10-bit surfaces } - SDL_COLORSPACE_HDR10 = TSDL_Colorspace($12002600); {*< Equivalent to DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 } - { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_RGB, - SDL_COLOR_RANGE_FULL, - SDL_COLOR_PRIMARIES_BT2020, - SDL_TRANSFER_CHARACTERISTICS_PQ, - SDL_MATRIX_COEFFICIENTS_IDENTITY, - SDL_CHROMA_LOCATION_NONE), } - - SDL_COLORSPACE_JPEG = TSDL_Colorspace($220004c6); {*< Equivalent to DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601 } - { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR, - SDL_COLOR_RANGE_FULL, - SDL_COLOR_PRIMARIES_BT709, - SDL_TRANSFER_CHARACTERISTICS_BT601, - SDL_MATRIX_COEFFICIENTS_BT601, - SDL_CHROMA_LOCATION_NONE), } - - SDL_COLORSPACE_BT601_LIMITED = TSDL_Colorspace($211018c6); {*< Equivalent to DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601 } - { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR, - SDL_COLOR_RANGE_LIMITED, - SDL_COLOR_PRIMARIES_BT601, - SDL_TRANSFER_CHARACTERISTICS_BT601, - SDL_MATRIX_COEFFICIENTS_BT601, - SDL_CHROMA_LOCATION_LEFT), } - - SDL_COLORSPACE_BT601_FULL = TSDL_Colorspace($221018c6); {*< Equivalent to DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601 } - { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR, - SDL_COLOR_RANGE_FULL, - SDL_COLOR_PRIMARIES_BT601, - SDL_TRANSFER_CHARACTERISTICS_BT601, - SDL_MATRIX_COEFFICIENTS_BT601, - SDL_CHROMA_LOCATION_LEFT), } - - SDL_COLORSPACE_BT709_LIMITED = TSDL_Colorspace($21100421); {*< Equivalent to DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709 } - { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR, - SDL_COLOR_RANGE_LIMITED, - SDL_COLOR_PRIMARIES_BT709, - SDL_TRANSFER_CHARACTERISTICS_BT709, - SDL_MATRIX_COEFFICIENTS_BT709, - SDL_CHROMA_LOCATION_LEFT), } - - SDL_COLORSPACE_BT709_FULL = TSDL_Colorspace($22100421); {*< Equivalent to DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709 } - { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR, - SDL_COLOR_RANGE_FULL, - SDL_COLOR_PRIMARIES_BT709, - SDL_TRANSFER_CHARACTERISTICS_BT709, - SDL_MATRIX_COEFFICIENTS_BT709, - SDL_CHROMA_LOCATION_LEFT), } - - SDL_COLORSPACE_BT2020_LIMITED = TSDL_Colorspace($21102609); {*< Equivalent to DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020 } - { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR, - SDL_COLOR_RANGE_LIMITED, - SDL_COLOR_PRIMARIES_BT2020, - SDL_TRANSFER_CHARACTERISTICS_PQ, - SDL_MATRIX_COEFFICIENTS_BT2020_NCL, - SDL_CHROMA_LOCATION_LEFT), } - - SDL_COLORSPACE_BT2020_FULL = TSDL_Colorspace($22102609); {*< Equivalent to DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020 } - { SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR, - SDL_COLOR_RANGE_FULL, - SDL_COLOR_PRIMARIES_BT2020, - SDL_TRANSFER_CHARACTERISTICS_PQ, - SDL_MATRIX_COEFFICIENTS_BT2020_NCL, - SDL_CHROMA_LOCATION_LEFT), } - - SDL_COLORSPACE_RGB_DEFAULT = TSDL_Colorspace(SDL_COLORSPACE_SRGB); {*< The default colorspace for RGB surfaces if no colorspace is specified } - SDL_COLORSPACE_YUV_DEFAULT = TSDL_Colorspace(SDL_COLORSPACE_BT601_LIMITED); {*< The default colorspace for YUV surfaces if no colorspace is specified } + *} +function SDL_ISCOLORSPACE_FULL_RANGE(cspace: TSDL_Colorspace): Boolean; {* * A structure that represents a color as RGBA components. diff --git a/units/SDL_stdinc.inc b/units/SDL_stdinc.inc index e9c1913..67d3dd9 100644 --- a/units/SDL_stdinc.inc +++ b/units/SDL_stdinc.inc @@ -6,6 +6,22 @@ SPDX-License-Identifier: Zlib } +{* + * Define a four character code as a Uint32. + * + * \param A the first ASCII character. + * \param B the second ASCII character. + * \param C the third ASCII character. + * \param D the fourth ASCII character. + * \returns the four characters converted into a Uint32, one character + * per-byte. + * + * \threadsafety It is safe to call this macro from any thread. + * + * \since This macro is available since SDL 3.2.0. + *} +function SDL_FOURCC(A, B, C, D: AnsiChar): cuint32; + {* * A signed 8-bit integer type. *