1 /+ 2 + Copyright 2022 – 2024 Aya Partridge 3 + Copyright 2018 - 2022 Michael D. Parker 4 + Distributed under the Boost Software License, Version 1.0. 5 + (See accompanying file LICENSE_1_0.txt or copy at 6 + http://www.boost.org/LICENSE_1_0.txt) 7 +/ 8 module sdl.pixels; 9 10 import bindbc.sdl.config; 11 import bindbc.sdl.codegen; 12 13 import sdl.stdinc: SDL_FOURCC, SDL_bool; 14 15 enum SDL_ALPHA_OPAQUE = 255; 16 enum SDL_ALPHA_TRANSPARENT = 0; 17 18 alias SDL_PixelType = int; 19 enum: SDL_PixelType{ 20 SDL_PIXELTYPE_UNKNOWN, 21 SDL_PIXELTYPE_INDEX1, 22 SDL_PIXELTYPE_INDEX4, 23 SDL_PIXELTYPE_INDEX8, 24 SDL_PIXELTYPE_PACKED8, 25 SDL_PIXELTYPE_PACKED16, 26 SDL_PIXELTYPE_PACKED32, 27 SDL_PIXELTYPE_ARRAYU8, 28 SDL_PIXELTYPE_ARRAYU16, 29 SDL_PIXELTYPE_ARRAYU32, 30 SDL_PIXELTYPE_ARRAYF16, 31 SDL_PIXELTYPE_ARRAYF32, 32 } 33 static if(sdlSupport >= SDLSupport.v2_30) 34 enum: SDL_PixelType{ 35 SDL_PIXELTYPE_INDEX2, 36 } 37 38 alias SDL_BitmapOrder = int; 39 enum: SDL_BitmapOrder{ 40 SDL_BITMAPORDER_NONE, 41 SDL_BITMAPORDER_4321, 42 SDL_BITMAPORDER_1234, 43 } 44 45 alias SDL_PackedOrder = int; 46 enum: SDL_PackedOrder{ 47 SDL_PACKEDORDER_NONE, 48 SDL_PACKEDORDER_XRGB, 49 SDL_PACKEDORDER_RGBX, 50 SDL_PACKEDORDER_ARGB, 51 SDL_PACKEDORDER_RGBA, 52 SDL_PACKEDORDER_XBGR, 53 SDL_PACKEDORDER_BGRX, 54 SDL_PACKEDORDER_ABGR, 55 SDL_PACKEDORDER_BGRA, 56 } 57 58 alias SDL_ArrayOrder = int; 59 enum: SDL_ArrayOrder{ 60 SDL_ARRAYORDER_NONE, 61 SDL_ARRAYORDER_RGB, 62 SDL_ARRAYORDER_RGBA, 63 SDL_ARRAYORDER_ARGB, 64 SDL_ARRAYORDER_BGR, 65 SDL_ARRAYORDER_BGRA, 66 SDL_ARRAYORDER_ABGR, 67 } 68 69 alias SDL_PackedLayout = int; 70 enum: SDL_PackedLayout{ 71 SDL_PACKEDLAYOUT_NONE, 72 SDL_PACKEDLAYOUT_332, 73 SDL_PACKEDLAYOUT_4444, 74 SDL_PACKEDLAYOUT_1555, 75 SDL_PACKEDLAYOUT_5551, 76 SDL_PACKEDLAYOUT_565, 77 SDL_PACKEDLAYOUT_8888, 78 SDL_PACKEDLAYOUT_2101010, 79 SDL_PACKEDLAYOUT_1010102, 80 } 81 82 alias SDL_DEFINE_PIXELFOURCC = SDL_FOURCC; 83 84 pragma(inline, true) nothrow @nogc pure @safe{ 85 uint SDL_DEFINE_PIXELFORMAT(int type, int order, int layout, int bits, int bytes){ 86 return (1 << 28) | (type << 24) | (order << 20) | (layout << 16) | (bits << 8) | (bytes << 0); 87 } 88 89 uint SDL_PIXELFLAG(uint x){ return (x >> 28) & 0x0F; } 90 uint SDL_PIXELTYPE(uint x){ return (x >> 24) & 0x0F; } 91 uint SDL_PIXELORDER(uint x){ return (x >> 20) & 0x0F; } 92 uint SDL_PIXELLAYOUT(uint x){ return (x >> 16) & 0x0F; } 93 uint SDL_BITSPERPIXEL(uint x){ return (x >> 8) & 0xFF; } 94 95 uint SDL_BYTESPERPIXEL(uint x){ 96 if(SDL_ISPIXELFORMAT_FOURCC(x)){ 97 if(x == SDL_PIXELFORMAT_YUY2 || x == SDL_PIXELFORMAT_UYVY || x == SDL_PIXELFORMAT_YVYU){ 98 return 2; 99 }else{ 100 return 1; 101 } 102 } 103 return (x >> 0) & 0xFF; 104 } 105 106 bool SDL_ISPIXELFORMAT_INDEXED(uint format){ 107 if(SDL_ISPIXELFORMAT_FOURCC(format)){ 108 static if(sdlSupport >= SDLSupport.v2_30){ 109 return 110 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1 || 111 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX2 || 112 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4 || 113 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8; 114 }else{ 115 return 116 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1 || 117 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4 || 118 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8; 119 } 120 } 121 return false; 122 } 123 124 bool SDL_ISPIXELFORMAT_PACKED(uint format){ 125 if(SDL_ISPIXELFORMAT_FOURCC(format)){ 126 return 127 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED8 || SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED16 || 128 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32; 129 } 130 return false; 131 } 132 133 static if(sdlSupport >= SDLSupport.v2_0_4){ 134 bool SDL_ISPIXELFORMAT_ARRAY(uint format){ 135 if(SDL_ISPIXELFORMAT_FOURCC(format)){ 136 return 137 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU8 || SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU16 || 138 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU32 || SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16 || 139 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32; 140 } 141 return false; 142 } 143 } 144 145 bool SDL_ISPIXELFORMAT_ALPHA(uint format){ 146 if(SDL_ISPIXELFORMAT_PACKED(format)){ 147 return ( 148 SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB || SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA || 149 SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR || SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA 150 ); 151 }else static if(sdlSupport >= SDLSupport.v2_0_4){ 152 if(SDL_ISPIXELFORMAT_ARRAY(format)) return ( 153 SDL_PIXELORDER(format) == SDL_ARRAYORDER_ARGB || SDL_PIXELORDER(format) == SDL_ARRAYORDER_RGBA || 154 SDL_PIXELORDER(format) == SDL_ARRAYORDER_ABGR || SDL_PIXELORDER(format) == SDL_ARRAYORDER_BGRA 155 ); 156 } 157 return false; 158 } 159 160 uint SDL_ISPIXELFORMAT_FOURCC(uint format){ 161 return format && !(format & 0x80000000); 162 } 163 } 164 deprecated("Please use the non-template variant instead"){ 165 enum uint SDL_DEFINE_PIXELFORMAT(int type, int order, int layout, int bits, int bytes) = 166 (1 << 28) | (type << 24) | (order << 20) | (layout << 16) | (bits << 8) | (bytes << 0); 167 168 enum uint SDL_PIXELFLAG(uint x) = (x >> 28) & 0x0F; 169 enum uint SDL_PIXELTYPE(uint x) = (x >> 24) & 0x0F; 170 enum uint SDL_PIXELORDER(uint x) = (x >> 20) & 0x0F; 171 enum uint SDL_PIXELLAYOUT(uint x) = (x >> 16) & 0x0F; 172 enum uint SDL_BITSPERPIXEL(uint x) = (x >> 8) & 0xFF; 173 174 template SDL_BYTESPERPIXEL(uint x){ 175 static if(SDL_ISPIXELFORMAT_FOURCC(x)){ 176 static if(x == SDL_PIXELFORMAT_YUY2 || x == SDL_PIXELFORMAT_UYVY || x == SDL_PIXELFORMAT_YVYU){ 177 enum SDL_BYTESPERPIXEL = 2; 178 }else{ 179 enum SDL_BYTESPERPIXEL = 1; 180 } 181 }else enum SDL_BYTESPERPIXEL = (x >> 0) & 0xFF; 182 } 183 184 template SDL_ISPIXELFORMAT_INDEXED(uint format){ 185 static if(SDL_ISPIXELFORMAT_FOURCC(format)){ 186 enum SDL_ISPIXELFORMAT_INDEXED = 187 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1 || SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4 || 188 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8; 189 }else enum SDL_ISPIXELFORMAT_INDEXED = false; 190 } 191 192 template SDL_ISPIXELFORMAT_PACKED(uint format){ 193 static if(SDL_ISPIXELFORMAT_FOURCC(format)){ 194 enum SDL_ISPIXELFORMAT_PACKED = 195 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED8 || SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED16 || 196 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32; 197 }else enum SDL_ISPIXELFORMAT_PACKED = false; 198 } 199 200 static if(sdlSupport >= SDLSupport.v2_0_4){ 201 template SDL_ISPIXELFORMAT_ARRAY(uint format){ 202 static if(SDL_ISPIXELFORMAT_FOURCC(format)){ 203 enum SDL_ISPIXELFORMAT_ARRAY = 204 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU8 || SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU16 || 205 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU32 || SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16 || 206 SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32; 207 }else enum SDL_ISPIXELFORMAT_ARRAY = false; 208 } 209 } 210 211 template SDL_ISPIXELFORMAT_ALPHA(uint format){ 212 static if(SDL_ISPIXELFORMAT_PACKED(format)){ 213 enum SDL_ISPIXELFORMAT_ALPHA = ( 214 SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB || SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA || 215 SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR || SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA 216 ); 217 }else static if(sdlSupport >= SDLSupport.v2_0_4 && SDL_ISPIXELFORMAT_ARRAY(format)){ 218 enum SDL_ISPIXELFORMAT_ALPHA = ( 219 SDL_PIXELORDER(format) == SDL_ARRAYORDER_ARGB || SDL_PIXELORDER(format) == SDL_ARRAYORDER_RGBA || 220 SDL_PIXELORDER(format) == SDL_ARRAYORDER_ABGR || SDL_PIXELORDER(format) == SDL_ARRAYORDER_BGRA 221 ); 222 }else enum SDL_ISPIXELFORMAT_ALPHA = false; 223 } 224 225 enum SDL_ISPIXELFORMAT_FOURCC(uint format) = format && !(format & 0x80000000); 226 } 227 228 alias SDL_PixelFormatEnum = uint; 229 enum: SDL_PixelFormatEnum{ 230 SDL_PIXELFORMAT_UNKNOWN = 0, 231 SDL_PIXELFORMAT_INDEX1LSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0, 1, 0), 232 SDL_PIXELFORMAT_INDEX1MSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0, 1, 0), 233 SDL_PIXELFORMAT_INDEX4LSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0, 4, 0), 234 SDL_PIXELFORMAT_INDEX4MSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0, 4, 0), 235 SDL_PIXELFORMAT_INDEX8 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1), 236 SDL_PIXELFORMAT_RGB332 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_332, 8, 1), 237 SDL_PIXELFORMAT_XRGB444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_4444, 12, 2), 238 SDL_PIXELFORMAT_RGB444 = SDL_PIXELFORMAT_XRGB444, 239 SDL_PIXELFORMAT_XBGR444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_4444, 12, 2), 240 SDL_PIXELFORMAT_BGR444 = SDL_PIXELFORMAT_XBGR444, 241 SDL_PIXELFORMAT_XRGB1555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_1555, 15, 2), 242 SDL_PIXELFORMAT_RGB555 = SDL_PIXELFORMAT_XRGB1555, 243 SDL_PIXELFORMAT_XBGR1555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_1555, 15, 2), 244 SDL_PIXELFORMAT_BGR555 = SDL_PIXELFORMAT_XBGR1555, 245 SDL_PIXELFORMAT_ARGB4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_4444, 16, 2), 246 SDL_PIXELFORMAT_RGBA4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_4444, 16, 2), 247 SDL_PIXELFORMAT_ABGR4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_4444, 16, 2), 248 SDL_PIXELFORMAT_BGRA4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_4444, 16, 2), 249 SDL_PIXELFORMAT_ARGB1555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_1555, 16, 2), 250 SDL_PIXELFORMAT_RGBA5551 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_5551, 16, 2), 251 SDL_PIXELFORMAT_ABGR1555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_1555, 16, 2), 252 SDL_PIXELFORMAT_BGRA5551 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_5551, 16, 2), 253 SDL_PIXELFORMAT_RGB565 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_565, 16, 2), 254 SDL_PIXELFORMAT_BGR565 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_565, 16, 2), 255 SDL_PIXELFORMAT_RGB24 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0, 24, 3), 256 SDL_PIXELFORMAT_BGR24 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0, 24, 3), 257 SDL_PIXELFORMAT_XRGB8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_8888, 24, 4), 258 SDL_PIXELFORMAT_RGB888 = SDL_PIXELFORMAT_XRGB8888, 259 SDL_PIXELFORMAT_RGBX8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX, SDL_PACKEDLAYOUT_8888, 24, 4), 260 SDL_PIXELFORMAT_XBGR8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_8888, 24, 4), 261 SDL_PIXELFORMAT_BGR888 = SDL_PIXELFORMAT_XBGR8888, 262 SDL_PIXELFORMAT_BGRX8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRX, SDL_PACKEDLAYOUT_8888, 24, 4), 263 SDL_PIXELFORMAT_ARGB8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_8888, 32, 4), 264 SDL_PIXELFORMAT_RGBA8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_8888, 32, 4), 265 SDL_PIXELFORMAT_ABGR8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_8888, 32, 4), 266 SDL_PIXELFORMAT_BGRA8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_8888, 32, 4), 267 SDL_PIXELFORMAT_ARGB2101010 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_2101010, 32, 4), 268 } 269 version(BigEndian){ 270 enum: SDL_PixelFormatEnum{ 271 SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_RGBA8888, 272 SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_ARGB8888, 273 SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_BGRA8888, 274 SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_ABGR8888, 275 } 276 static if(sdlSupport >= SDLSupport.v2_30) 277 enum: SDL_PixelFormatEnum{ 278 SDL_PIXELFORMAT_RGBX32 = SDL_PIXELFORMAT_RGBX8888, 279 SDL_PIXELFORMAT_XRGB32 = SDL_PIXELFORMAT_XRGB8888, 280 SDL_PIXELFORMAT_BGRX32 = SDL_PIXELFORMAT_BGRX8888, 281 SDL_PIXELFORMAT_XBGR32 = SDL_PIXELFORMAT_XBGR8888, 282 } 283 }else{ 284 enum: SDL_PixelFormatEnum{ 285 SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_ABGR8888, 286 SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_BGRA8888, 287 SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_ARGB8888, 288 SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_RGBA8888, 289 } 290 static if(sdlSupport >= SDLSupport.v2_30) 291 enum: SDL_PixelFormatEnum{ 292 SDL_PIXELFORMAT_RGBX32 = SDL_PIXELFORMAT_XBGR8888, 293 SDL_PIXELFORMAT_XRGB32 = SDL_PIXELFORMAT_BGRX8888, 294 SDL_PIXELFORMAT_BGRX32 = SDL_PIXELFORMAT_XRGB8888, 295 SDL_PIXELFORMAT_XBGR32 = SDL_PIXELFORMAT_RGBX8888, 296 } 297 } 298 enum: SDL_PixelFormatEnum{ 299 SDL_PIXELFORMAT_YV12 = SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'), 300 SDL_PIXELFORMAT_IYUV = SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'), 301 SDL_PIXELFORMAT_YUY2 = SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'), 302 SDL_PIXELFORMAT_UYVY = SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'), 303 SDL_PIXELFORMAT_YVYU = SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U'), 304 } 305 static if(sdlSupport >= SDLSupport.v2_0_4) 306 enum: SDL_PixelFormatEnum{ 307 SDL_PIXELFORMAT_NV12 = SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2'), 308 SDL_PIXELFORMAT_NV21 = SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1'), 309 } 310 static if(sdlSupport >= SDLSupport.v2_0_8) 311 enum: SDL_PixelFormatEnum{ 312 SDL_PIXELFORMAT_EXTERNAL_OES = SDL_DEFINE_PIXELFOURCC('O', 'E', 'S', ' '), 313 } 314 static if(sdlSupport >= SDLSupport.v2_30) 315 enum: SDL_PixelFormatEnum{ 316 SDL_PIXELFORMAT_INDEX2LSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX2, SDL_BITMAPORDER_4321, 0, 2, 0), 317 SDL_PIXELFORMAT_INDEX2MSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX2, SDL_BITMAPORDER_1234, 0, 2, 0), 318 } 319 320 static assert(SDL_PIXELFORMAT_BGRX8888 == 0x16661804); 321 322 struct SDL_Color{ 323 ubyte r; 324 ubyte g; 325 ubyte b; 326 ubyte a; 327 } 328 alias SDL_Colour = SDL_Color; 329 330 struct SDL_Palette{ 331 int ncolors; 332 alias ncolours = ncolors; 333 SDL_Color* colors; 334 alias colours = colors; 335 uint version_; //NOTE: the original is named `version` 336 int refcount; 337 } 338 339 struct SDL_PixelFormat{ 340 SDL_PixelFormatEnum format; 341 SDL_Palette* palette; 342 ubyte BitsPerPixel; 343 ubyte BytesPerPixel; 344 ubyte[2] padding; 345 uint Rmask; 346 uint Gmask; 347 uint Bmask; 348 uint Amask; 349 ubyte Rloss; 350 ubyte Gloss; 351 ubyte Bloss; 352 ubyte Aloss; 353 ubyte Rshift; 354 ubyte Gshift; 355 ubyte Bshift; 356 ubyte Ashift; 357 int refcount; 358 SDL_PixelFormat* next; 359 } 360 361 mixin(joinFnBinds((){ 362 FnBind[] ret = [ 363 {q{const(char)*}, q{SDL_GetPixelFormatName}, q{SDL_PixelFormatEnum format}}, 364 {q{SDL_bool}, q{SDL_PixelFormatEnumToMasks}, q{SDL_PixelFormatEnum format, int* bpp, uint* rMask, uint* gMask, uint* bMask, uint* aMask}}, 365 {q{uint}, q{SDL_MasksToPixelFormatEnum}, q{int bpp, uint rMask, uint gMask, uint bMask, uint aMask}}, 366 {q{SDL_PixelFormat*}, q{SDL_AllocFormat}, q{uint pixelFormat}}, 367 {q{void}, q{SDL_FreeFormat}, q{SDL_PixelFormat* format}}, 368 {q{SDL_Palette*}, q{SDL_AllocPalette}, q{int nColours}}, 369 {q{int}, q{SDL_SetPixelFormatPalette}, q{SDL_PixelFormat* format, SDL_Palette* palette}}, 370 {q{int}, q{SDL_SetPaletteColors}, q{SDL_Palette* palette, const(SDL_Color)* colours, int firstColour, int nColours}}, 371 {q{void}, q{SDL_FreePalette}, q{SDL_Palette* palette}}, 372 {q{uint}, q{SDL_MapRGB}, q{const(SDL_PixelFormat)* format, ubyte r, ubyte g, ubyte b}}, 373 {q{uint}, q{SDL_MapRGBA}, q{const(SDL_PixelFormat)* format, ubyte r, ubyte g, ubyte b, ubyte a}}, 374 {q{void}, q{SDL_GetRGB}, q{uint pixel, const(SDL_PixelFormat)* format, ubyte* r, ubyte* g, ubyte* b}}, 375 {q{void}, q{SDL_GetRGBA}, q{uint pixel, const(SDL_PixelFormat)* format, ubyte* r, ubyte* g, ubyte* b, ubyte* a}}, 376 {q{void}, q{SDL_CalculateGammaRamp}, q{float gamma, ushort* ramp}}, 377 ]; 378 return ret; 379 }())); 380 381 alias SDL_SetPaletteColours = SDL_SetPaletteColors;