5 #include "forwarddecl/PixelFmt.hpp"
64 constexpr
size_t unique_count = 48;
66 namespace id::unsafe {
67 constexpr
Id fromSDLEnum(
const uint32_t val) noexcept;
68 constexpr uint32_t toSDLEnum(
const Id i) noexcept;
72 constexpr
const char* toString(
const Id
id) noexcept {
73 if (
id == Id::unknown)
return "unknown";
74 if (
id == Id::index1lsb)
return "index1lsb";
75 if (
id == Id::index1msb)
return "index1msb";
76 if (
id == Id::index4lsb)
return "index4lsb";
77 if (
id == Id::index4msb)
return "index4msb";
78 if (
id == Id::index8)
return "index8";
79 if (
id == Id::rgb332)
return "rgb332";
80 if (
id == Id::rgb444)
return "rgb444";
81 if (
id == Id::rgb555)
return "rgb555";
82 if (
id == Id::bgr555)
return "bgr555";
83 if (
id == Id::argb4444)
return "argb4444";
84 if (
id == Id::rgba4444)
return "rgba4444";
85 if (
id == Id::abgr4444)
return "abgr4444";
86 if (
id == Id::bgra4444)
return "bgra4444";
87 if (
id == Id::argb1555)
return "argb1555";
88 if (
id == Id::rgba5551)
return "rgba5551";
89 if (
id == Id::abgr1555)
return "abgr1555";
90 if (
id == Id::bgra5551)
return "bgra5551";
91 if (
id == Id::rgb565)
return "rgb565";
92 if (
id == Id::bgr565)
return "bgr565";
93 if (
id == Id::rgb24)
return "rgb24";
94 if (
id == Id::bgr24)
return "bgr24";
95 if (
id == Id::rgb888)
return "rgb888";
96 if (
id == Id::rgbx8888)
return "rgbx8888";
97 if (
id == Id::bgr888)
return "bgr888";
98 if (
id == Id::bgrx8888)
return "bgrx8888";
99 if (
id == Id::argb8888)
return "argb8888";
100 if (
id == Id::rgba8888)
return "rgba8888";
101 if (
id == Id::abgr8888)
return "abgr8888";
102 if (
id == Id::bgra8888)
return "bgra8888";
103 if (
id == Id::argb2101010)
return "argb2101010";
106 if (
id == Id::yv12)
return "yv12";
107 if (
id == Id::iyuv)
return "iyuv";
108 if (
id == Id::yuy2)
return "yuy2";
109 if (
id == Id::uyvy)
return "uyvy";
110 if (
id == Id::yvyu)
return "yvyu";
111 if (
id == Id::nv12)
return "nv12";
112 if (
id == Id::nv21)
return "nv21";
118 if (
id == Id::rgba32)
return "rgba32";
119 if (
id == Id::argb32)
return "argb32";
120 if (
id == Id::bgra32)
return "bgra32";
125 constexpr
unsigned int bitSizeOf(
const Id
id) noexcept {
126 return SDL_BITSPERPIXEL(id::unsafe::toSDLEnum(
id));
128 constexpr
unsigned int byteSizeOf(
const Id
id) noexcept {
129 return SDL_BYTESPERPIXEL(id::unsafe::toSDLEnum(
id));
132 constexpr
bool isIndexed(
const Id
id) noexcept {
133 return SDL_ISPIXELFORMAT_INDEXED(id::unsafe::toSDLEnum(
id)) == SDL_TRUE;
135 constexpr
bool hasAlpha(
const Id
id) noexcept {
136 return SDL_ISPIXELFORMAT_ALPHA(id::unsafe::toSDLEnum(
id)) == SDL_TRUE;
138 constexpr
bool isUnique(
const Id
id) noexcept {
139 return SDL_ISPIXELFORMAT_FOURCC(id::unsafe::toSDLEnum(
id)) == SDL_TRUE;
159 namespace type::unsafe {
160 constexpr Type fromSDLEnum(
const uint32_t val) noexcept;
161 constexpr uint32_t toSDLEnum(
const Type t) noexcept;
163 constexpr Type typeOf(
const Id
id) noexcept {
164 return type::unsafe::fromSDLEnum(SDL_PIXELTYPE(id::unsafe::toSDLEnum(
id)));
190 namespace order::unsafe {
191 constexpr Order fromSDLEnum(
const uint32_t val) noexcept;
192 constexpr uint32_t toSDLEnum(
const Order o) noexcept;
194 constexpr Order orderOf(
const Id
id) noexcept {
195 return order::unsafe::fromSDLEnum(SDL_PIXELORDER(id::unsafe::toSDLEnum(
id)));
209 namespace layout::unsafe {
210 constexpr Layout fromSDLEnum(
const uint32_t val) noexcept;
211 constexpr uint32_t toSDLEnum(
const Layout l) noexcept;
213 constexpr Layout layoutOf(
const Id
id) noexcept {
214 return layout::unsafe::fromSDLEnum(SDL_PIXELLAYOUT(id::unsafe::toSDLEnum(
id)));
226 static const SDL_PixelFormat& get(
const Id
id);
229 static SDL_PixelFormat** unsafeRaw() noexcept;
235 SDL_PixelFormat** data_;
238 namespace id::unsafe {
239 constexpr Id fromSDLEnum(
const uint32_t val) noexcept {
240 if (val == SDL_PIXELFORMAT_UNKNOWN)
242 if (val == SDL_PIXELFORMAT_INDEX1LSB)
243 return Id::index1lsb;
244 if (val == SDL_PIXELFORMAT_INDEX1MSB)
245 return Id::index1msb;
246 if (val == SDL_PIXELFORMAT_INDEX4LSB)
247 return Id::index4lsb;
248 if (val == SDL_PIXELFORMAT_INDEX4MSB)
249 return Id::index4msb;
250 if (val == SDL_PIXELFORMAT_INDEX8)
252 if (val == SDL_PIXELFORMAT_RGB332)
254 if (val == SDL_PIXELFORMAT_RGB444)
256 if (val == SDL_PIXELFORMAT_RGB555)
258 if (val == SDL_PIXELFORMAT_BGR555)
260 if (val == SDL_PIXELFORMAT_ARGB4444)
262 if (val == SDL_PIXELFORMAT_RGBA4444)
264 if (val == SDL_PIXELFORMAT_ABGR4444)
266 if (val == SDL_PIXELFORMAT_BGRA4444)
268 if (val == SDL_PIXELFORMAT_ARGB1555)
270 if (val == SDL_PIXELFORMAT_RGBA5551)
272 if (val == SDL_PIXELFORMAT_ABGR1555)
274 if (val == SDL_PIXELFORMAT_BGRA5551)
276 if (val == SDL_PIXELFORMAT_RGB565)
278 if (val == SDL_PIXELFORMAT_BGR565)
280 if (val == SDL_PIXELFORMAT_RGB24)
282 if (val == SDL_PIXELFORMAT_BGR24)
284 if (val == SDL_PIXELFORMAT_RGB888)
286 if (val == SDL_PIXELFORMAT_RGBX8888)
288 if (val == SDL_PIXELFORMAT_BGR888)
290 if (val == SDL_PIXELFORMAT_BGRX8888)
292 if (val == SDL_PIXELFORMAT_ARGB8888)
294 if (val == SDL_PIXELFORMAT_RGBA8888)
296 if (val == SDL_PIXELFORMAT_ABGR8888)
298 if (val == SDL_PIXELFORMAT_BGRA8888)
300 if (val == SDL_PIXELFORMAT_ARGB2101010)
301 return Id::argb2101010;
303 if (val == SDL_PIXELFORMAT_YV12)
305 if (val == SDL_PIXELFORMAT_IYUV)
307 if (val == SDL_PIXELFORMAT_YUY2)
309 if (val == SDL_PIXELFORMAT_UYVY)
311 if (val == SDL_PIXELFORMAT_YVYU)
313 if (val == SDL_PIXELFORMAT_NV12)
315 if (val == SDL_PIXELFORMAT_NV21)
320 if (val == SDL_PIXELFORMAT_RGBA32)
322 if (val == SDL_PIXELFORMAT_ARGB32)
324 if (val == SDL_PIXELFORMAT_BGRA32)
326 if (val == SDL_PIXELFORMAT_ABGR32)
331 constexpr uint32_t toSDLEnum(
const Id i) noexcept {
332 if (i == Id::unknown)
333 return SDL_PIXELFORMAT_UNKNOWN;
334 if (i == Id::index1lsb)
335 return SDL_PIXELFORMAT_INDEX1LSB;
336 if (i == Id::index1msb)
337 return SDL_PIXELFORMAT_INDEX1MSB;
338 if (i == Id::index4lsb)
339 return SDL_PIXELFORMAT_INDEX4LSB;
340 if (i == Id::index4msb)
341 return SDL_PIXELFORMAT_INDEX4MSB;
343 return SDL_PIXELFORMAT_INDEX8;
345 return SDL_PIXELFORMAT_RGB332;
347 return SDL_PIXELFORMAT_RGB444;
349 return SDL_PIXELFORMAT_RGB555;
351 return SDL_PIXELFORMAT_BGR555;
352 if (i == Id::argb4444)
353 return SDL_PIXELFORMAT_ARGB4444;
354 if (i == Id::rgba4444)
355 return SDL_PIXELFORMAT_RGBA4444;
356 if (i == Id::abgr4444)
357 return SDL_PIXELFORMAT_ABGR4444;
358 if (i == Id::bgra4444)
359 return SDL_PIXELFORMAT_BGRA4444;
360 if (i == Id::argb1555)
361 return SDL_PIXELFORMAT_ARGB1555;
362 if (i == Id::rgba5551)
363 return SDL_PIXELFORMAT_RGBA5551;
364 if (i == Id::abgr1555)
365 return SDL_PIXELFORMAT_ABGR1555;
366 if (i == Id::bgra5551)
367 return SDL_PIXELFORMAT_BGRA5551;
369 return SDL_PIXELFORMAT_RGB565;
371 return SDL_PIXELFORMAT_BGR565;
373 return SDL_PIXELFORMAT_RGB24;
375 return SDL_PIXELFORMAT_BGR24;
377 return SDL_PIXELFORMAT_RGB888;
378 if (i == Id::rgbx8888)
379 return SDL_PIXELFORMAT_RGBX8888;
381 return SDL_PIXELFORMAT_BGR888;
382 if (i == Id::bgrx8888)
383 return SDL_PIXELFORMAT_BGRX8888;
384 if (i == Id::argb8888)
385 return SDL_PIXELFORMAT_ARGB8888;
386 if (i == Id::rgba8888)
387 return SDL_PIXELFORMAT_RGBA8888;
388 if (i == Id::abgr8888)
389 return SDL_PIXELFORMAT_ABGR8888;
390 if (i == Id::bgra8888)
391 return SDL_PIXELFORMAT_BGRA8888;
392 if (i == Id::argb2101010)
393 return SDL_PIXELFORMAT_ARGB2101010;
396 return SDL_PIXELFORMAT_YV12;
398 return SDL_PIXELFORMAT_IYUV;
400 return SDL_PIXELFORMAT_YUY2;
402 return SDL_PIXELFORMAT_UYVY;
404 return SDL_PIXELFORMAT_YVYU;
406 return SDL_PIXELFORMAT_NV12;
408 return SDL_PIXELFORMAT_NV21;
411 return SDL_PIXELFORMAT_RGBA32;
413 return SDL_PIXELFORMAT_ARGB32;
415 return SDL_PIXELFORMAT_BGRA32;
417 return SDL_PIXELFORMAT_ABGR32;
419 return SDL_PIXELFORMAT_UNKNOWN;
423 namespace type::unsafe {
424 constexpr Type fromSDLEnum(
const uint32_t val) noexcept {
425 if (val == SDL_PIXELTYPE_UNKNOWN)
426 return Type::unknown;
428 if (val == SDL_PIXELTYPE_INDEX1)
429 return Type::index_1;
430 if (val == SDL_PIXELTYPE_INDEX4)
431 return Type::index_4;
432 if (val == SDL_PIXELTYPE_INDEX8)
433 return Type::index_8;
435 if (val == SDL_PIXELTYPE_PACKED8)
436 return Type::packed_8;
437 if (val == SDL_PIXELTYPE_PACKED16)
438 return Type::packed_16;
439 if (val == SDL_PIXELTYPE_PACKED32)
440 return Type::packed_32;
442 if (val == SDL_PIXELTYPE_ARRAYU8)
443 return Type::array_u8;
444 if (val == SDL_PIXELTYPE_ARRAYU16)
445 return Type::array_u16;
446 if (val == SDL_PIXELTYPE_ARRAYU32)
447 return Type::array_u32;
448 if (val == SDL_PIXELTYPE_ARRAYF16)
449 return Type::array_f16;
450 if (val == SDL_PIXELTYPE_ARRAYF32)
451 return Type::array_f32;
453 return Type::unknown;
455 constexpr uint32_t toSDLEnum(
const Type t) noexcept {
456 if (t == Type::unknown)
457 return SDL_PIXELTYPE_UNKNOWN;
459 if (t == Type::index_1)
460 return SDL_PIXELTYPE_INDEX1;
461 if (t == Type::index_4)
462 return SDL_PIXELTYPE_INDEX4;
463 if (t == Type::index_8)
464 return SDL_PIXELTYPE_INDEX8;
466 if (t == Type::packed_8)
467 return SDL_PIXELTYPE_PACKED8;
468 if (t == Type::packed_16)
469 return SDL_PIXELTYPE_PACKED16;
470 if (t == Type::packed_32)
471 return SDL_PIXELTYPE_PACKED32;
473 if (t == Type::array_u8)
474 return SDL_PIXELTYPE_ARRAYU8;
475 if (t == Type::array_u16)
476 return SDL_PIXELTYPE_ARRAYU16;
477 if (t == Type::array_u32)
478 return SDL_PIXELTYPE_ARRAYU32;
479 if (t == Type::array_f16)
480 return SDL_PIXELTYPE_ARRAYF16;
481 if (t == Type::array_f32)
482 return SDL_PIXELTYPE_ARRAYF32;
484 return SDL_PIXELTYPE_UNKNOWN;
488 namespace order::unsafe {
489 constexpr Order fromSDLEnum(
const uint32_t val) noexcept {
490 if (val == SDL_BITMAPORDER_NONE)
491 return Order::bitmap_none;
492 if (val == SDL_BITMAPORDER_4321)
493 return Order::bitmap_4321;
494 if (val == SDL_BITMAPORDER_1234)
495 return Order::bitmap_1234;
497 if (val == SDL_PACKEDORDER_NONE)
498 return Order::packed_none;
499 if (val == SDL_PACKEDORDER_XRGB)
500 return Order::packed_xrgb;
501 if (val == SDL_PACKEDORDER_RGBX)
502 return Order::packed_rgbx;
503 if (val == SDL_PACKEDORDER_ARGB)
504 return Order::packed_argb;
505 if (val == SDL_PACKEDORDER_RGBA)
506 return Order::packed_rgba;
507 if (val == SDL_PACKEDORDER_XBGR)
508 return Order::packed_xbgr;
509 if (val == SDL_PACKEDORDER_BGRX)
510 return Order::packed_bgrx;
511 if (val == SDL_PACKEDORDER_ABGR)
512 return Order::packed_abgr;
513 if (val == SDL_PACKEDORDER_BGRA)
514 return Order::packed_bgra;
516 if (val == SDL_ARRAYORDER_NONE)
517 return Order::array_none;
518 if (val == SDL_ARRAYORDER_RGB)
519 return Order::array_rgb;
520 if (val == SDL_ARRAYORDER_RGBA)
521 return Order::array_rgba;
522 if (val == SDL_ARRAYORDER_ARGB)
523 return Order::array_argb;
524 if (val == SDL_ARRAYORDER_BGR)
525 return Order::array_bgr;
526 if (val == SDL_ARRAYORDER_BGRA)
527 return Order::array_bgra;
528 if (val == SDL_ARRAYORDER_ABGR)
529 return Order::array_abgr;
531 return Order::bitmap_none;
533 constexpr uint32_t toSDLEnum(
const Order o) noexcept {
534 if (o == Order::bitmap_none)
535 return SDL_BITMAPORDER_NONE;
536 if (o == Order::bitmap_4321)
537 return SDL_BITMAPORDER_4321;
538 if (o == Order::bitmap_1234)
539 return SDL_BITMAPORDER_1234;
541 if (o == Order::packed_none)
542 return SDL_PACKEDORDER_NONE;
543 if (o == Order::packed_xrgb)
544 return SDL_PACKEDORDER_XRGB;
545 if (o == Order::packed_rgbx)
546 return SDL_PACKEDORDER_RGBX;
547 if (o == Order::packed_argb)
548 return SDL_PACKEDORDER_ARGB;
549 if (o == Order::packed_rgba)
550 return SDL_PACKEDORDER_RGBA;
551 if (o == Order::packed_xbgr)
552 return SDL_PACKEDORDER_XBGR;
553 if (o == Order::packed_bgrx)
554 return SDL_PACKEDORDER_BGRX;
555 if (o == Order::packed_abgr)
556 return SDL_PACKEDORDER_ABGR;
557 if (o == Order::packed_bgra)
558 return SDL_PACKEDORDER_BGRA;
560 if (o == Order::array_none)
561 return SDL_ARRAYORDER_NONE;
562 if (o == Order::array_rgb)
563 return SDL_ARRAYORDER_RGB;
564 if (o == Order::array_rgba)
565 return SDL_ARRAYORDER_RGBA;
566 if (o == Order::array_argb)
567 return SDL_ARRAYORDER_ARGB;
568 if (o == Order::array_bgr)
569 return SDL_ARRAYORDER_BGR;
570 if (o == Order::array_bgra)
571 return SDL_ARRAYORDER_BGRA;
572 if (o == Order::array_abgr)
573 return SDL_ARRAYORDER_ABGR;
575 return SDL_BITMAPORDER_NONE;
579 namespace layout::unsafe {
580 constexpr Layout fromSDLEnum(
const uint32_t val) noexcept {
581 if (val == SDL_PACKEDLAYOUT_NONE)
583 if (val == SDL_PACKEDLAYOUT_332)
584 return Layout::bits_332;
585 if (val == SDL_PACKEDLAYOUT_4444)
586 return Layout::bits_4444;
587 if (val == SDL_PACKEDLAYOUT_1555)
588 return Layout::bits_1555;
589 if (val == SDL_PACKEDLAYOUT_5551)
590 return Layout::bits_5551;
591 if (val == SDL_PACKEDLAYOUT_565)
592 return Layout::bits_565;
593 if (val == SDL_PACKEDLAYOUT_8888)
594 return Layout::bits_8888;
595 if (val == SDL_PACKEDLAYOUT_2101010)
596 return Layout::bits_2101010;
597 if (val == SDL_PACKEDLAYOUT_1010102)
598 return Layout::bits_1010102;
602 constexpr uint32_t toSDLEnum(
const Layout l) noexcept {
603 if (l == Layout::none)
604 return SDL_PACKEDLAYOUT_NONE;
605 if (l == Layout::bits_332)
606 return SDL_PACKEDLAYOUT_332;
607 if (l == Layout::bits_4444)
608 return SDL_PACKEDLAYOUT_4444;
609 if (l == Layout::bits_1555)
610 return SDL_PACKEDLAYOUT_1555;
611 if (l == Layout::bits_5551)
612 return SDL_PACKEDLAYOUT_5551;
613 if (l == Layout::bits_565)
614 return SDL_PACKEDLAYOUT_565;
615 if (l == Layout::bits_8888)
616 return SDL_PACKEDLAYOUT_8888;
617 if (l == Layout::bits_2101010)
618 return SDL_PACKEDLAYOUT_2101010;
619 if (l == Layout::bits_1010102)
620 return SDL_PACKEDLAYOUT_1010102;
622 return SDL_PACKEDLAYOUT_NONE;