1 #ifndef DALI_GRAPHICS_GLES_TYPES_H
2 #define DALI_GRAPHICS_GLES_TYPES_H
5 #include <dali/graphics-api/graphics-types.h>
6 #include <dali/integration-api/gl-abstraction.h>
7 #include <dali/integration-api/gl-defines.h>
9 namespace Dali::Graphics::GLES
16 using Surface = void*;
18 // Conversion functions
20 * Stucture delivers format and type that can be used
21 * when creating GL texture
23 struct GLTextureFormatType
26 * Constuctor from Graphics::Format
29 constexpr GLTextureFormatType(Graphics::Format value)
34 case Graphics::Format::UNDEFINED:
41 case Graphics::Format::L8:
43 Assign(GL_LUMINANCE, GL_UNSIGNED_BYTE);
46 case Graphics::Format::L8A8:
48 Assign(GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE);
52 // Packed formats (TODO: find supported)
53 case Graphics::Format::R4G4_UNORM_PACK8:
58 case Graphics::Format::R4G4B4A4_UNORM_PACK16:
60 Assign(GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4);
63 case Graphics::Format::B4G4R4A4_UNORM_PACK16:
66 Assign(GL_BGRA_EXT, GL_UNSIGNED_SHORT_4_4_4_4);
68 Assign(GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4);
72 case Graphics::Format::R5G6B5_UNORM_PACK16:
74 Assign(GL_RGB, GL_UNSIGNED_SHORT_5_6_5);
77 case Graphics::Format::B5G6R5_UNORM_PACK16:
80 Assign(GL_BGRA_EXT, GL_UNSIGNED_SHORT_5_6_5);
82 Assign(GL_RGBA, GL_UNSIGNED_SHORT_5_6_5);
86 case Graphics::Format::R5G5B5A1_UNORM_PACK16:
88 Assign(GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1);
91 case Graphics::Format::B5G5R5A1_UNORM_PACK16:
94 Assign(GL_BGRA_EXT, GL_UNSIGNED_SHORT_5_5_5_1);
96 Assign(GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1);
100 case Graphics::Format::A1R5G5B5_UNORM_PACK16:
107 case Graphics::Format::R8_UNORM:
109 Assign(GL_RED, GL_UNSIGNED_BYTE);
112 case Graphics::Format::R8_SNORM:
114 Assign(GL_RED, GL_BYTE);
117 case Graphics::Format::R8_USCALED:
119 Assign(GL_RED, GL_UNSIGNED_BYTE);
122 case Graphics::Format::R8_SSCALED:
124 Assign(GL_RED, GL_BYTE);
127 case Graphics::Format::R8_UINT:
129 Assign(GL_RED, GL_UNSIGNED_BYTE);
132 case Graphics::Format::R8_SINT:
134 Assign(GL_RED, GL_BYTE);
137 case Graphics::Format::R8_SRGB:
139 Assign(GL_RED, GL_BYTE);
142 case Graphics::Format::R8G8_UNORM:
144 Assign(GL_RG, GL_UNSIGNED_BYTE);
147 case Graphics::Format::R8G8_SNORM:
149 Assign(GL_RG, GL_BYTE);
152 case Graphics::Format::R8G8_USCALED:
154 Assign(GL_RG, GL_UNSIGNED_BYTE);
157 case Graphics::Format::R8G8_SSCALED:
159 Assign(GL_RG, GL_BYTE);
162 case Graphics::Format::R8G8_UINT:
164 Assign(GL_RG, GL_UNSIGNED_BYTE);
167 case Graphics::Format::R8G8_SINT:
169 Assign(GL_RG, GL_BYTE);
172 case Graphics::Format::R8G8_SRGB:
174 Assign(GL_RG, GL_BYTE);
177 case Graphics::Format::R8G8B8_UNORM:
179 Assign(GL_RGB, GL_UNSIGNED_BYTE);
182 case Graphics::Format::R8G8B8_SNORM:
184 Assign(GL_RGB, GL_BYTE);
187 case Graphics::Format::R8G8B8_USCALED:
189 Assign(GL_RGB, GL_UNSIGNED_BYTE);
192 case Graphics::Format::R8G8B8_SSCALED:
194 Assign(GL_RGB, GL_BYTE);
197 case Graphics::Format::R8G8B8_UINT:
199 Assign(GL_RGB, GL_UNSIGNED_BYTE);
202 case Graphics::Format::R8G8B8_SINT:
204 Assign(GL_RGB, GL_BYTE);
207 case Graphics::Format::R8G8B8_SRGB:
209 Assign(GL_RGB, GL_BYTE);
213 // BGR not supported in GLES
214 case Graphics::Format::B8G8R8_UNORM:
219 case Graphics::Format::B8G8R8_SNORM:
224 case Graphics::Format::B8G8R8_USCALED:
229 case Graphics::Format::B8G8R8_SSCALED:
234 case Graphics::Format::B8G8R8_UINT:
239 case Graphics::Format::B8G8R8_SINT:
244 case Graphics::Format::B8G8R8_SRGB:
251 case Graphics::Format::R8G8B8A8_UNORM:
253 Assign(GL_RGBA, GL_UNSIGNED_BYTE);
256 case Graphics::Format::R8G8B8A8_SNORM:
258 Assign(GL_RGBA, GL_BYTE);
261 case Graphics::Format::R8G8B8A8_USCALED:
263 Assign(GL_RGBA, GL_UNSIGNED_BYTE);
266 case Graphics::Format::R8G8B8A8_SSCALED:
268 Assign(GL_RGBA, GL_BYTE);
271 case Graphics::Format::R8G8B8A8_UINT:
273 Assign(GL_RGBA, GL_UNSIGNED_BYTE);
276 case Graphics::Format::R8G8B8A8_SINT:
278 Assign(GL_RGBA, GL_BYTE);
281 case Graphics::Format::R8G8B8A8_SRGB:
283 Assign(GL_RGBA, GL_BYTE);
287 // BGRA when only support GL_BGRA_EXT. otherwise, use RGBA
288 case Graphics::Format::B8G8R8A8_UNORM:
291 Assign(GL_BGRA_EXT, GL_UNSIGNED_BYTE);
293 Assign(GL_RGBA, GL_UNSIGNED_BYTE);
297 case Graphics::Format::B8G8R8A8_SNORM:
300 Assign(GL_BGRA_EXT, GL_BYTE);
302 Assign(GL_RGBA, GL_BYTE);
306 case Graphics::Format::B8G8R8A8_USCALED:
309 Assign(GL_BGRA_EXT, GL_UNSIGNED_BYTE);
311 Assign(GL_RGBA, GL_UNSIGNED_BYTE);
315 case Graphics::Format::B8G8R8A8_SSCALED:
318 Assign(GL_BGRA_EXT, GL_BYTE);
320 Assign(GL_RGBA, GL_BYTE);
324 case Graphics::Format::B8G8R8A8_UINT:
327 Assign(GL_BGRA_EXT, GL_UNSIGNED_BYTE);
329 Assign(GL_RGBA, GL_UNSIGNED_BYTE);
333 case Graphics::Format::B8G8R8A8_SINT:
336 Assign(GL_BGRA_EXT, GL_BYTE);
338 Assign(GL_RGBA, GL_BYTE);
342 case Graphics::Format::B8G8R8A8_SRGB:
345 Assign(GL_BGRA_EXT, GL_BYTE);
347 Assign(GL_RGBA, GL_BYTE);
352 // ABGR not supported
353 case Graphics::Format::A8B8G8R8_UNORM_PACK32:
358 case Graphics::Format::A8B8G8R8_SNORM_PACK32:
363 case Graphics::Format::A8B8G8R8_USCALED_PACK32:
368 case Graphics::Format::A8B8G8R8_SSCALED_PACK32:
373 case Graphics::Format::A8B8G8R8_UINT_PACK32:
378 case Graphics::Format::A8B8G8R8_SINT_PACK32:
383 case Graphics::Format::A8B8G8R8_SRGB_PACK32:
389 // TBD which of the formats are supported
390 case Graphics::Format::A2R10G10B10_UNORM_PACK32:
395 case Graphics::Format::A2R10G10B10_SNORM_PACK32:
400 case Graphics::Format::A2R10G10B10_USCALED_PACK32:
405 case Graphics::Format::A2R10G10B10_SSCALED_PACK32:
410 case Graphics::Format::A2R10G10B10_UINT_PACK32:
415 case Graphics::Format::A2R10G10B10_SINT_PACK32:
420 case Graphics::Format::A2B10G10R10_UNORM_PACK32:
425 case Graphics::Format::A2B10G10R10_SNORM_PACK32:
430 case Graphics::Format::A2B10G10R10_USCALED_PACK32:
435 case Graphics::Format::A2B10G10R10_SSCALED_PACK32:
440 case Graphics::Format::A2B10G10R10_UINT_PACK32:
445 case Graphics::Format::A2B10G10R10_SINT_PACK32:
450 case Graphics::Format::R16_UNORM:
455 case Graphics::Format::R16_SNORM:
460 case Graphics::Format::R16_USCALED:
465 case Graphics::Format::R16_SSCALED:
470 case Graphics::Format::R16_UINT:
475 case Graphics::Format::R16_SINT:
480 case Graphics::Format::R16_SFLOAT:
485 case Graphics::Format::R16G16_UNORM:
490 case Graphics::Format::R16G16_SNORM:
495 case Graphics::Format::R16G16_USCALED:
500 case Graphics::Format::R16G16_SSCALED:
505 case Graphics::Format::R16G16_UINT:
510 case Graphics::Format::R16G16_SINT:
515 case Graphics::Format::R16G16_SFLOAT:
520 case Graphics::Format::R16G16B16_UNORM:
525 case Graphics::Format::R16G16B16_SNORM:
530 case Graphics::Format::R16G16B16_USCALED:
535 case Graphics::Format::R16G16B16_SSCALED:
540 case Graphics::Format::R16G16B16_UINT:
545 case Graphics::Format::R16G16B16_SINT:
550 case Graphics::Format::R16G16B16_SFLOAT:
552 // GLES 3.0 floating point formats.
553 Assign(GL_RGB, GL_HALF_FLOAT);
556 case Graphics::Format::R16G16B16A16_UNORM:
561 case Graphics::Format::R16G16B16A16_SNORM:
566 case Graphics::Format::R16G16B16A16_USCALED:
571 case Graphics::Format::R16G16B16A16_SSCALED:
576 case Graphics::Format::R16G16B16A16_UINT:
581 case Graphics::Format::R16G16B16A16_SINT:
586 case Graphics::Format::R16G16B16A16_SFLOAT:
591 case Graphics::Format::R32_UINT:
596 case Graphics::Format::R32_SINT:
601 case Graphics::Format::R32_SFLOAT:
606 case Graphics::Format::R32G32_UINT:
611 case Graphics::Format::R32G32_SINT:
616 case Graphics::Format::R32G32_SFLOAT:
621 case Graphics::Format::R32G32B32_UINT:
626 case Graphics::Format::R32G32B32_SINT:
631 case Graphics::Format::R32G32B32_SFLOAT:
633 // GLES 3.0 floating point formats.
634 Assign(GL_RGB, GL_FLOAT);
637 case Graphics::Format::R32G32B32A32_UINT:
642 case Graphics::Format::R32G32B32A32_SINT:
647 case Graphics::Format::R32G32B32A32_SFLOAT:
652 case Graphics::Format::R64_UINT:
657 case Graphics::Format::R64_SINT:
662 case Graphics::Format::R64_SFLOAT:
667 case Graphics::Format::R64G64_UINT:
672 case Graphics::Format::R64G64_SINT:
677 case Graphics::Format::R64G64_SFLOAT:
682 case Graphics::Format::R64G64B64_UINT:
687 case Graphics::Format::R64G64B64_SINT:
692 case Graphics::Format::R64G64B64_SFLOAT:
697 case Graphics::Format::R64G64B64A64_UINT:
702 case Graphics::Format::R64G64B64A64_SINT:
707 case Graphics::Format::R64G64B64A64_SFLOAT:
712 case Graphics::Format::B10G11R11_UFLOAT_PACK32:
717 case Graphics::Format::E5B9G9R9_UFLOAT_PACK32:
722 case Graphics::Format::D16_UNORM:
724 // GLES 3.0 depth and stencil formats
725 Assign(GL_DEPTH_COMPONENT, GL_UNSIGNED_INT);
728 case Graphics::Format::X8_D24_UNORM_PACK32:
733 case Graphics::Format::D32_SFLOAT:
735 // GLES 3.0 depth and stencil formats
736 Assign(GL_DEPTH_COMPONENT, GL_FLOAT);
739 case Graphics::Format::S8_UINT:
744 case Graphics::Format::D16_UNORM_S8_UINT:
749 case Graphics::Format::D24_UNORM_S8_UINT:
751 // GLES 3.0 depth and stencil formats
752 Assign(GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8);
755 case Graphics::Format::D32_SFLOAT_S8_UINT:
760 case Graphics::Format::BC1_RGB_UNORM_BLOCK:
765 case Graphics::Format::BC1_RGB_SRGB_BLOCK:
770 case Graphics::Format::BC1_RGBA_UNORM_BLOCK:
775 case Graphics::Format::BC1_RGBA_SRGB_BLOCK:
780 case Graphics::Format::BC2_UNORM_BLOCK:
785 case Graphics::Format::BC2_SRGB_BLOCK:
790 case Graphics::Format::BC3_UNORM_BLOCK:
795 case Graphics::Format::BC3_SRGB_BLOCK:
800 case Graphics::Format::BC4_UNORM_BLOCK:
805 case Graphics::Format::BC4_SNORM_BLOCK:
810 case Graphics::Format::BC5_UNORM_BLOCK:
815 case Graphics::Format::BC5_SNORM_BLOCK:
820 case Graphics::Format::BC6H_UFLOAT_BLOCK:
825 case Graphics::Format::BC6H_SFLOAT_BLOCK:
830 case Graphics::Format::BC7_UNORM_BLOCK:
835 case Graphics::Format::BC7_SRGB_BLOCK:
840 case Graphics::Format::ETC2_R8G8B8_UNORM_BLOCK:
842 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_RGB8_ETC2.
843 Assign(GL_COMPRESSED_RGB8_ETC2, 0);
846 case Graphics::Format::ETC2_R8G8B8_SRGB_BLOCK:
848 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_SRGB8_ETC2.
849 Assign(GL_COMPRESSED_SRGB8_ETC2, 0);
852 case Graphics::Format::ETC2_R8G8B8A1_UNORM_BLOCK:
854 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2.
855 Assign(GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, 0);
858 case Graphics::Format::ETC2_R8G8B8A1_SRGB_BLOCK:
860 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2.
861 Assign(GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, 0);
864 case Graphics::Format::ETC2_R8G8B8A8_UNORM_BLOCK:
869 case Graphics::Format::ETC2_R8G8B8A8_SRGB_BLOCK:
874 case Graphics::Format::EAC_R11_UNORM_BLOCK:
876 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_R11_EAC.
877 Assign(GL_COMPRESSED_R11_EAC, 0);
880 case Graphics::Format::EAC_R11_SNORM_BLOCK:
882 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_SIGNED_R11_EAC.
883 Assign(GL_COMPRESSED_SIGNED_R11_EAC, 0);
886 case Graphics::Format::EAC_R11G11_UNORM_BLOCK:
888 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_RG11_EAC.
889 Assign(GL_COMPRESSED_RG11_EAC, 0);
892 case Graphics::Format::EAC_R11G11_SNORM_BLOCK:
894 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_SIGNED_RG11_EAC.
895 Assign(GL_COMPRESSED_SIGNED_RG11_EAC, 0);
898 case Graphics::Format::ASTC_4x4_UNORM_BLOCK:
900 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_4x4_KHR.
901 Assign(GL_COMPRESSED_RGBA_ASTC_4x4_KHR, 0);
904 case Graphics::Format::ASTC_4x4_SRGB_BLOCK:
906 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR.
907 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, 0);
910 case Graphics::Format::ASTC_5x4_UNORM_BLOCK:
912 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_5x4_KHR.
913 Assign(GL_COMPRESSED_RGBA_ASTC_5x4_KHR, 0);
916 case Graphics::Format::ASTC_5x4_SRGB_BLOCK:
918 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR.
919 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, 0);
922 case Graphics::Format::ASTC_5x5_UNORM_BLOCK:
924 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_5x5_KHR.
925 Assign(GL_COMPRESSED_RGBA_ASTC_5x5_KHR, 0);
928 case Graphics::Format::ASTC_5x5_SRGB_BLOCK:
930 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR.
931 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, 0);
934 case Graphics::Format::ASTC_6x5_UNORM_BLOCK:
936 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_6x5_KHR.
937 Assign(GL_COMPRESSED_RGBA_ASTC_6x5_KHR, 0);
940 case Graphics::Format::ASTC_6x5_SRGB_BLOCK:
942 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR.
943 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, 0);
946 case Graphics::Format::ASTC_6x6_UNORM_BLOCK:
948 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_6x6_KHR.
949 Assign(GL_COMPRESSED_RGBA_ASTC_6x6_KHR, 0);
952 case Graphics::Format::ASTC_6x6_SRGB_BLOCK:
954 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR.
955 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, 0);
958 case Graphics::Format::ASTC_8x5_UNORM_BLOCK:
960 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_8x5_KHR.
961 Assign(GL_COMPRESSED_RGBA_ASTC_8x5_KHR, 0);
964 case Graphics::Format::ASTC_8x5_SRGB_BLOCK:
966 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR.
967 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, 0);
970 case Graphics::Format::ASTC_8x6_UNORM_BLOCK:
972 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_8x6_KHR.
973 Assign(GL_COMPRESSED_RGBA_ASTC_8x6_KHR, 0);
976 case Graphics::Format::ASTC_8x6_SRGB_BLOCK:
978 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR.
979 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, 0);
982 case Graphics::Format::ASTC_8x8_UNORM_BLOCK:
984 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_8x8_KHR.
985 Assign(GL_COMPRESSED_RGBA_ASTC_8x8_KHR, 0);
988 case Graphics::Format::ASTC_8x8_SRGB_BLOCK:
990 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR.
991 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, 0);
994 case Graphics::Format::ASTC_10x5_UNORM_BLOCK:
996 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_10x5_KHR.
997 Assign(GL_COMPRESSED_RGBA_ASTC_10x5_KHR, 0);
1000 case Graphics::Format::ASTC_10x5_SRGB_BLOCK:
1002 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR.
1003 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR, 0);
1006 case Graphics::Format::ASTC_10x6_UNORM_BLOCK:
1008 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_10x6_KHR.
1009 Assign(GL_COMPRESSED_RGBA_ASTC_10x6_KHR, 0);
1012 case Graphics::Format::ASTC_10x6_SRGB_BLOCK:
1014 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR.
1015 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, 0);
1018 case Graphics::Format::ASTC_10x8_UNORM_BLOCK:
1020 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_10x8_KHR.
1021 Assign(GL_COMPRESSED_RGBA_ASTC_10x8_KHR, 0);
1024 case Graphics::Format::ASTC_10x8_SRGB_BLOCK:
1026 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR.
1027 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, 0);
1030 case Graphics::Format::ASTC_10x10_UNORM_BLOCK:
1032 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_10x10_KHR.
1033 Assign(GL_COMPRESSED_RGBA_ASTC_10x10_KHR, 0);
1036 case Graphics::Format::ASTC_10x10_SRGB_BLOCK:
1038 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR.
1039 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, 0);
1042 case Graphics::Format::ASTC_12x10_UNORM_BLOCK:
1044 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_12x10_KHR.
1045 Assign(GL_COMPRESSED_RGBA_ASTC_12x10_KHR, 0);
1048 case Graphics::Format::ASTC_12x10_SRGB_BLOCK:
1050 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR.
1051 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, 0);
1054 case Graphics::Format::ASTC_12x12_UNORM_BLOCK:
1056 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_12x12_KHR.
1057 Assign(GL_COMPRESSED_RGBA_ASTC_12x12_KHR, 0);
1060 case Graphics::Format::ASTC_12x12_SRGB_BLOCK:
1062 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR.
1063 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, 0);
1066 case Graphics::Format::PVRTC1_2BPP_UNORM_BLOCK_IMG:
1071 case Graphics::Format::PVRTC1_4BPP_UNORM_BLOCK_IMG:
1073 ///! Using non-standard GLES 2.0 extension compressed pixel format COMPRESSED_RGB_PVRTC_4BPPV1.
1074 Assign(0x8C00, 0); ///! < Hardcoded so we can test before we move to GLES 3.0 or greater.
1078 case Graphics::Format::PVRTC2_2BPP_UNORM_BLOCK_IMG:
1083 case Graphics::Format::PVRTC2_4BPP_UNORM_BLOCK_IMG:
1088 case Graphics::Format::PVRTC1_2BPP_SRGB_BLOCK_IMG:
1093 case Graphics::Format::PVRTC1_4BPP_SRGB_BLOCK_IMG:
1098 case Graphics::Format::PVRTC2_2BPP_SRGB_BLOCK_IMG:
1103 case Graphics::Format::PVRTC2_4BPP_SRGB_BLOCK_IMG:
1111 constexpr inline void Assign(uint32_t f, uint32_t t)
1121 struct GLSamplerFilter
1123 constexpr explicit GLSamplerFilter(Graphics::SamplerFilter filter)
1127 case Graphics::SamplerFilter::NEAREST:
1129 glFilter = GL_NEAREST;
1132 case Graphics::SamplerFilter::LINEAR:
1134 glFilter = GL_LINEAR;
1139 uint32_t glFilter{0};
1142 struct GLSamplerFilterAndMipMapMode
1144 constexpr explicit GLSamplerFilterAndMipMapMode(Graphics::SamplerFilter filter,
1145 Graphics::SamplerMipmapMode mipMapMode)
1149 case Graphics::SamplerFilter::NEAREST:
1153 case Graphics::SamplerMipmapMode::NONE:
1155 glFilter = GL_NEAREST;
1158 case Graphics::SamplerMipmapMode::NEAREST:
1160 glFilter = GL_NEAREST_MIPMAP_NEAREST;
1163 case Graphics::SamplerMipmapMode::LINEAR:
1165 glFilter = GL_NEAREST_MIPMAP_LINEAR;
1172 case Graphics::SamplerFilter::LINEAR:
1176 case Graphics::SamplerMipmapMode::NONE:
1178 glFilter = GL_LINEAR;
1181 case Graphics::SamplerMipmapMode::NEAREST:
1183 glFilter = GL_LINEAR_MIPMAP_NEAREST;
1186 case Graphics::SamplerMipmapMode::LINEAR:
1188 glFilter = GL_LINEAR_MIPMAP_LINEAR;
1197 inline explicit operator uint32_t() const
1202 inline operator int() const
1204 return static_cast<int>(glFilter);
1207 uint32_t glFilter{0};
1210 /** Converts vertex format to GL */
1211 struct GLVertexFormat
1213 constexpr explicit GLVertexFormat(Graphics::VertexInputFormat gfxFormat)
1217 case VertexInputFormat::FVECTOR2:
1223 case VertexInputFormat::FVECTOR3:
1229 case VertexInputFormat::FVECTOR4:
1235 case VertexInputFormat::FLOAT:
1241 case VertexInputFormat::INTEGER:
1247 case VertexInputFormat::IVECTOR2:
1253 case VertexInputFormat::IVECTOR3:
1259 case VertexInputFormat::IVECTOR4:
1265 case VertexInputFormat::UNDEFINED:
1278 struct GLTextureTarget
1280 constexpr explicit GLTextureTarget(Graphics::TextureType graphicsTextureType)
1282 switch(graphicsTextureType)
1284 case Graphics::TextureType::TEXTURE_2D:
1286 target = GL_TEXTURE_2D;
1289 case Graphics::TextureType::TEXTURE_3D:
1291 target = GL_TEXTURE_3D;
1294 case Graphics::TextureType::TEXTURE_CUBEMAP:
1296 target = GL_TEXTURE_CUBE_MAP;
1301 GLenum target{GL_TEXTURE_2D};
1304 struct GLAddressMode
1306 constexpr explicit GLAddressMode(Graphics::SamplerAddressMode graphicsAddressMode)
1308 switch(graphicsAddressMode)
1310 case Graphics::SamplerAddressMode::REPEAT:
1312 texParameter = GL_REPEAT;
1315 case Graphics::SamplerAddressMode::MIRRORED_REPEAT:
1317 texParameter = GL_MIRRORED_REPEAT;
1320 case Graphics::SamplerAddressMode::CLAMP_TO_EDGE:
1322 texParameter = GL_CLAMP_TO_EDGE;
1325 case Graphics::SamplerAddressMode::CLAMP_TO_BORDER:
1327 texParameter = GL_CLAMP_TO_EDGE;
1330 case Graphics::SamplerAddressMode::MIRROR_CLAMP_TO_EDGE:
1332 texParameter = GL_CLAMP_TO_EDGE;
1337 GLenum texParameter{GL_CLAMP_TO_EDGE};
1341 * @brief Descriptor of single buffer binding within
1344 struct VertexBufferBindingDescriptor
1346 const GLES::Buffer* buffer{nullptr};
1347 uint32_t offset{0u};
1351 * @brief Descriptor of ix buffer binding within
1354 struct IndexBufferBindingDescriptor
1356 const GLES::Buffer* buffer{nullptr};
1358 Graphics::Format format{};
1362 * @brief Descriptor of uniform buffer binding within
1365 struct UniformBufferBindingDescriptor
1367 const GLES::Buffer* buffer{nullptr};
1368 uint32_t binding{0u};
1369 uint32_t offset{0u};
1370 bool emulated; ///<true if UBO is emulated for old gfx API
1374 * @brief The descriptor of draw call
1376 struct DrawCallDescriptor
1379 * @brief Enum specifying type of the draw call
1385 DRAW_INDEXED_INDIRECT
1388 Type type{}; ///< Type of the draw call
1391 * Union contains data for all types of draw calls.
1396 * @brief Vertex array draw
1400 uint32_t vertexCount;
1401 uint32_t instanceCount;
1402 uint32_t firstVertex;
1403 uint32_t firstInstance;
1407 * @brief Indexed draw
1411 uint32_t indexCount;
1412 uint32_t instanceCount;
1413 uint32_t firstIndex;
1414 int32_t vertexOffset;
1415 uint32_t firstInstance;
1419 * @brief Indexed draw indirect
1423 const GLES::Buffer* buffer;
1427 } drawIndexedIndirect;
1432 * @brief Topologu conversion from Graphics to GLES
1436 explicit constexpr GLESTopology(PrimitiveTopology topology)
1440 case PrimitiveTopology::POINT_LIST:
1442 primitiveTopology = GL_POINTS;
1445 case PrimitiveTopology::LINE_LIST:
1447 primitiveTopology = GL_LINES;
1450 case PrimitiveTopology::LINE_LOOP:
1452 primitiveTopology = GL_LINE_LOOP;
1455 case PrimitiveTopology::LINE_STRIP:
1457 primitiveTopology = GL_LINE_STRIP;
1460 case PrimitiveTopology::TRIANGLE_LIST:
1462 primitiveTopology = GL_TRIANGLES;
1465 case PrimitiveTopology::TRIANGLE_STRIP:
1467 primitiveTopology = GL_TRIANGLE_STRIP;
1470 case PrimitiveTopology::TRIANGLE_FAN:
1472 primitiveTopology = GL_TRIANGLE_FAN;
1479 * @brief Explicit type conversion operator
1480 * @return converted value
1482 constexpr inline operator GLenum() const
1484 return primitiveTopology;
1487 GLenum primitiveTopology{0}; ///< Topology
1491 * @brief Index format conversion structure
1493 struct GLIndexFormat
1495 explicit constexpr GLIndexFormat(Format _format)
1499 // TODO: add more formats
1500 case Format::R16_UINT:
1502 format = GL_UNSIGNED_SHORT;
1513 * @brief Explicit type conversion operator
1514 * @return converted value
1516 constexpr inline operator GLenum() const
1521 GLenum format{0}; ///< Converted format
1525 * @brief Conversion of blending function factor
1529 constexpr explicit GLBlendFunc(Graphics::BlendFactor factor)
1533 case Graphics::BlendFactor::ZERO:
1538 case Graphics::BlendFactor::ONE:
1543 case Graphics::BlendFactor::SRC_COLOR:
1545 glFactor = GL_SRC_COLOR;
1548 case Graphics::BlendFactor::ONE_MINUS_SRC_COLOR:
1550 glFactor = GL_ONE_MINUS_SRC_COLOR;
1553 case Graphics::BlendFactor::DST_COLOR:
1555 glFactor = GL_DST_COLOR;
1558 case Graphics::BlendFactor::ONE_MINUS_DST_COLOR:
1560 glFactor = GL_ONE_MINUS_DST_COLOR;
1563 case Graphics::BlendFactor::SRC_ALPHA:
1565 glFactor = GL_SRC_ALPHA;
1568 case Graphics::BlendFactor::ONE_MINUS_SRC_ALPHA:
1570 glFactor = GL_ONE_MINUS_SRC_ALPHA;
1573 case Graphics::BlendFactor::DST_ALPHA:
1575 glFactor = GL_DST_ALPHA;
1578 case Graphics::BlendFactor::ONE_MINUS_DST_ALPHA:
1580 glFactor = GL_ONE_MINUS_DST_ALPHA;
1583 case Graphics::BlendFactor::CONSTANT_COLOR:
1585 glFactor = GL_CONSTANT_COLOR;
1588 case Graphics::BlendFactor::ONE_MINUS_CONSTANT_COLOR:
1590 glFactor = GL_ONE_MINUS_CONSTANT_COLOR;
1593 case Graphics::BlendFactor::CONSTANT_ALPHA:
1595 glFactor = GL_CONSTANT_ALPHA;
1598 case Graphics::BlendFactor::ONE_MINUS_CONSTANT_ALPHA:
1600 glFactor = GL_ONE_MINUS_CONSTANT_ALPHA;
1603 case Graphics::BlendFactor::SRC_ALPHA_SATURATE:
1605 glFactor = GL_SRC_ALPHA_SATURATE;
1608 // Below may be unsupported without extension
1609 case Graphics::BlendFactor::SRC1_COLOR:
1614 case Graphics::BlendFactor::ONE_MINUS_SRC1_COLOR:
1619 case Graphics::BlendFactor::SRC1_ALPHA:
1624 case Graphics::BlendFactor::ONE_MINUS_SRC1_ALPHA:
1633 * @brief Explicit type conversion operator
1634 * @return converted value
1636 constexpr inline operator GLenum() const
1641 GLenum glFactor{0u};
1645 * @brief Converts Blend Op to GL
1649 constexpr explicit GLBlendOp(Graphics::BlendOp blendOp)
1653 case Graphics::BlendOp::ADD:
1655 glBlendOp = GL_FUNC_ADD;
1658 case Graphics::BlendOp::SUBTRACT:
1660 glBlendOp = GL_FUNC_SUBTRACT;
1663 case Graphics::BlendOp::REVERSE_SUBTRACT:
1665 glBlendOp = GL_FUNC_REVERSE_SUBTRACT;
1668 case Graphics::BlendOp::MIN:
1673 case Graphics::BlendOp::MAX:
1682 * @brief Explicit type conversion operator
1683 * @return converted value
1685 constexpr inline operator GLenum() const
1690 GLenum glBlendOp{0u};
1694 * @brief Converts GL cull mode
1698 constexpr explicit GLCullMode(Graphics::CullMode cullMode)
1702 case Graphics::CullMode::NONE: // this isn't really accepted by GL!
1704 glCullMode = GL_NONE;
1707 case Graphics::CullMode::FRONT:
1709 glCullMode = GL_FRONT;
1712 case Graphics::CullMode::BACK:
1714 glCullMode = GL_BACK;
1717 case Graphics::CullMode::FRONT_AND_BACK:
1719 glCullMode = GL_FRONT_AND_BACK;
1726 * @brief Explicit type conversion operator
1727 * @return converted value
1729 constexpr inline operator GLenum() const
1734 GLenum glCullMode{0u};
1738 * @brief enum with GL types
1743 FLOAT_VEC2 = 0x8B50,
1744 FLOAT_VEC3 = 0x8B51,
1745 FLOAT_VEC4 = 0x8B52,
1753 FLOAT_MAT2 = 0x8B5A,
1754 FLOAT_MAT3 = 0x8B5B,
1755 FLOAT_MAT4 = 0x8B5C,
1756 SAMPLER_2D = 0x8B5E,
1757 SAMPLER_CUBE = 0x8B60,
1759 UNSIGNED_BYTE = 0x1401,
1761 UNSIGNED_SHORT = 0x1403,
1763 UNSIGNED_INT = 0x1405,
1769 * @brief GL type conversion (used with reflection)
1771 struct GLTypeConversion
1773 constexpr explicit GLTypeConversion(GLenum value)
1779 type = GLType::FLOAT_VEC2;
1784 type = GLType::FLOAT_VEC3;
1789 type = GLType::FLOAT_VEC4;
1794 type = GLType::INT_VEC2;
1799 type = GLType::INT_VEC3;
1804 type = GLType::INT_VEC4;
1809 type = GLType::BOOL;
1814 type = GLType::BOOL_VEC2;
1819 type = GLType::BOOL_VEC3;
1824 type = GLType::BOOL_VEC4;
1829 type = GLType::FLOAT_MAT2;
1834 type = GLType::FLOAT_MAT3;
1839 type = GLType::FLOAT_MAT4;
1844 type = GLType::SAMPLER_2D;
1847 case GL_SAMPLER_CUBE:
1849 type = GLType::SAMPLER_CUBE;
1854 type = GLType::FLOAT;
1859 type = GLType::UNDEFINED;
1864 GLType type{GLType::UNDEFINED};
1867 enum class GLESVersion
1876 * The descriptor of BeginRenderPass command
1878 struct BeginRenderPassDescriptor
1880 const GLES::RenderPass* renderPass{};
1881 const GLES::RenderTarget* renderTarget{};
1882 Rect2D renderArea{};
1883 std::vector<ClearValue> clearValues{};
1886 } // namespace Dali::Graphics::GLES
1888 #endif //DALI_GRAPHICS_API_TYPES_H