Cogs.Core
FormatsGL20.cpp
1#include "FormatsGL20.h"
2
3#include "../TextureData.h"
4#include "../SamplerState.h"
5
6const GLenum Cogs::OpenGL20::TextureFormats[] = {
7 GL_INVALID_ENUM,
8
9 // Unsigned normalized byte formats
10
11 GL_R8,
12 GL_RG8,
13 GL_RGB8,
14 GL_RGBA8,
15
16 // Unsigned 16 bit normalized integer formats
17
18 GL_R16,
19 GL_RG16,
20 GL_RGB16,
21 GL_RGBA16,
22
23 // Signed normalized byte formats
24
25 GL_R8_SNORM,
26 GL_RG8_SNORM,
27 GL_RGB8_SNORM,
28 GL_RGBA8_SNORM,
29
30 // Signed 16 bit normalized integer formats
31
32 GL_R16_SNORM,
33 GL_RG16_SNORM,
34 GL_RGB16_SNORM,
35 GL_RGBA16_SNORM,
36
37 // Unsigned byte formats
38
39 GL_R8UI,
40 GL_RG8UI,
41 GL_RGB8UI,
42 GL_RGBA8UI,
43
44 // Unsigned 16 bit integer formats
45
46 GL_R16UI,
47 GL_RG16UI,
48 GL_RGB16UI,
49 GL_RGBA16UI,
50
51 // Unsigned 32 bit integer formats
52
53 GL_R32UI,
54 GL_RG32UI,
55 GL_RGB32UI,
56 GL_RGBA32UI,
57
58 // Signed byte formats
59
60 GL_R8I,
61 GL_RG8I,
62 GL_RGB8I,
63 GL_RGBA8I,
64
65 // Signed 16 bit integer formats
66
67 GL_R16I,
68 GL_RG16I,
69 GL_RGB16I,
70 GL_RGBA16I,
71
72 // Signed 32 bit integer formats
73
74 GL_R32I,
75 GL_RG32I,
76 GL_RGB32I,
77 GL_RGBA32I,
78
79 // 16 bit floating point formats
80
81 GL_R16F,
82 GL_RG16F,
83 GL_RGB16F,
84 GL_RGBA16F,
85
86 // 32 bit floating point formats
87
88 GL_R32F,
89 GL_RG32F,
90 GL_RGB32F,
91 GL_RGBA32F,
92
93 // Depth buffer formats
94
95 GL_DEPTH_COMPONENT16,
96 GL_DEPTH_COMPONENT24,
97 GL_DEPTH24_STENCIL8,
98 GL_DEPTH_COMPONENT32F,
99 GL_DEPTH_COMPONENT32,
100 GL_DEPTH_COMPONENT16,
101
102 // 8 bit typeless formats
103
104 GL_INVALID_ENUM,
105 GL_INVALID_ENUM,
106 GL_INVALID_ENUM,
107 GL_INVALID_ENUM,
108
109 // Reverse component order formats.
110
111 GL_RGB8,
112 GL_RGBA8,
113
114 // Alpha formats
115
116 GL_ALPHA,
117
118 // Compressed formats
119
120 GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
121 GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
122 GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,
123 GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,
124 GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,
125 GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,
126 GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
127 GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
128 GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,
129 GL_COMPRESSED_RED_RGTC1,
130 GL_COMPRESSED_RED_RGTC1,
131 GL_COMPRESSED_SIGNED_RED_RGTC1,
132 GL_COMPRESSED_RG_RGTC2,
133 GL_COMPRESSED_RG_RGTC2,
134 GL_COMPRESSED_SIGNED_RG_RGTC2,
135
136 // BC7
137 GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB,
138 GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB,
139 GL_COMPRESSED_RGBA_BPTC_UNORM_ARB,
140 GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB,
141
142 // PVRTC Not supported in OpenGL
143 GL_INVALID_ENUM,
144 GL_INVALID_ENUM,
145 GL_INVALID_ENUM,
146 GL_INVALID_ENUM,
147
148 // ETC
149 GL_COMPRESSED_R11_EAC,
150 GL_COMPRESSED_SIGNED_R11_EAC,
151 GL_COMPRESSED_RG11_EAC,
152 GL_COMPRESSED_SIGNED_RG11_EAC,
153
154 GL_COMPRESSED_RGB8_ETC2,
155 GL_COMPRESSED_SRGB8_ETC2,
156 GL_COMPRESSED_RGBA8_ETC2_EAC,
157 GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
158
159 // ASTC
160 GL_COMPRESSED_RGBA_ASTC_4x4_KHR,
161 GL_COMPRESSED_RGBA_ASTC_5x4_KHR,
162 GL_COMPRESSED_RGBA_ASTC_5x5_KHR,
163 GL_COMPRESSED_RGBA_ASTC_6x5_KHR,
164 GL_COMPRESSED_RGBA_ASTC_6x6_KHR,
165 GL_COMPRESSED_RGBA_ASTC_8x5_KHR,
166 GL_COMPRESSED_RGBA_ASTC_8x6_KHR,
167 GL_COMPRESSED_RGBA_ASTC_8x8_KHR,
168 GL_COMPRESSED_RGBA_ASTC_10x5_KHR,
169 GL_COMPRESSED_RGBA_ASTC_10x6_KHR,
170 GL_COMPRESSED_RGBA_ASTC_10x8_KHR,
171 GL_COMPRESSED_RGBA_ASTC_10x10_KHR,
172 GL_COMPRESSED_RGBA_ASTC_12x10_KHR,
173 GL_COMPRESSED_RGBA_ASTC_12x12_KHR,
174 // ASTC SRGBA
175 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,
176 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,
177 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,
178 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,
179 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,
180 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,
181 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,
182 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,
183 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,
184 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,
185 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,
186 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,
187 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,
188 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,
189
190 // SRGB formats
191
192 GL_SRGB8,
193 GL_SRGB8_ALPHA8,
194
195 // Reverse SRGB formats
196
197 GL_SRGB8_ALPHA8,
198
199 // 10 bit formats
200
201 GL_RGB10_A2,
202 GL_RGB10_A2,
203 GL_RGB10_A2UI,
204 GL_INVALID_ENUM,
205 GL_INVALID_ENUM,
206 GL_INVALID_ENUM,
207 GL_INVALID_ENUM,
208 GL_INVALID_ENUM,
209
210 // Matrix format for instancing
211
212 GL_INVALID_ENUM
213};
214
215STATIC_ASSERT_MAPPING(Cogs::OpenGL20::TextureFormats, (int)Cogs::TextureFormat::TextureFormat_Size);
216
217const GLenum Cogs::OpenGL20::PixelTypes[] = {
218 GL_INVALID_ENUM,
219
220 // Unsigned normalized byte formats
221
222 GL_UNSIGNED_BYTE,
223 GL_UNSIGNED_BYTE,
224 GL_UNSIGNED_BYTE,
225 GL_UNSIGNED_BYTE,
226
227 // Unsigned 16 bit normalized integer formats
228
229 GL_UNSIGNED_SHORT,
230 GL_UNSIGNED_SHORT,
231 GL_UNSIGNED_SHORT,
232 GL_UNSIGNED_SHORT,
233
234 // Signed normalized byte formats
235
236 GL_BYTE,
237 GL_BYTE,
238 GL_BYTE,
239 GL_BYTE,
240
241 // Signed 16 bit normalized integer formats
242
243 GL_SHORT,
244 GL_SHORT,
245 GL_SHORT,
246 GL_SHORT,
247
248 // Unsigned byte formats
249
250 GL_UNSIGNED_BYTE,
251 GL_UNSIGNED_BYTE,
252 GL_UNSIGNED_BYTE,
253 GL_UNSIGNED_BYTE,
254
255 // Unsigned 16 bit integer formats
256
257 GL_UNSIGNED_SHORT,
258 GL_UNSIGNED_SHORT,
259 GL_UNSIGNED_SHORT,
260 GL_UNSIGNED_SHORT,
261
262 // Unsigned 32 bit integer formats
263
264 GL_UNSIGNED_INT,
265 GL_UNSIGNED_INT,
266 GL_UNSIGNED_INT,
267 GL_UNSIGNED_INT,
268
269 // Signed byte formats
270
271 GL_BYTE,
272 GL_BYTE,
273 GL_BYTE,
274 GL_BYTE,
275
276 // Signed 16 bit integer formats
277
278 GL_SHORT,
279 GL_SHORT,
280 GL_SHORT,
281 GL_SHORT,
282
283 // Signed 32 bit integer formats
284
285 GL_INT,
286 GL_INT,
287 GL_INT,
288 GL_INT,
289
290 // 16 bit floating point formats
291
292 GL_HALF_FLOAT,
293 GL_HALF_FLOAT,
294 GL_HALF_FLOAT,
295 GL_HALF_FLOAT,
296
297 // 32 bit floating point formats
298
299 GL_FLOAT,
300 GL_FLOAT,
301 GL_FLOAT,
302 GL_FLOAT,
303
304 // Depth buffer formats
305
306 GL_UNSIGNED_INT,
307 GL_UNSIGNED_INT,
308 GL_UNSIGNED_INT,
309 GL_FLOAT,
310 GL_UNSIGNED_INT,
311 GL_UNSIGNED_INT,
312
313 // 8 bit typeless formats
314
315 GL_UNSIGNED_BYTE,
316 GL_UNSIGNED_BYTE,
317 GL_UNSIGNED_BYTE,
318 GL_UNSIGNED_BYTE,
319
320 // Reverse component order formats.
321
322 GL_UNSIGNED_BYTE,
323 GL_UNSIGNED_BYTE,
324
325 // Alpha formats
326
327 GL_UNSIGNED_BYTE,
328
329 // Compressed formats
330
331 GL_UNSIGNED_BYTE,
332 GL_UNSIGNED_BYTE,
333 GL_UNSIGNED_BYTE,
334 GL_UNSIGNED_BYTE,
335 GL_UNSIGNED_BYTE,
336 GL_UNSIGNED_BYTE,
337 GL_UNSIGNED_BYTE,
338 GL_UNSIGNED_BYTE,
339 GL_UNSIGNED_BYTE,
340 GL_UNSIGNED_BYTE,
341 GL_UNSIGNED_BYTE,
342 GL_UNSIGNED_BYTE,
343 GL_UNSIGNED_BYTE,
344 GL_UNSIGNED_BYTE,
345 GL_UNSIGNED_BYTE,
346 // BC7
347 GL_UNSIGNED_BYTE,
348 GL_UNSIGNED_BYTE,
349 GL_UNSIGNED_BYTE,
350 GL_UNSIGNED_BYTE,
351
352 // PVRTC
353 GL_UNSIGNED_BYTE,
354 GL_UNSIGNED_BYTE,
355 GL_UNSIGNED_BYTE,
356 GL_UNSIGNED_BYTE,
357
358 // ETC
359 GL_UNSIGNED_BYTE,
360 GL_UNSIGNED_BYTE,
361 GL_UNSIGNED_BYTE,
362 GL_UNSIGNED_BYTE,
363
364 GL_UNSIGNED_BYTE,
365 GL_UNSIGNED_BYTE,
366 GL_UNSIGNED_BYTE,
367 GL_UNSIGNED_BYTE,
368
369 // ASTC
370 GL_UNSIGNED_BYTE,
371 GL_UNSIGNED_BYTE,
372 GL_UNSIGNED_BYTE,
373 GL_UNSIGNED_BYTE,
374 GL_UNSIGNED_BYTE,
375 GL_UNSIGNED_BYTE,
376 GL_UNSIGNED_BYTE,
377 GL_UNSIGNED_BYTE,
378 GL_UNSIGNED_BYTE,
379 GL_UNSIGNED_BYTE,
380 GL_UNSIGNED_BYTE,
381 GL_UNSIGNED_BYTE,
382 GL_UNSIGNED_BYTE,
383 GL_UNSIGNED_BYTE,
384 // ASTC SRGBA
385 GL_UNSIGNED_BYTE,
386 GL_UNSIGNED_BYTE,
387 GL_UNSIGNED_BYTE,
388 GL_UNSIGNED_BYTE,
389 GL_UNSIGNED_BYTE,
390 GL_UNSIGNED_BYTE,
391 GL_UNSIGNED_BYTE,
392 GL_UNSIGNED_BYTE,
393 GL_UNSIGNED_BYTE,
394 GL_UNSIGNED_BYTE,
395 GL_UNSIGNED_BYTE,
396 GL_UNSIGNED_BYTE,
397 GL_UNSIGNED_BYTE,
398 GL_UNSIGNED_BYTE,
399
400 // SRGB formats
401
402 GL_UNSIGNED_BYTE,
403 GL_UNSIGNED_BYTE,
404
405 // Reverse SRGB formats
406
407 GL_UNSIGNED_BYTE,
408
409 // 10 bit formats
410
411 GL_UNSIGNED_INT,
412 GL_UNSIGNED_INT,
413 GL_UNSIGNED_INT,
414 GL_INVALID_ENUM,
415 GL_INVALID_ENUM,
416 GL_INVALID_ENUM,
417 GL_INVALID_ENUM,
418 GL_INVALID_ENUM,
419
420 // Matrix format for instancing
421
422 GL_INVALID_ENUM,
423};
424
425STATIC_ASSERT_MAPPING(Cogs::OpenGL20::PixelTypes, (int)Cogs::TextureFormat::TextureFormat_Size);
426
427const GLenum Cogs::OpenGL20::PixelFormats[] = {
428 GL_INVALID_ENUM,
429
430 // Unsigned normalized byte formats
431
432 GL_RED,
433 GL_RG,
434 GL_RGB,
435 GL_RGBA,
436
437 // Unsigned 16 bit normalized integer formats
438
439 GL_RED,
440 GL_RG,
441 GL_RGB,
442 GL_RGBA,
443
444 // Signed normalized byte formats
445
446 GL_RED,
447 GL_RG,
448 GL_RGB,
449 GL_RGBA,
450
451 // Signed 16 bit normalized integer formats
452
453 GL_RED,
454 GL_RG,
455 GL_RGB,
456 GL_RGBA,
457
458 // Unsigned byte formats
459
460 GL_RED_INTEGER,
461 GL_RG_INTEGER,
462 GL_RGB_INTEGER,
463 GL_RGBA_INTEGER,
464
465 // Unsigned 16 bit integer formats
466
467 GL_RED_INTEGER,
468 GL_RG_INTEGER,
469 GL_RGB_INTEGER,
470 GL_RGBA_INTEGER,
471
472 // Unsigned 32 bit integer formats
473
474 GL_RED_INTEGER,
475 GL_RG_INTEGER,
476 GL_RGB_INTEGER,
477 GL_RGBA_INTEGER,
478
479 // Signed byte formats
480
481 GL_RED_INTEGER,
482 GL_RG_INTEGER,
483 GL_RGB_INTEGER,
484 GL_RGBA_INTEGER,
485
486 // Signed 16 bit integer formats
487
488 GL_RED_INTEGER,
489 GL_RG_INTEGER,
490 GL_RGB_INTEGER,
491 GL_RGBA_INTEGER,
492
493 // Signed 32 bit integer formats
494
495 GL_RED_INTEGER,
496 GL_RG_INTEGER,
497 GL_RGB_INTEGER,
498 GL_RGBA_INTEGER,
499
500 // 16 bit floating point formats
501
502 GL_RED,
503 GL_RG,
504 GL_RGB,
505 GL_RGBA,
506
507 // 32 bit floating point formats
508
509 GL_RED,
510 GL_RG,
511 GL_RGB,
512 GL_RGBA,
513
514 // Depth buffer formats
515
516 GL_DEPTH_COMPONENT,
517 GL_DEPTH_COMPONENT,
518 GL_DEPTH_COMPONENT,
519 GL_DEPTH_COMPONENT,
520 GL_DEPTH_COMPONENT,
521 GL_DEPTH_COMPONENT,
522
523 // 8 bit typeless formats
524
525 GL_RED,
526 GL_RG,
527 GL_RGB,
528 GL_RGBA,
529
530 // Reverse component order formats.
531
532 GL_BGR,
533 GL_BGRA,
534
535 // Alpha formats
536
537 GL_ALPHA,
538
539 // Compressed formats
540
541 GL_INVALID_ENUM,
542 GL_INVALID_ENUM,
543 GL_INVALID_ENUM,
544 GL_INVALID_ENUM,
545 GL_INVALID_ENUM,
546 GL_INVALID_ENUM,
547 GL_INVALID_ENUM,
548 GL_INVALID_ENUM,
549 GL_INVALID_ENUM,
550 GL_INVALID_ENUM,
551 GL_INVALID_ENUM,
552 GL_INVALID_ENUM,
553 GL_INVALID_ENUM,
554 GL_INVALID_ENUM,
555 GL_INVALID_ENUM,
556 // BC7
557 GL_INVALID_ENUM,
558 GL_INVALID_ENUM,
559 GL_INVALID_ENUM,
560 GL_INVALID_ENUM,
561
562 // PVTRC
563 GL_INVALID_ENUM,
564 GL_INVALID_ENUM,
565 GL_INVALID_ENUM,
566 GL_INVALID_ENUM,
567
568 // ETC
569 GL_INVALID_ENUM,
570 GL_INVALID_ENUM,
571 GL_INVALID_ENUM,
572 GL_INVALID_ENUM,
573
574 GL_INVALID_ENUM,
575 GL_INVALID_ENUM,
576 GL_INVALID_ENUM,
577 GL_INVALID_ENUM,
578
579 // ASTC
580 GL_UNSIGNED_BYTE,
581 GL_UNSIGNED_BYTE,
582 GL_UNSIGNED_BYTE,
583 GL_UNSIGNED_BYTE,
584 GL_UNSIGNED_BYTE,
585 GL_UNSIGNED_BYTE,
586 GL_UNSIGNED_BYTE,
587 GL_UNSIGNED_BYTE,
588 GL_UNSIGNED_BYTE,
589 GL_UNSIGNED_BYTE,
590 GL_UNSIGNED_BYTE,
591 GL_UNSIGNED_BYTE,
592 GL_UNSIGNED_BYTE,
593 GL_UNSIGNED_BYTE,
594 // ASTC RGBA
595 GL_UNSIGNED_BYTE,
596 GL_UNSIGNED_BYTE,
597 GL_UNSIGNED_BYTE,
598 GL_UNSIGNED_BYTE,
599 GL_UNSIGNED_BYTE,
600 GL_UNSIGNED_BYTE,
601 GL_UNSIGNED_BYTE,
602 GL_UNSIGNED_BYTE,
603 GL_UNSIGNED_BYTE,
604 GL_UNSIGNED_BYTE,
605 GL_UNSIGNED_BYTE,
606 GL_UNSIGNED_BYTE,
607 GL_UNSIGNED_BYTE,
608 GL_UNSIGNED_BYTE,
609
610 // SRGB formats
611
612 GL_RGB,
613 GL_RGBA,
614
615 // Reverse SRGB formats
616
617 GL_BGRA,
618
619 // 10 bit formats
620
621 GL_INVALID_ENUM,
622 GL_INVALID_ENUM,
623 GL_INVALID_ENUM,
624 GL_INVALID_ENUM,
625 GL_INVALID_ENUM,
626 GL_INVALID_ENUM,
627 GL_INVALID_ENUM,
628 GL_INVALID_ENUM,
629
630 // Matrix format for instancing
631
632 GL_INVALID_ENUM,
633};
634
635STATIC_ASSERT_MAPPING(Cogs::OpenGL20::PixelFormats, (int)Cogs::TextureFormat::TextureFormat_Size);
636
637const GLenum Cogs::OpenGL20::ElementFormats[] = {
638 GL_INVALID_ENUM,
639
640 // Unsigned normalized byte formats
641
642 GL_UNSIGNED_BYTE,
643 GL_UNSIGNED_BYTE,
644 GL_UNSIGNED_BYTE,
645 GL_UNSIGNED_BYTE,
646
647 // Unsigned 16 bit normalized integer formats
648
649 GL_UNSIGNED_SHORT,
650 GL_UNSIGNED_SHORT,
651 GL_UNSIGNED_SHORT,
652 GL_UNSIGNED_SHORT,
653
654 // Signed normalized byte formats
655
656 GL_BYTE,
657 GL_BYTE,
658 GL_BYTE,
659 GL_BYTE,
660
661 // Signed 16 bit normalized integer formats
662
663 GL_SHORT,
664 GL_SHORT,
665 GL_SHORT,
666 GL_SHORT,
667
668 // Unsigned byte formats
669
670 GL_UNSIGNED_INT,
671 GL_UNSIGNED_INT,
672 GL_UNSIGNED_INT,
673 GL_UNSIGNED_INT,
674
675 // Unsigned 16 bit integer formats
676
677 GL_UNSIGNED_SHORT,
678 GL_UNSIGNED_SHORT,
679 GL_UNSIGNED_SHORT,
680 GL_UNSIGNED_SHORT,
681
682 // Unsigned 32 bit integer formats
683
684 GL_UNSIGNED_INT,
685 GL_UNSIGNED_INT,
686 GL_UNSIGNED_INT,
687 GL_UNSIGNED_INT,
688
689 // Signed byte formats
690
691 GL_BYTE,
692 GL_BYTE,
693 GL_BYTE,
694 GL_BYTE,
695
696 // Signed 16 bit integer formats
697
698 GL_SHORT,
699 GL_SHORT,
700 GL_SHORT,
701 GL_SHORT,
702
703 // Signed 32 bit integer formats
704
705 GL_INT,
706 GL_INT,
707 GL_INT,
708 GL_INT,
709
710 // 16 bit floating point formats
711
712 GL_HALF_FLOAT,
713 GL_HALF_FLOAT,
714 GL_HALF_FLOAT,
715 GL_HALF_FLOAT,
716
717 // 32 bit floating point formats
718
719 GL_FLOAT,
720 GL_FLOAT,
721 GL_FLOAT,
722 GL_FLOAT,
723
724 // Depth buffer formats
725
726 GL_HALF_FLOAT,
727 GL_UNSIGNED_INT_24_8,
728 GL_UNSIGNED_INT_24_8,
729 GL_FLOAT,
730 GL_FLOAT,
731 GL_HALF_FLOAT,
732
733 // 8 bit typeless formats
734
735 GL_INVALID_ENUM,
736 GL_INVALID_ENUM,
737 GL_INVALID_ENUM,
738 GL_INVALID_ENUM,
739
740 // Reverse component order formats.
741
742 GL_BYTE,
743 GL_BYTE,
744
745 // Alpha formats
746
747 GL_BYTE,
748
749 // Compressed formats
750
751 GL_INVALID_ENUM,
752 GL_INVALID_ENUM,
753 GL_INVALID_ENUM,
754 GL_INVALID_ENUM,
755 GL_INVALID_ENUM,
756 GL_INVALID_ENUM,
757 GL_INVALID_ENUM,
758 GL_INVALID_ENUM,
759 GL_INVALID_ENUM,
760 GL_INVALID_ENUM,
761 GL_INVALID_ENUM,
762 GL_INVALID_ENUM,
763 GL_INVALID_ENUM,
764 GL_INVALID_ENUM,
765 GL_INVALID_ENUM,
766
767 // BC7
768 GL_INVALID_ENUM,
769 GL_INVALID_ENUM,
770 GL_INVALID_ENUM,
771 GL_INVALID_ENUM,
772
773 // PVRTC
774 GL_INVALID_ENUM,
775 GL_INVALID_ENUM,
776 GL_INVALID_ENUM,
777 GL_INVALID_ENUM,
778
779 // ETC
780 GL_INVALID_ENUM,
781 GL_INVALID_ENUM,
782 GL_INVALID_ENUM,
783 GL_INVALID_ENUM,
784
785 GL_INVALID_ENUM,
786 GL_INVALID_ENUM,
787 GL_INVALID_ENUM,
788 GL_INVALID_ENUM,
789
790 // ASTC
791 GL_INVALID_ENUM,
792 GL_INVALID_ENUM,
793 GL_INVALID_ENUM,
794 GL_INVALID_ENUM,
795 GL_INVALID_ENUM,
796 GL_INVALID_ENUM,
797 GL_INVALID_ENUM,
798 GL_INVALID_ENUM,
799 GL_INVALID_ENUM,
800 GL_INVALID_ENUM,
801 GL_INVALID_ENUM,
802 GL_INVALID_ENUM,
803 GL_INVALID_ENUM,
804 GL_INVALID_ENUM,
805
806 // ASTC SRGBA
807 GL_INVALID_ENUM,
808 GL_INVALID_ENUM,
809 GL_INVALID_ENUM,
810 GL_INVALID_ENUM,
811 GL_INVALID_ENUM,
812 GL_INVALID_ENUM,
813 GL_INVALID_ENUM,
814 GL_INVALID_ENUM,
815 GL_INVALID_ENUM,
816 GL_INVALID_ENUM,
817 GL_INVALID_ENUM,
818 GL_INVALID_ENUM,
819 GL_INVALID_ENUM,
820 GL_INVALID_ENUM,
821
822 // SRGB formats
823
824 GL_UNSIGNED_BYTE,
825 GL_UNSIGNED_BYTE,
826
827 // Reverse SRGB formats
828
829 GL_UNSIGNED_BYTE,
830
831 // 10 bit formats
832
833 GL_UNSIGNED_INT_2_10_10_10_REV,
834 GL_UNSIGNED_INT_2_10_10_10_REV,
835 GL_UNSIGNED_INT_2_10_10_10_REV,
836 GL_INVALID_ENUM,
837 GL_INVALID_ENUM,
838 GL_INVALID_ENUM,
839 GL_INVALID_ENUM,
840 GL_INVALID_ENUM,
841
842 // Matrix format for instancing
843
844 GL_FLOAT
845};
846
847STATIC_ASSERT_MAPPING(Cogs::OpenGL20::ElementFormats, Cogs::Format::Format_Size);
848
849const GLboolean Cogs::OpenGL20::CompressedFormats[] = {
850 GL_FALSE,
851
852 // Unsigned normalized byte formats
853
854 GL_FALSE,
855 GL_FALSE,
856 GL_FALSE,
857 GL_FALSE,
858
859 // Unsigned 16 bit normalized integer formats
860
861 GL_FALSE,
862 GL_FALSE,
863 GL_FALSE,
864 GL_FALSE,
865
866 // Signed normalized byte formats
867
868 GL_FALSE,
869 GL_FALSE,
870 GL_FALSE,
871 GL_FALSE,
872
873 // Signed 16 bit normalized integer formats
874
875 GL_FALSE,
876 GL_FALSE,
877 GL_FALSE,
878 GL_FALSE,
879
880 // Unsigned
881
882 GL_FALSE,
883 GL_FALSE,
884 GL_FALSE,
885 GL_FALSE,
886
887 GL_FALSE,
888 GL_FALSE,
889 GL_FALSE,
890 GL_FALSE,
891
892 GL_FALSE,
893 GL_FALSE,
894 GL_FALSE,
895 GL_FALSE,
896
897 // Signed
898
899 GL_FALSE,
900 GL_FALSE,
901 GL_FALSE,
902 GL_FALSE,
903
904 GL_FALSE,
905 GL_FALSE,
906 GL_FALSE,
907 GL_FALSE,
908
909 GL_FALSE,
910 GL_FALSE,
911 GL_FALSE,
912 GL_FALSE,
913
914 // 16 bi|t floating point formats
915 GL_FALSE,
916 GL_FALSE,
917 GL_FALSE,
918 GL_FALSE,
919
920 // 32 bit floating point formats
921
922 GL_FALSE,
923 GL_FALSE,
924 GL_FALSE,
925 GL_FALSE,
926
927 // Depth buffer formats
928
929 GL_FALSE,
930 GL_FALSE,
931 GL_FALSE,
932 GL_FALSE,
933 GL_FALSE,
934 GL_FALSE,
935
936 // 8 bit typeless formats
937
938 GL_FALSE,
939 GL_FALSE,
940 GL_FALSE,
941 GL_FALSE,
942
943 // Reverse component order formats.
944
945 GL_FALSE,
946 GL_FALSE,
947
948 // Alpha formats
949
950 GL_FALSE,
951
952 // Compressed formats
953
954 GL_TRUE,
955 GL_TRUE,
956 GL_TRUE,
957 GL_TRUE,
958 GL_TRUE,
959 GL_TRUE,
960 GL_TRUE,
961 GL_TRUE,
962 GL_TRUE,
963 GL_TRUE,
964 GL_TRUE,
965 GL_TRUE,
966 GL_TRUE,
967 GL_TRUE,
968 GL_TRUE,
969
970 // BC7
971 GL_TRUE,
972 GL_TRUE,
973 GL_TRUE,
974 GL_TRUE,
975
976 // PVRTC
977 GL_TRUE,
978 GL_TRUE,
979 GL_TRUE,
980 GL_TRUE,
981
982 //ETC
983
984 GL_TRUE,
985 GL_TRUE,
986 GL_TRUE,
987 GL_TRUE,
988
989 GL_TRUE,
990 GL_TRUE,
991 GL_TRUE,
992 GL_TRUE,
993
994 // ASTC
995
996 GL_TRUE,
997 GL_TRUE,
998 GL_TRUE,
999 GL_TRUE,
1000 GL_TRUE,
1001 GL_TRUE,
1002 GL_TRUE,
1003 GL_TRUE,
1004 GL_TRUE,
1005 GL_TRUE,
1006 GL_TRUE,
1007 GL_TRUE,
1008 GL_TRUE,
1009 GL_TRUE,
1010
1011 // ASTC SRGBA
1012
1013 GL_TRUE,
1014 GL_TRUE,
1015 GL_TRUE,
1016 GL_TRUE,
1017 GL_TRUE,
1018 GL_TRUE,
1019 GL_TRUE,
1020 GL_TRUE,
1021 GL_TRUE,
1022 GL_TRUE,
1023 GL_TRUE,
1024 GL_TRUE,
1025 GL_TRUE,
1026 GL_TRUE,
1027
1028 // SRGB formats
1029
1030 GL_FALSE,
1031 GL_FALSE,
1032
1033 // Reverse SRGB formats
1034
1035 GL_FALSE,
1036
1037 // Packed formats
1038 GL_FALSE, // R10G10B10A2_TYPELESS
1039 GL_FALSE, // R10G10B10A2_UNORM
1040 GL_FALSE, // R10G10B10A2_UINT
1041 GL_FALSE, // R11G11B10_FLOAT
1042 GL_FALSE, // R5G6B5_UNORM
1043 GL_FALSE, // R5G5B5A1_UNORM
1044 GL_FALSE, // R4G4B4A4_UNORM
1045 GL_FALSE, // R9G9B9E5_FLOAT
1046
1047 GL_FALSE,
1048};
1049static_assert(sizeof(Cogs::OpenGL20::CompressedFormats) == sizeof(Cogs::OpenGL20::CompressedFormats[0]) * size_t(Cogs::DataFormat::Format_Size));
1050
1051
1052const GLenum Cogs::OpenGL20::PrimitiveFormats[] = {
1053 GL_TRIANGLES,
1054 GL_TRIANGLE_STRIP,
1055 GL_LINES,
1056 GL_LINE_STRIP,
1057 GL_POINTS,
1058 GL_TRIANGLES_ADJACENCY,
1059 GL_TRIANGLE_STRIP_ADJACENCY,
1060 GL_LINES_ADJACENCY,
1061 GL_LINE_STRIP_ADJACENCY,
1062
1063 GL_PATCHES,
1064 GL_PATCHES,
1065 GL_PATCHES,
1066 GL_PATCHES,
1067};
1068
1069STATIC_ASSERT_MAPPING(Cogs::OpenGL20::PrimitiveFormats, (int)Cogs::PrimitiveType::PrimitiveType_Size);
1070
1071extern const GLenum Cogs::OpenGL20::MipMinFilterModes[] = {
1072 GL_NEAREST_MIPMAP_LINEAR,
1073 GL_LINEAR_MIPMAP_LINEAR,
1074 GL_NEAREST_MIPMAP_LINEAR,
1075 GL_LINEAR_MIPMAP_LINEAR,
1076};
1077
1078STATIC_ASSERT_MAPPING(Cogs::OpenGL20::MipMinFilterModes, Cogs::SamplerState::FilterMode_Size);
1079
1080extern const GLenum Cogs::OpenGL20::MagFilterModes[] = {
1081 GL_NEAREST,
1082 GL_LINEAR,
1083 GL_NEAREST,
1084 GL_LINEAR,
1085};
1086
1087STATIC_ASSERT_MAPPING(Cogs::OpenGL20::MagFilterModes, Cogs::SamplerState::FilterMode_Size);
1088
1089extern const GLenum Cogs::OpenGL20::AddressModes[] = {
1090 GL_CLAMP_TO_EDGE,
1091 GL_REPEAT,
1092 GL_MIRRORED_REPEAT,
1093 GL_CLAMP_TO_BORDER
1094};
1095
1096STATIC_ASSERT_MAPPING(Cogs::OpenGL20::AddressModes, Cogs::SamplerState::AddressMode_Size);
1097
1098extern const GLenum Cogs::OpenGL20::ComparisonFunctions[] = {
1099 GL_NEVER,
1100 GL_LESS,
1101 GL_EQUAL,
1102 GL_LEQUAL,
1103 GL_GREATER,
1104 GL_NOTEQUAL,
1105 GL_GEQUAL,
1106 GL_ALWAYS,
1107};
1108
1109STATIC_ASSERT_MAPPING(Cogs::OpenGL20::ComparisonFunctions, Cogs::SamplerState::ComparisonFunction_Size);
1110
1111extern const GLenum Cogs::OpenGL20::TextureTarget[] = {
1112 GL_INVALID_ENUM,
1113 GL_INVALID_ENUM,
1114 GL_TEXTURE_1D,
1115 GL_TEXTURE_1D_ARRAY,
1116 GL_TEXTURE_2D,
1117 GL_TEXTURE_2D_ARRAY,
1118 GL_TEXTURE_2D_MULTISAMPLE,
1119 GL_TEXTURE_2D_MULTISAMPLE_ARRAY,
1120 GL_TEXTURE_3D,
1121 GL_INVALID_ENUM, // GL_TEXTURE_3D_ARRAY,
1122 GL_TEXTURE_CUBE_MAP,
1123 GL_TEXTURE_CUBE_MAP_ARRAY,
1124 GL_INVALID_ENUM,
1125};
1126
1127STATIC_ASSERT_MAPPING(Cogs::OpenGL20::TextureTarget, (int)Cogs::ResourceDimensions::ResourceDimensions_Size);