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