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 // Conversion functions
18 * Stucture delivers format and type that can be used
19 * when creating GL texture
21 struct GLTextureFormatType
24 * Constuctor from Graphics::Format
27 constexpr GLTextureFormatType(Graphics::Format value)
32 case Graphics::Format::UNDEFINED:
39 case Graphics::Format::L8:
41 Assign(GL_LUMINANCE, GL_UNSIGNED_BYTE);
44 case Graphics::Format::L8A8:
46 Assign(GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE);
50 // Packed formats (TODO: find supported)
51 case Graphics::Format::R4G4_UNORM_PACK8:
56 case Graphics::Format::R4G4B4A4_UNORM_PACK16:
58 Assign(GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4);
61 case Graphics::Format::B4G4R4A4_UNORM_PACK16:
64 Assign(GL_BGRA_EXT, GL_UNSIGNED_SHORT_4_4_4_4);
66 Assign(GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4);
70 case Graphics::Format::R5G6B5_UNORM_PACK16:
72 Assign(GL_RGB, GL_UNSIGNED_SHORT_5_6_5);
75 case Graphics::Format::B5G6R5_UNORM_PACK16:
78 Assign(GL_BGRA_EXT, GL_UNSIGNED_SHORT_5_6_5);
80 Assign(GL_RGBA, GL_UNSIGNED_SHORT_5_6_5);
84 case Graphics::Format::R5G5B5A1_UNORM_PACK16:
86 Assign(GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1);
89 case Graphics::Format::B5G5R5A1_UNORM_PACK16:
92 Assign(GL_BGRA_EXT, GL_UNSIGNED_SHORT_5_5_5_1);
94 Assign(GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1);
98 case Graphics::Format::A1R5G5B5_UNORM_PACK16:
105 case Graphics::Format::R8_UNORM:
107 Assign(GL_RED, GL_UNSIGNED_BYTE);
110 case Graphics::Format::R8_SNORM:
112 Assign(GL_RED, GL_BYTE);
115 case Graphics::Format::R8_USCALED:
117 Assign(GL_RED, GL_UNSIGNED_BYTE);
120 case Graphics::Format::R8_SSCALED:
122 Assign(GL_RED, GL_BYTE);
125 case Graphics::Format::R8_UINT:
127 Assign(GL_RED, GL_UNSIGNED_BYTE);
130 case Graphics::Format::R8_SINT:
132 Assign(GL_RED, GL_BYTE);
135 case Graphics::Format::R8_SRGB:
137 Assign(GL_RED, GL_BYTE);
140 case Graphics::Format::R8G8_UNORM:
142 Assign(GL_RG, GL_UNSIGNED_BYTE);
145 case Graphics::Format::R8G8_SNORM:
147 Assign(GL_RG, GL_BYTE);
150 case Graphics::Format::R8G8_USCALED:
152 Assign(GL_RG, GL_UNSIGNED_BYTE);
155 case Graphics::Format::R8G8_SSCALED:
157 Assign(GL_RG, GL_BYTE);
160 case Graphics::Format::R8G8_UINT:
162 Assign(GL_RG, GL_UNSIGNED_BYTE);
165 case Graphics::Format::R8G8_SINT:
167 Assign(GL_RG, GL_BYTE);
170 case Graphics::Format::R8G8_SRGB:
172 Assign(GL_RG, GL_BYTE);
175 case Graphics::Format::R8G8B8_UNORM:
177 Assign(GL_RGB, GL_UNSIGNED_BYTE);
180 case Graphics::Format::R8G8B8_SNORM:
182 Assign(GL_RGB, GL_BYTE);
185 case Graphics::Format::R8G8B8_USCALED:
187 Assign(GL_RGB, GL_UNSIGNED_BYTE);
190 case Graphics::Format::R8G8B8_SSCALED:
192 Assign(GL_RGB, GL_BYTE);
195 case Graphics::Format::R8G8B8_UINT:
197 Assign(GL_RGB, GL_UNSIGNED_BYTE);
200 case Graphics::Format::R8G8B8_SINT:
202 Assign(GL_RGB, GL_BYTE);
205 case Graphics::Format::R8G8B8_SRGB:
207 Assign(GL_RGB, GL_BYTE);
211 // BGR not supported in GLES
212 case Graphics::Format::B8G8R8_UNORM:
217 case Graphics::Format::B8G8R8_SNORM:
222 case Graphics::Format::B8G8R8_USCALED:
227 case Graphics::Format::B8G8R8_SSCALED:
232 case Graphics::Format::B8G8R8_UINT:
237 case Graphics::Format::B8G8R8_SINT:
242 case Graphics::Format::B8G8R8_SRGB:
249 case Graphics::Format::R8G8B8A8_UNORM:
251 Assign(GL_RGBA, GL_UNSIGNED_BYTE);
254 case Graphics::Format::R8G8B8A8_SNORM:
256 Assign(GL_RGBA, GL_BYTE);
259 case Graphics::Format::R8G8B8A8_USCALED:
261 Assign(GL_RGBA, GL_UNSIGNED_BYTE);
264 case Graphics::Format::R8G8B8A8_SSCALED:
266 Assign(GL_RGBA, GL_BYTE);
269 case Graphics::Format::R8G8B8A8_UINT:
271 Assign(GL_RGBA, GL_UNSIGNED_BYTE);
274 case Graphics::Format::R8G8B8A8_SINT:
276 Assign(GL_RGBA, GL_BYTE);
279 case Graphics::Format::R8G8B8A8_SRGB:
281 Assign(GL_RGBA, GL_BYTE);
285 // BGRA when only support GL_BGRA_EXT. otherwise, use RGBA
286 case Graphics::Format::B8G8R8A8_UNORM:
289 Assign(GL_BGRA_EXT, GL_UNSIGNED_BYTE);
291 Assign(GL_RGBA, GL_UNSIGNED_BYTE);
295 case Graphics::Format::B8G8R8A8_SNORM:
298 Assign(GL_BGRA_EXT, GL_BYTE);
300 Assign(GL_RGBA, GL_BYTE);
304 case Graphics::Format::B8G8R8A8_USCALED:
307 Assign(GL_BGRA_EXT, GL_UNSIGNED_BYTE);
309 Assign(GL_RGBA, GL_UNSIGNED_BYTE);
313 case Graphics::Format::B8G8R8A8_SSCALED:
316 Assign(GL_BGRA_EXT, GL_BYTE);
318 Assign(GL_RGBA, GL_BYTE);
322 case Graphics::Format::B8G8R8A8_UINT:
325 Assign(GL_BGRA_EXT, GL_UNSIGNED_BYTE);
327 Assign(GL_RGBA, GL_UNSIGNED_BYTE);
331 case Graphics::Format::B8G8R8A8_SINT:
334 Assign(GL_BGRA_EXT, GL_BYTE);
336 Assign(GL_RGBA, GL_BYTE);
340 case Graphics::Format::B8G8R8A8_SRGB:
343 Assign(GL_BGRA_EXT, GL_BYTE);
345 Assign(GL_RGBA, GL_BYTE);
350 // ABGR not supported
351 case Graphics::Format::A8B8G8R8_UNORM_PACK32:
356 case Graphics::Format::A8B8G8R8_SNORM_PACK32:
361 case Graphics::Format::A8B8G8R8_USCALED_PACK32:
366 case Graphics::Format::A8B8G8R8_SSCALED_PACK32:
371 case Graphics::Format::A8B8G8R8_UINT_PACK32:
376 case Graphics::Format::A8B8G8R8_SINT_PACK32:
381 case Graphics::Format::A8B8G8R8_SRGB_PACK32:
387 // TBD which of the formats are supported
388 case Graphics::Format::A2R10G10B10_UNORM_PACK32:
393 case Graphics::Format::A2R10G10B10_SNORM_PACK32:
398 case Graphics::Format::A2R10G10B10_USCALED_PACK32:
403 case Graphics::Format::A2R10G10B10_SSCALED_PACK32:
408 case Graphics::Format::A2R10G10B10_UINT_PACK32:
413 case Graphics::Format::A2R10G10B10_SINT_PACK32:
418 case Graphics::Format::A2B10G10R10_UNORM_PACK32:
423 case Graphics::Format::A2B10G10R10_SNORM_PACK32:
428 case Graphics::Format::A2B10G10R10_USCALED_PACK32:
433 case Graphics::Format::A2B10G10R10_SSCALED_PACK32:
438 case Graphics::Format::A2B10G10R10_UINT_PACK32:
443 case Graphics::Format::A2B10G10R10_SINT_PACK32:
448 case Graphics::Format::R16_UNORM:
453 case Graphics::Format::R16_SNORM:
458 case Graphics::Format::R16_USCALED:
463 case Graphics::Format::R16_SSCALED:
468 case Graphics::Format::R16_UINT:
473 case Graphics::Format::R16_SINT:
478 case Graphics::Format::R16_SFLOAT:
483 case Graphics::Format::R16G16_UNORM:
488 case Graphics::Format::R16G16_SNORM:
493 case Graphics::Format::R16G16_USCALED:
498 case Graphics::Format::R16G16_SSCALED:
503 case Graphics::Format::R16G16_UINT:
508 case Graphics::Format::R16G16_SINT:
513 case Graphics::Format::R16G16_SFLOAT:
518 case Graphics::Format::R16G16B16_UNORM:
523 case Graphics::Format::R16G16B16_SNORM:
528 case Graphics::Format::R16G16B16_USCALED:
533 case Graphics::Format::R16G16B16_SSCALED:
538 case Graphics::Format::R16G16B16_UINT:
543 case Graphics::Format::R16G16B16_SINT:
548 case Graphics::Format::R16G16B16_SFLOAT:
550 // GLES 3.0 floating point formats.
551 AssignInternal(GL_RGB, GL_R11F_G11F_B10F, GL_HALF_FLOAT); // DALi uses compact internal format
554 case Graphics::Format::R16G16B16A16_UNORM:
559 case Graphics::Format::R16G16B16A16_SNORM:
564 case Graphics::Format::R16G16B16A16_USCALED:
569 case Graphics::Format::R16G16B16A16_SSCALED:
574 case Graphics::Format::R16G16B16A16_UINT:
579 case Graphics::Format::R16G16B16A16_SINT:
584 case Graphics::Format::R16G16B16A16_SFLOAT:
589 case Graphics::Format::R32_UINT:
594 case Graphics::Format::R32_SINT:
599 case Graphics::Format::R32_SFLOAT:
604 case Graphics::Format::R32G32_UINT:
609 case Graphics::Format::R32G32_SINT:
614 case Graphics::Format::R32G32_SFLOAT:
619 case Graphics::Format::R32G32B32_UINT:
624 case Graphics::Format::R32G32B32_SINT:
629 case Graphics::Format::R32G32B32_SFLOAT:
631 AssignInternal(GL_RGB, GL_R11F_G11F_B10F, GL_FLOAT); // DALi uses compact internal format
634 case Graphics::Format::R32G32B32A32_UINT:
639 case Graphics::Format::R32G32B32A32_SINT:
644 case Graphics::Format::R32G32B32A32_SFLOAT:
649 case Graphics::Format::R64_UINT:
654 case Graphics::Format::R64_SINT:
659 case Graphics::Format::R64_SFLOAT:
664 case Graphics::Format::R64G64_UINT:
669 case Graphics::Format::R64G64_SINT:
674 case Graphics::Format::R64G64_SFLOAT:
679 case Graphics::Format::R64G64B64_UINT:
684 case Graphics::Format::R64G64B64_SINT:
689 case Graphics::Format::R64G64B64_SFLOAT:
694 case Graphics::Format::R64G64B64A64_UINT:
699 case Graphics::Format::R64G64B64A64_SINT:
704 case Graphics::Format::R64G64B64A64_SFLOAT:
709 case Graphics::Format::R11G11B10_UFLOAT_PACK32:
711 AssignInternal(GL_RGB, GL_R11F_G11F_B10F, GL_FLOAT);
714 case Graphics::Format::B10G11R11_UFLOAT_PACK32:
719 case Graphics::Format::E5B9G9R9_UFLOAT_PACK32:
724 case Graphics::Format::D16_UNORM:
726 // GLES 3.0 depth and stencil formats
727 Assign(GL_DEPTH_COMPONENT, GL_UNSIGNED_INT);
730 case Graphics::Format::X8_D24_UNORM_PACK32:
735 case Graphics::Format::D32_SFLOAT:
737 // GLES 3.0 depth and stencil formats
738 AssignInternal(GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT32F, GL_FLOAT);
741 case Graphics::Format::S8_UINT:
746 case Graphics::Format::D16_UNORM_S8_UINT:
751 case Graphics::Format::D24_UNORM_S8_UINT:
753 // GLES 3.0 depth and stencil formats
754 AssignInternal(GL_DEPTH_STENCIL, GL_DEPTH24_STENCIL8, GL_UNSIGNED_INT_24_8);
757 case Graphics::Format::D32_SFLOAT_S8_UINT:
762 case Graphics::Format::BC1_RGB_UNORM_BLOCK:
767 case Graphics::Format::BC1_RGB_SRGB_BLOCK:
772 case Graphics::Format::BC1_RGBA_UNORM_BLOCK:
777 case Graphics::Format::BC1_RGBA_SRGB_BLOCK:
782 case Graphics::Format::BC2_UNORM_BLOCK:
787 case Graphics::Format::BC2_SRGB_BLOCK:
792 case Graphics::Format::BC3_UNORM_BLOCK:
797 case Graphics::Format::BC3_SRGB_BLOCK:
802 case Graphics::Format::BC4_UNORM_BLOCK:
807 case Graphics::Format::BC4_SNORM_BLOCK:
812 case Graphics::Format::BC5_UNORM_BLOCK:
817 case Graphics::Format::BC5_SNORM_BLOCK:
822 case Graphics::Format::BC6H_UFLOAT_BLOCK:
827 case Graphics::Format::BC6H_SFLOAT_BLOCK:
832 case Graphics::Format::BC7_UNORM_BLOCK:
837 case Graphics::Format::BC7_SRGB_BLOCK:
842 case Graphics::Format::ETC2_R8G8B8_UNORM_BLOCK:
844 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_RGB8_ETC2.
845 Assign(GL_COMPRESSED_RGB8_ETC2, 0);
848 case Graphics::Format::ETC2_R8G8B8_SRGB_BLOCK:
850 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_SRGB8_ETC2.
851 Assign(GL_COMPRESSED_SRGB8_ETC2, 0);
854 case Graphics::Format::ETC2_R8G8B8A1_UNORM_BLOCK:
856 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2.
857 Assign(GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, 0);
860 case Graphics::Format::ETC2_R8G8B8A1_SRGB_BLOCK:
862 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2.
863 Assign(GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, 0);
866 case Graphics::Format::ETC2_R8G8B8A8_UNORM_BLOCK:
868 Assign(GL_COMPRESSED_RGBA8_ETC2_EAC, 0);
871 case Graphics::Format::ETC2_R8G8B8A8_SRGB_BLOCK:
873 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, 0);
876 case Graphics::Format::EAC_R11_UNORM_BLOCK:
878 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_R11_EAC.
879 Assign(GL_COMPRESSED_R11_EAC, 0);
882 case Graphics::Format::EAC_R11_SNORM_BLOCK:
884 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_SIGNED_R11_EAC.
885 Assign(GL_COMPRESSED_SIGNED_R11_EAC, 0);
888 case Graphics::Format::EAC_R11G11_UNORM_BLOCK:
890 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_RG11_EAC.
891 Assign(GL_COMPRESSED_RG11_EAC, 0);
894 case Graphics::Format::EAC_R11G11_SNORM_BLOCK:
896 ///! Using GLES 3.0 standard compressed pixel format COMPRESSED_SIGNED_RG11_EAC.
897 Assign(GL_COMPRESSED_SIGNED_RG11_EAC, 0);
900 case Graphics::Format::ASTC_4x4_UNORM_BLOCK:
902 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_4x4_KHR.
903 Assign(GL_COMPRESSED_RGBA_ASTC_4x4_KHR, 0);
906 case Graphics::Format::ASTC_4x4_SRGB_BLOCK:
908 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR.
909 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, 0);
912 case Graphics::Format::ASTC_5x4_UNORM_BLOCK:
914 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_5x4_KHR.
915 Assign(GL_COMPRESSED_RGBA_ASTC_5x4_KHR, 0);
918 case Graphics::Format::ASTC_5x4_SRGB_BLOCK:
920 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR.
921 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, 0);
924 case Graphics::Format::ASTC_5x5_UNORM_BLOCK:
926 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_5x5_KHR.
927 Assign(GL_COMPRESSED_RGBA_ASTC_5x5_KHR, 0);
930 case Graphics::Format::ASTC_5x5_SRGB_BLOCK:
932 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR.
933 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, 0);
936 case Graphics::Format::ASTC_6x5_UNORM_BLOCK:
938 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_6x5_KHR.
939 Assign(GL_COMPRESSED_RGBA_ASTC_6x5_KHR, 0);
942 case Graphics::Format::ASTC_6x5_SRGB_BLOCK:
944 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR.
945 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, 0);
948 case Graphics::Format::ASTC_6x6_UNORM_BLOCK:
950 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_6x6_KHR.
951 Assign(GL_COMPRESSED_RGBA_ASTC_6x6_KHR, 0);
954 case Graphics::Format::ASTC_6x6_SRGB_BLOCK:
956 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR.
957 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, 0);
960 case Graphics::Format::ASTC_8x5_UNORM_BLOCK:
962 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_8x5_KHR.
963 Assign(GL_COMPRESSED_RGBA_ASTC_8x5_KHR, 0);
966 case Graphics::Format::ASTC_8x5_SRGB_BLOCK:
968 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR.
969 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, 0);
972 case Graphics::Format::ASTC_8x6_UNORM_BLOCK:
974 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_8x6_KHR.
975 Assign(GL_COMPRESSED_RGBA_ASTC_8x6_KHR, 0);
978 case Graphics::Format::ASTC_8x6_SRGB_BLOCK:
980 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR.
981 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, 0);
984 case Graphics::Format::ASTC_8x8_UNORM_BLOCK:
986 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_8x8_KHR.
987 Assign(GL_COMPRESSED_RGBA_ASTC_8x8_KHR, 0);
990 case Graphics::Format::ASTC_8x8_SRGB_BLOCK:
992 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR.
993 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, 0);
996 case Graphics::Format::ASTC_10x5_UNORM_BLOCK:
998 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_10x5_KHR.
999 Assign(GL_COMPRESSED_RGBA_ASTC_10x5_KHR, 0);
1002 case Graphics::Format::ASTC_10x5_SRGB_BLOCK:
1004 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR.
1005 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR, 0);
1008 case Graphics::Format::ASTC_10x6_UNORM_BLOCK:
1010 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_10x6_KHR.
1011 Assign(GL_COMPRESSED_RGBA_ASTC_10x6_KHR, 0);
1014 case Graphics::Format::ASTC_10x6_SRGB_BLOCK:
1016 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR.
1017 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, 0);
1020 case Graphics::Format::ASTC_10x8_UNORM_BLOCK:
1022 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_10x8_KHR.
1023 Assign(GL_COMPRESSED_RGBA_ASTC_10x8_KHR, 0);
1026 case Graphics::Format::ASTC_10x8_SRGB_BLOCK:
1028 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR.
1029 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, 0);
1032 case Graphics::Format::ASTC_10x10_UNORM_BLOCK:
1034 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_10x10_KHR.
1035 Assign(GL_COMPRESSED_RGBA_ASTC_10x10_KHR, 0);
1038 case Graphics::Format::ASTC_10x10_SRGB_BLOCK:
1040 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR.
1041 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, 0);
1044 case Graphics::Format::ASTC_12x10_UNORM_BLOCK:
1046 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_12x10_KHR.
1047 Assign(GL_COMPRESSED_RGBA_ASTC_12x10_KHR, 0);
1050 case Graphics::Format::ASTC_12x10_SRGB_BLOCK:
1052 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR.
1053 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, 0);
1056 case Graphics::Format::ASTC_12x12_UNORM_BLOCK:
1058 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_12x12_KHR.
1059 Assign(GL_COMPRESSED_RGBA_ASTC_12x12_KHR, 0);
1062 case Graphics::Format::ASTC_12x12_SRGB_BLOCK:
1064 ///! Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR.
1065 Assign(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, 0);
1068 case Graphics::Format::PVRTC1_2BPP_UNORM_BLOCK_IMG:
1073 case Graphics::Format::PVRTC1_4BPP_UNORM_BLOCK_IMG:
1075 ///! Using non-standard GLES 2.0 extension compressed pixel format COMPRESSED_RGB_PVRTC_4BPPV1.
1076 Assign(0x8C00, 0); ///! < Hardcoded so we can test before we move to GLES 3.0 or greater.
1080 case Graphics::Format::PVRTC2_2BPP_UNORM_BLOCK_IMG:
1085 case Graphics::Format::PVRTC2_4BPP_UNORM_BLOCK_IMG:
1090 case Graphics::Format::PVRTC1_2BPP_SRGB_BLOCK_IMG:
1095 case Graphics::Format::PVRTC1_4BPP_SRGB_BLOCK_IMG:
1100 case Graphics::Format::PVRTC2_2BPP_SRGB_BLOCK_IMG:
1105 case Graphics::Format::PVRTC2_4BPP_SRGB_BLOCK_IMG:
1113 constexpr inline void Assign(uint32_t f, uint32_t t)
1119 constexpr inline void AssignInternal(uint32_t f, uint32_t i, uint32_t t)
1127 uint32_t internalFormat{0};
1131 struct FormatCompression
1134 * Constuctor from Graphics::Format
1137 constexpr explicit FormatCompression(Graphics::Format value)
1141 case Graphics::Format::ETC2_R8G8B8_UNORM_BLOCK:
1142 case Graphics::Format::ETC2_R8G8B8_SRGB_BLOCK:
1143 case Graphics::Format::ETC2_R8G8B8A1_UNORM_BLOCK:
1144 case Graphics::Format::ETC2_R8G8B8A1_SRGB_BLOCK:
1145 case Graphics::Format::ETC2_R8G8B8A8_UNORM_BLOCK:
1146 case Graphics::Format::ETC2_R8G8B8A8_SRGB_BLOCK:
1147 case Graphics::Format::EAC_R11_UNORM_BLOCK:
1148 case Graphics::Format::EAC_R11_SNORM_BLOCK:
1149 case Graphics::Format::EAC_R11G11_UNORM_BLOCK:
1150 case Graphics::Format::EAC_R11G11_SNORM_BLOCK:
1151 case Graphics::Format::ASTC_4x4_UNORM_BLOCK:
1152 case Graphics::Format::ASTC_4x4_SRGB_BLOCK:
1153 case Graphics::Format::ASTC_5x4_UNORM_BLOCK:
1154 case Graphics::Format::ASTC_5x4_SRGB_BLOCK:
1155 case Graphics::Format::ASTC_5x5_UNORM_BLOCK:
1156 case Graphics::Format::ASTC_5x5_SRGB_BLOCK:
1157 case Graphics::Format::ASTC_6x5_UNORM_BLOCK:
1158 case Graphics::Format::ASTC_6x5_SRGB_BLOCK:
1159 case Graphics::Format::ASTC_6x6_UNORM_BLOCK:
1160 case Graphics::Format::ASTC_6x6_SRGB_BLOCK:
1161 case Graphics::Format::ASTC_8x5_UNORM_BLOCK:
1162 case Graphics::Format::ASTC_8x5_SRGB_BLOCK:
1163 case Graphics::Format::ASTC_8x6_UNORM_BLOCK:
1164 case Graphics::Format::ASTC_8x6_SRGB_BLOCK:
1165 case Graphics::Format::ASTC_8x8_UNORM_BLOCK:
1166 case Graphics::Format::ASTC_8x8_SRGB_BLOCK:
1167 case Graphics::Format::ASTC_10x5_UNORM_BLOCK:
1168 case Graphics::Format::ASTC_10x5_SRGB_BLOCK:
1169 case Graphics::Format::ASTC_10x6_UNORM_BLOCK:
1170 case Graphics::Format::ASTC_10x6_SRGB_BLOCK:
1171 case Graphics::Format::ASTC_10x8_UNORM_BLOCK:
1172 case Graphics::Format::ASTC_10x8_SRGB_BLOCK:
1173 case Graphics::Format::ASTC_10x10_UNORM_BLOCK:
1174 case Graphics::Format::ASTC_10x10_SRGB_BLOCK:
1175 case Graphics::Format::ASTC_12x10_UNORM_BLOCK:
1176 case Graphics::Format::ASTC_12x10_SRGB_BLOCK:
1177 case Graphics::Format::ASTC_12x12_UNORM_BLOCK:
1178 case Graphics::Format::ASTC_12x12_SRGB_BLOCK:
1179 case Graphics::Format::PVRTC1_2BPP_UNORM_BLOCK_IMG:
1180 case Graphics::Format::PVRTC1_4BPP_UNORM_BLOCK_IMG:
1181 case Graphics::Format::PVRTC2_2BPP_UNORM_BLOCK_IMG:
1182 case Graphics::Format::PVRTC2_4BPP_UNORM_BLOCK_IMG:
1183 case Graphics::Format::PVRTC1_2BPP_SRGB_BLOCK_IMG:
1184 case Graphics::Format::PVRTC1_4BPP_SRGB_BLOCK_IMG:
1185 case Graphics::Format::PVRTC2_2BPP_SRGB_BLOCK_IMG:
1186 case Graphics::Format::PVRTC2_4BPP_SRGB_BLOCK_IMG:
1193 bool compressed{false};
1196 struct GLSamplerFilter
1198 constexpr explicit GLSamplerFilter(Graphics::SamplerFilter filter)
1202 case Graphics::SamplerFilter::NEAREST:
1204 glFilter = GL_NEAREST;
1207 case Graphics::SamplerFilter::LINEAR:
1209 glFilter = GL_LINEAR;
1214 uint32_t glFilter{0};
1217 struct GLSamplerFilterAndMipMapMode
1219 constexpr explicit GLSamplerFilterAndMipMapMode(Graphics::SamplerFilter filter,
1220 Graphics::SamplerMipmapMode mipMapMode)
1224 case Graphics::SamplerFilter::NEAREST:
1228 case Graphics::SamplerMipmapMode::NONE:
1230 glFilter = GL_NEAREST;
1233 case Graphics::SamplerMipmapMode::NEAREST:
1235 glFilter = GL_NEAREST_MIPMAP_NEAREST;
1238 case Graphics::SamplerMipmapMode::LINEAR:
1240 glFilter = GL_NEAREST_MIPMAP_LINEAR;
1247 case Graphics::SamplerFilter::LINEAR:
1251 case Graphics::SamplerMipmapMode::NONE:
1253 glFilter = GL_LINEAR;
1256 case Graphics::SamplerMipmapMode::NEAREST:
1258 glFilter = GL_LINEAR_MIPMAP_NEAREST;
1261 case Graphics::SamplerMipmapMode::LINEAR:
1263 glFilter = GL_LINEAR_MIPMAP_LINEAR;
1272 inline explicit operator uint32_t() const
1277 inline operator int() const
1279 return static_cast<int>(glFilter);
1282 uint32_t glFilter{0};
1285 /** Converts vertex format to GL */
1286 struct GLVertexFormat
1288 constexpr explicit GLVertexFormat(Graphics::VertexInputFormat gfxFormat)
1292 case VertexInputFormat::FVECTOR2:
1298 case VertexInputFormat::FVECTOR3:
1304 case VertexInputFormat::FVECTOR4:
1310 case VertexInputFormat::FLOAT:
1316 case VertexInputFormat::INTEGER:
1322 case VertexInputFormat::IVECTOR2:
1328 case VertexInputFormat::IVECTOR3:
1334 case VertexInputFormat::IVECTOR4:
1340 case VertexInputFormat::UNDEFINED:
1353 struct GLTextureTarget
1355 constexpr explicit GLTextureTarget(Graphics::TextureType graphicsTextureType)
1357 switch(graphicsTextureType)
1359 case Graphics::TextureType::TEXTURE_2D:
1361 target = GL_TEXTURE_2D;
1364 case Graphics::TextureType::TEXTURE_3D:
1366 target = GL_TEXTURE_3D;
1369 case Graphics::TextureType::TEXTURE_CUBEMAP:
1371 target = GL_TEXTURE_CUBE_MAP;
1376 GLenum target{GL_TEXTURE_2D};
1379 struct GLAddressMode
1381 constexpr explicit GLAddressMode(Graphics::SamplerAddressMode graphicsAddressMode)
1383 switch(graphicsAddressMode)
1385 case Graphics::SamplerAddressMode::REPEAT:
1387 texParameter = GL_REPEAT;
1390 case Graphics::SamplerAddressMode::MIRRORED_REPEAT:
1392 texParameter = GL_MIRRORED_REPEAT;
1395 case Graphics::SamplerAddressMode::CLAMP_TO_EDGE:
1397 texParameter = GL_CLAMP_TO_EDGE;
1400 case Graphics::SamplerAddressMode::CLAMP_TO_BORDER:
1402 texParameter = GL_CLAMP_TO_EDGE;
1405 case Graphics::SamplerAddressMode::MIRROR_CLAMP_TO_EDGE:
1407 texParameter = GL_CLAMP_TO_EDGE;
1412 GLenum texParameter{GL_CLAMP_TO_EDGE};
1417 constexpr explicit GLCompareOp(Graphics::CompareOp compareOp)
1421 case Graphics::CompareOp::NEVER:
1424 case Graphics::CompareOp::LESS:
1427 case Graphics::CompareOp::EQUAL:
1430 case Graphics::CompareOp::LESS_OR_EQUAL:
1433 case Graphics::CompareOp::GREATER:
1436 case Graphics::CompareOp::NOT_EQUAL:
1439 case Graphics::CompareOp::GREATER_OR_EQUAL:
1442 case Graphics::CompareOp::ALWAYS:
1452 constexpr explicit GLStencilOp(Graphics::StencilOp stencilOp)
1456 case Graphics::StencilOp::KEEP:
1459 case Graphics::StencilOp::ZERO:
1462 case Graphics::StencilOp::REPLACE:
1465 case Graphics::StencilOp::INCREMENT_AND_CLAMP:
1468 case Graphics::StencilOp::DECREMENT_AND_CLAMP:
1471 case Graphics::StencilOp::INVERT:
1474 case Graphics::StencilOp::INCREMENT_AND_WRAP:
1477 case Graphics::StencilOp::DECREMENT_AND_WRAP:
1486 * @brief Descriptor of single buffer binding within
1489 struct VertexBufferBindingDescriptor
1491 const GLES::Buffer* buffer{nullptr};
1492 uint32_t offset{0u};
1496 * @brief Descriptor of ix buffer binding within
1499 struct IndexBufferBindingDescriptor
1501 const GLES::Buffer* buffer{nullptr};
1503 Graphics::Format format{};
1507 * @brief Descriptor of uniform buffer binding within
1510 struct UniformBufferBindingDescriptor
1512 const GLES::Buffer* buffer{nullptr};
1513 uint32_t binding{0u};
1514 uint32_t offset{0u};
1515 bool emulated; ///<true if UBO is emulated for old gfx API
1519 * @brief The descriptor of draw call
1521 struct DrawCallDescriptor
1524 * @brief Enum specifying type of the draw call
1530 DRAW_INDEXED_INDIRECT
1533 Type type{}; ///< Type of the draw call
1536 * Union contains data for all types of draw calls.
1541 * @brief Vertex array draw
1545 uint32_t vertexCount;
1546 uint32_t instanceCount;
1547 uint32_t firstVertex;
1548 uint32_t firstInstance;
1552 * @brief Indexed draw
1556 uint32_t indexCount;
1557 uint32_t instanceCount;
1558 uint32_t firstIndex;
1559 int32_t vertexOffset;
1560 uint32_t firstInstance;
1564 * @brief Indexed draw indirect
1568 const GLES::Buffer* buffer;
1572 } drawIndexedIndirect;
1577 * @brief Topologu conversion from Graphics to GLES
1581 explicit constexpr GLESTopology(PrimitiveTopology topology)
1585 case PrimitiveTopology::POINT_LIST:
1587 primitiveTopology = GL_POINTS;
1590 case PrimitiveTopology::LINE_LIST:
1592 primitiveTopology = GL_LINES;
1595 case PrimitiveTopology::LINE_LOOP:
1597 primitiveTopology = GL_LINE_LOOP;
1600 case PrimitiveTopology::LINE_STRIP:
1602 primitiveTopology = GL_LINE_STRIP;
1605 case PrimitiveTopology::TRIANGLE_LIST:
1607 primitiveTopology = GL_TRIANGLES;
1610 case PrimitiveTopology::TRIANGLE_STRIP:
1612 primitiveTopology = GL_TRIANGLE_STRIP;
1615 case PrimitiveTopology::TRIANGLE_FAN:
1617 primitiveTopology = GL_TRIANGLE_FAN;
1624 * @brief Explicit type conversion operator
1625 * @return converted value
1627 constexpr inline operator GLenum() const
1629 return primitiveTopology;
1632 GLenum primitiveTopology{0}; ///< Topology
1636 * @brief Index format conversion structure
1638 struct GLIndexFormat
1640 explicit constexpr GLIndexFormat(Format _format)
1644 // TODO: add more formats
1645 case Format::R16_UINT:
1647 format = GL_UNSIGNED_SHORT;
1658 * @brief Explicit type conversion operator
1659 * @return converted value
1661 constexpr inline operator GLenum() const
1666 GLenum format{0}; ///< Converted format
1670 * @brief Conversion of blending function factor
1674 constexpr explicit GLBlendFunc(Graphics::BlendFactor factor)
1678 case Graphics::BlendFactor::ZERO:
1683 case Graphics::BlendFactor::ONE:
1688 case Graphics::BlendFactor::SRC_COLOR:
1690 glFactor = GL_SRC_COLOR;
1693 case Graphics::BlendFactor::ONE_MINUS_SRC_COLOR:
1695 glFactor = GL_ONE_MINUS_SRC_COLOR;
1698 case Graphics::BlendFactor::DST_COLOR:
1700 glFactor = GL_DST_COLOR;
1703 case Graphics::BlendFactor::ONE_MINUS_DST_COLOR:
1705 glFactor = GL_ONE_MINUS_DST_COLOR;
1708 case Graphics::BlendFactor::SRC_ALPHA:
1710 glFactor = GL_SRC_ALPHA;
1713 case Graphics::BlendFactor::ONE_MINUS_SRC_ALPHA:
1715 glFactor = GL_ONE_MINUS_SRC_ALPHA;
1718 case Graphics::BlendFactor::DST_ALPHA:
1720 glFactor = GL_DST_ALPHA;
1723 case Graphics::BlendFactor::ONE_MINUS_DST_ALPHA:
1725 glFactor = GL_ONE_MINUS_DST_ALPHA;
1728 case Graphics::BlendFactor::CONSTANT_COLOR:
1730 glFactor = GL_CONSTANT_COLOR;
1733 case Graphics::BlendFactor::ONE_MINUS_CONSTANT_COLOR:
1735 glFactor = GL_ONE_MINUS_CONSTANT_COLOR;
1738 case Graphics::BlendFactor::CONSTANT_ALPHA:
1740 glFactor = GL_CONSTANT_ALPHA;
1743 case Graphics::BlendFactor::ONE_MINUS_CONSTANT_ALPHA:
1745 glFactor = GL_ONE_MINUS_CONSTANT_ALPHA;
1748 case Graphics::BlendFactor::SRC_ALPHA_SATURATE:
1750 glFactor = GL_SRC_ALPHA_SATURATE;
1753 // Below may be unsupported without extension
1754 case Graphics::BlendFactor::SRC1_COLOR:
1759 case Graphics::BlendFactor::ONE_MINUS_SRC1_COLOR:
1764 case Graphics::BlendFactor::SRC1_ALPHA:
1769 case Graphics::BlendFactor::ONE_MINUS_SRC1_ALPHA:
1778 * @brief Explicit type conversion operator
1779 * @return converted value
1781 constexpr inline operator GLenum() const
1786 GLenum glFactor{0u};
1790 * @brief Converts Blend Op to GL
1794 constexpr explicit GLBlendOp(Graphics::BlendOp blendOp)
1798 case Graphics::BlendOp::ADD:
1800 glBlendOp = GL_FUNC_ADD;
1803 case Graphics::BlendOp::SUBTRACT:
1805 glBlendOp = GL_FUNC_SUBTRACT;
1808 case Graphics::BlendOp::REVERSE_SUBTRACT:
1810 glBlendOp = GL_FUNC_REVERSE_SUBTRACT;
1813 case Graphics::BlendOp::MIN:
1818 case Graphics::BlendOp::MAX:
1823 case Graphics::BlendOp::MULTIPLY:
1825 glBlendOp = GL_MULTIPLY;
1828 case Graphics::BlendOp::SCREEN:
1830 glBlendOp = GL_SCREEN;
1833 case Graphics::BlendOp::OVERLAY:
1835 glBlendOp = GL_OVERLAY;
1838 case Graphics::BlendOp::DARKEN:
1840 glBlendOp = GL_DARKEN;
1843 case Graphics::BlendOp::LIGHTEN:
1845 glBlendOp = GL_LIGHTEN;
1848 case Graphics::BlendOp::COLOR_DODGE:
1850 glBlendOp = GL_COLORDODGE;
1853 case Graphics::BlendOp::COLOR_BURN:
1855 glBlendOp = GL_COLORBURN;
1858 case Graphics::BlendOp::HARD_LIGHT:
1860 glBlendOp = GL_HARDLIGHT;
1863 case Graphics::BlendOp::SOFT_LIGHT:
1865 glBlendOp = GL_SOFTLIGHT;
1868 case Graphics::BlendOp::DIFFERENCE:
1870 glBlendOp = GL_DIFFERENCE;
1873 case Graphics::BlendOp::EXCLUSION:
1875 glBlendOp = GL_EXCLUSION;
1878 case Graphics::BlendOp::HUE:
1880 glBlendOp = GL_HSL_HUE;
1883 case Graphics::BlendOp::SATURATION:
1885 glBlendOp = GL_HSL_SATURATION;
1888 case Graphics::BlendOp::COLOR:
1890 glBlendOp = GL_HSL_COLOR;
1893 case Graphics::BlendOp::LUMINOSITY:
1895 glBlendOp = GL_HSL_LUMINOSITY;
1902 * @brief Explicit type conversion operator
1903 * @return converted value
1905 constexpr inline operator GLenum() const
1910 GLenum glBlendOp{0u};
1914 * @brief Converts GL cull mode
1918 constexpr explicit GLCullMode(Graphics::CullMode cullMode)
1922 case Graphics::CullMode::NONE: // this isn't really accepted by GL!
1924 glCullMode = GL_NONE;
1927 case Graphics::CullMode::FRONT:
1929 glCullMode = GL_FRONT;
1932 case Graphics::CullMode::BACK:
1934 glCullMode = GL_BACK;
1937 case Graphics::CullMode::FRONT_AND_BACK:
1939 glCullMode = GL_FRONT_AND_BACK;
1946 * @brief Explicit type conversion operator
1947 * @return converted value
1949 constexpr inline operator GLenum() const
1954 GLenum glCullMode{0u};
1958 * @brief enum with GL types
1963 FLOAT_VEC2 = 0x8B50,
1964 FLOAT_VEC3 = 0x8B51,
1965 FLOAT_VEC4 = 0x8B52,
1973 FLOAT_MAT2 = 0x8B5A,
1974 FLOAT_MAT3 = 0x8B5B,
1975 FLOAT_MAT4 = 0x8B5C,
1976 SAMPLER_2D = 0x8B5E,
1977 SAMPLER_CUBE = 0x8B60,
1979 UNSIGNED_BYTE = 0x1401,
1981 UNSIGNED_SHORT = 0x1403,
1983 UNSIGNED_INT = 0x1405,
1989 * @brief GL type conversion (used with reflection)
1991 struct GLTypeConversion
1993 constexpr explicit GLTypeConversion(GLenum value)
1999 type = GLType::FLOAT_VEC2;
2004 type = GLType::FLOAT_VEC3;
2009 type = GLType::FLOAT_VEC4;
2014 type = GLType::INT_VEC2;
2019 type = GLType::INT_VEC3;
2024 type = GLType::INT_VEC4;
2029 type = GLType::BOOL;
2034 type = GLType::BOOL_VEC2;
2039 type = GLType::BOOL_VEC3;
2044 type = GLType::BOOL_VEC4;
2049 type = GLType::FLOAT_MAT2;
2054 type = GLType::FLOAT_MAT3;
2059 type = GLType::FLOAT_MAT4;
2064 type = GLType::SAMPLER_2D;
2067 case GL_SAMPLER_CUBE:
2069 type = GLType::SAMPLER_CUBE;
2074 type = GLType::FLOAT;
2079 type = GLType::UNDEFINED;
2084 GLType type{GLType::UNDEFINED};
2087 enum class GLESVersion
2096 * @brief Types of bond texture cached in the context
2098 enum class BoundTextureType
2103 TEXTURE_EXTERNAL_OES
2107 * This class stores indirect pointer, used by the CommandBuffer
2108 * to store data allocated within resizeable pool
2113 uint32_t ptr; // relative pointer
2114 void** base; // base pointer
2116 inline T* operator->()
2118 return reinterpret_cast<T*>((reinterpret_cast<uint8_t*>(*base) + ptr));
2121 inline T& operator*()
2123 return *reinterpret_cast<T*>((reinterpret_cast<uint8_t*>(*base) + ptr));
2126 // Returns indirect pointer casted to requested type
2129 auto val = reinterpret_cast<T*>((reinterpret_cast<uint8_t*>(*base) + ptr));
2133 inline T& operator[](int index)
2135 return reinterpret_cast<T*>((reinterpret_cast<uint8_t*>(*base) + ptr))[index];
2138 // Fake assignment operator for void* type
2139 inline IndirectPtr<T>& operator=(void* p)
2148 * The descriptor of BeginRenderPass command
2150 struct BeginRenderPassDescriptor
2152 const GLES::RenderPass* renderPass;
2153 const GLES::RenderTarget* renderTarget;
2155 IndirectPtr<ClearValue> clearValues;
2156 uint32_t clearValuesCount;
2159 } // namespace Dali::Graphics::GLES
2161 #endif //DALI_GRAPHICS_API_TYPES_H