1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by gen_packed_gl_enums.py using data from packed_gl_enums.json.
3 //
4 // Copyright 2017 The ANGLE Project Authors. All rights reserved.
5 // Use of this source code is governed by a BSD-style license that can be
6 // found in the LICENSE file.
7 //
8 // PackedGLEnums_autogen.cpp:
9 // Implements ANGLE-specific enums classes for GLenums and functions operating
10 // on them.
11
12 #include "common/PackedGLEnums_autogen.h"
13 #include "common/debug.h"
14
15 namespace gl
16 {
17
18 template <>
FromGLenum(GLenum from)19 AlphaTestFunc FromGLenum<AlphaTestFunc>(GLenum from)
20 {
21 switch (from)
22 {
23 case GL_ALWAYS:
24 return AlphaTestFunc::AlwaysPass;
25 case GL_EQUAL:
26 return AlphaTestFunc::Equal;
27 case GL_GEQUAL:
28 return AlphaTestFunc::Gequal;
29 case GL_GREATER:
30 return AlphaTestFunc::Greater;
31 case GL_LEQUAL:
32 return AlphaTestFunc::Lequal;
33 case GL_LESS:
34 return AlphaTestFunc::Less;
35 case GL_NEVER:
36 return AlphaTestFunc::Never;
37 case GL_NOTEQUAL:
38 return AlphaTestFunc::NotEqual;
39 default:
40 return AlphaTestFunc::InvalidEnum;
41 }
42 }
43
ToGLenum(AlphaTestFunc from)44 GLenum ToGLenum(AlphaTestFunc from)
45 {
46 switch (from)
47 {
48 case AlphaTestFunc::AlwaysPass:
49 return GL_ALWAYS;
50 case AlphaTestFunc::Equal:
51 return GL_EQUAL;
52 case AlphaTestFunc::Gequal:
53 return GL_GEQUAL;
54 case AlphaTestFunc::Greater:
55 return GL_GREATER;
56 case AlphaTestFunc::Lequal:
57 return GL_LEQUAL;
58 case AlphaTestFunc::Less:
59 return GL_LESS;
60 case AlphaTestFunc::Never:
61 return GL_NEVER;
62 case AlphaTestFunc::NotEqual:
63 return GL_NOTEQUAL;
64 default:
65 UNREACHABLE();
66 return 0;
67 }
68 }
69
operator <<(std::ostream & os,AlphaTestFunc value)70 std::ostream &operator<<(std::ostream &os, AlphaTestFunc value)
71 {
72 switch (value)
73 {
74 case AlphaTestFunc::AlwaysPass:
75 os << "GL_ALWAYS";
76 break;
77 case AlphaTestFunc::Equal:
78 os << "GL_EQUAL";
79 break;
80 case AlphaTestFunc::Gequal:
81 os << "GL_GEQUAL";
82 break;
83 case AlphaTestFunc::Greater:
84 os << "GL_GREATER";
85 break;
86 case AlphaTestFunc::Lequal:
87 os << "GL_LEQUAL";
88 break;
89 case AlphaTestFunc::Less:
90 os << "GL_LESS";
91 break;
92 case AlphaTestFunc::Never:
93 os << "GL_NEVER";
94 break;
95 case AlphaTestFunc::NotEqual:
96 os << "GL_NOTEQUAL";
97 break;
98 default:
99 os << "GL_INVALID_ENUM";
100 break;
101 }
102 return os;
103 }
104
105 template <>
FromGLenum(GLenum from)106 BufferBinding FromGLenum<BufferBinding>(GLenum from)
107 {
108 switch (from)
109 {
110 case GL_ARRAY_BUFFER:
111 return BufferBinding::Array;
112 case GL_ATOMIC_COUNTER_BUFFER:
113 return BufferBinding::AtomicCounter;
114 case GL_COPY_READ_BUFFER:
115 return BufferBinding::CopyRead;
116 case GL_COPY_WRITE_BUFFER:
117 return BufferBinding::CopyWrite;
118 case GL_DISPATCH_INDIRECT_BUFFER:
119 return BufferBinding::DispatchIndirect;
120 case GL_DRAW_INDIRECT_BUFFER:
121 return BufferBinding::DrawIndirect;
122 case GL_ELEMENT_ARRAY_BUFFER:
123 return BufferBinding::ElementArray;
124 case GL_PIXEL_PACK_BUFFER:
125 return BufferBinding::PixelPack;
126 case GL_PIXEL_UNPACK_BUFFER:
127 return BufferBinding::PixelUnpack;
128 case GL_SHADER_STORAGE_BUFFER:
129 return BufferBinding::ShaderStorage;
130 case GL_TEXTURE_BUFFER:
131 return BufferBinding::Texture;
132 case GL_TRANSFORM_FEEDBACK_BUFFER:
133 return BufferBinding::TransformFeedback;
134 case GL_UNIFORM_BUFFER:
135 return BufferBinding::Uniform;
136 default:
137 return BufferBinding::InvalidEnum;
138 }
139 }
140
ToGLenum(BufferBinding from)141 GLenum ToGLenum(BufferBinding from)
142 {
143 switch (from)
144 {
145 case BufferBinding::Array:
146 return GL_ARRAY_BUFFER;
147 case BufferBinding::AtomicCounter:
148 return GL_ATOMIC_COUNTER_BUFFER;
149 case BufferBinding::CopyRead:
150 return GL_COPY_READ_BUFFER;
151 case BufferBinding::CopyWrite:
152 return GL_COPY_WRITE_BUFFER;
153 case BufferBinding::DispatchIndirect:
154 return GL_DISPATCH_INDIRECT_BUFFER;
155 case BufferBinding::DrawIndirect:
156 return GL_DRAW_INDIRECT_BUFFER;
157 case BufferBinding::ElementArray:
158 return GL_ELEMENT_ARRAY_BUFFER;
159 case BufferBinding::PixelPack:
160 return GL_PIXEL_PACK_BUFFER;
161 case BufferBinding::PixelUnpack:
162 return GL_PIXEL_UNPACK_BUFFER;
163 case BufferBinding::ShaderStorage:
164 return GL_SHADER_STORAGE_BUFFER;
165 case BufferBinding::Texture:
166 return GL_TEXTURE_BUFFER;
167 case BufferBinding::TransformFeedback:
168 return GL_TRANSFORM_FEEDBACK_BUFFER;
169 case BufferBinding::Uniform:
170 return GL_UNIFORM_BUFFER;
171 default:
172 UNREACHABLE();
173 return 0;
174 }
175 }
176
operator <<(std::ostream & os,BufferBinding value)177 std::ostream &operator<<(std::ostream &os, BufferBinding value)
178 {
179 switch (value)
180 {
181 case BufferBinding::Array:
182 os << "GL_ARRAY_BUFFER";
183 break;
184 case BufferBinding::AtomicCounter:
185 os << "GL_ATOMIC_COUNTER_BUFFER";
186 break;
187 case BufferBinding::CopyRead:
188 os << "GL_COPY_READ_BUFFER";
189 break;
190 case BufferBinding::CopyWrite:
191 os << "GL_COPY_WRITE_BUFFER";
192 break;
193 case BufferBinding::DispatchIndirect:
194 os << "GL_DISPATCH_INDIRECT_BUFFER";
195 break;
196 case BufferBinding::DrawIndirect:
197 os << "GL_DRAW_INDIRECT_BUFFER";
198 break;
199 case BufferBinding::ElementArray:
200 os << "GL_ELEMENT_ARRAY_BUFFER";
201 break;
202 case BufferBinding::PixelPack:
203 os << "GL_PIXEL_PACK_BUFFER";
204 break;
205 case BufferBinding::PixelUnpack:
206 os << "GL_PIXEL_UNPACK_BUFFER";
207 break;
208 case BufferBinding::ShaderStorage:
209 os << "GL_SHADER_STORAGE_BUFFER";
210 break;
211 case BufferBinding::Texture:
212 os << "GL_TEXTURE_BUFFER";
213 break;
214 case BufferBinding::TransformFeedback:
215 os << "GL_TRANSFORM_FEEDBACK_BUFFER";
216 break;
217 case BufferBinding::Uniform:
218 os << "GL_UNIFORM_BUFFER";
219 break;
220 default:
221 os << "GL_INVALID_ENUM";
222 break;
223 }
224 return os;
225 }
226
227 template <>
FromGLenum(GLenum from)228 BufferUsage FromGLenum<BufferUsage>(GLenum from)
229 {
230 switch (from)
231 {
232 case GL_DYNAMIC_COPY:
233 return BufferUsage::DynamicCopy;
234 case GL_DYNAMIC_DRAW:
235 return BufferUsage::DynamicDraw;
236 case GL_DYNAMIC_READ:
237 return BufferUsage::DynamicRead;
238 case GL_STATIC_COPY:
239 return BufferUsage::StaticCopy;
240 case GL_STATIC_DRAW:
241 return BufferUsage::StaticDraw;
242 case GL_STATIC_READ:
243 return BufferUsage::StaticRead;
244 case GL_STREAM_COPY:
245 return BufferUsage::StreamCopy;
246 case GL_STREAM_DRAW:
247 return BufferUsage::StreamDraw;
248 case GL_STREAM_READ:
249 return BufferUsage::StreamRead;
250 default:
251 return BufferUsage::InvalidEnum;
252 }
253 }
254
ToGLenum(BufferUsage from)255 GLenum ToGLenum(BufferUsage from)
256 {
257 switch (from)
258 {
259 case BufferUsage::DynamicCopy:
260 return GL_DYNAMIC_COPY;
261 case BufferUsage::DynamicDraw:
262 return GL_DYNAMIC_DRAW;
263 case BufferUsage::DynamicRead:
264 return GL_DYNAMIC_READ;
265 case BufferUsage::StaticCopy:
266 return GL_STATIC_COPY;
267 case BufferUsage::StaticDraw:
268 return GL_STATIC_DRAW;
269 case BufferUsage::StaticRead:
270 return GL_STATIC_READ;
271 case BufferUsage::StreamCopy:
272 return GL_STREAM_COPY;
273 case BufferUsage::StreamDraw:
274 return GL_STREAM_DRAW;
275 case BufferUsage::StreamRead:
276 return GL_STREAM_READ;
277 default:
278 UNREACHABLE();
279 return 0;
280 }
281 }
282
operator <<(std::ostream & os,BufferUsage value)283 std::ostream &operator<<(std::ostream &os, BufferUsage value)
284 {
285 switch (value)
286 {
287 case BufferUsage::DynamicCopy:
288 os << "GL_DYNAMIC_COPY";
289 break;
290 case BufferUsage::DynamicDraw:
291 os << "GL_DYNAMIC_DRAW";
292 break;
293 case BufferUsage::DynamicRead:
294 os << "GL_DYNAMIC_READ";
295 break;
296 case BufferUsage::StaticCopy:
297 os << "GL_STATIC_COPY";
298 break;
299 case BufferUsage::StaticDraw:
300 os << "GL_STATIC_DRAW";
301 break;
302 case BufferUsage::StaticRead:
303 os << "GL_STATIC_READ";
304 break;
305 case BufferUsage::StreamCopy:
306 os << "GL_STREAM_COPY";
307 break;
308 case BufferUsage::StreamDraw:
309 os << "GL_STREAM_DRAW";
310 break;
311 case BufferUsage::StreamRead:
312 os << "GL_STREAM_READ";
313 break;
314 default:
315 os << "GL_INVALID_ENUM";
316 break;
317 }
318 return os;
319 }
320
321 template <>
FromGLenum(GLenum from)322 ClientVertexArrayType FromGLenum<ClientVertexArrayType>(GLenum from)
323 {
324 switch (from)
325 {
326 case GL_COLOR_ARRAY:
327 return ClientVertexArrayType::Color;
328 case GL_NORMAL_ARRAY:
329 return ClientVertexArrayType::Normal;
330 case GL_POINT_SIZE_ARRAY_OES:
331 return ClientVertexArrayType::PointSize;
332 case GL_TEXTURE_COORD_ARRAY:
333 return ClientVertexArrayType::TextureCoord;
334 case GL_VERTEX_ARRAY:
335 return ClientVertexArrayType::Vertex;
336 default:
337 return ClientVertexArrayType::InvalidEnum;
338 }
339 }
340
ToGLenum(ClientVertexArrayType from)341 GLenum ToGLenum(ClientVertexArrayType from)
342 {
343 switch (from)
344 {
345 case ClientVertexArrayType::Color:
346 return GL_COLOR_ARRAY;
347 case ClientVertexArrayType::Normal:
348 return GL_NORMAL_ARRAY;
349 case ClientVertexArrayType::PointSize:
350 return GL_POINT_SIZE_ARRAY_OES;
351 case ClientVertexArrayType::TextureCoord:
352 return GL_TEXTURE_COORD_ARRAY;
353 case ClientVertexArrayType::Vertex:
354 return GL_VERTEX_ARRAY;
355 default:
356 UNREACHABLE();
357 return 0;
358 }
359 }
360
operator <<(std::ostream & os,ClientVertexArrayType value)361 std::ostream &operator<<(std::ostream &os, ClientVertexArrayType value)
362 {
363 switch (value)
364 {
365 case ClientVertexArrayType::Color:
366 os << "GL_COLOR_ARRAY";
367 break;
368 case ClientVertexArrayType::Normal:
369 os << "GL_NORMAL_ARRAY";
370 break;
371 case ClientVertexArrayType::PointSize:
372 os << "GL_POINT_SIZE_ARRAY_OES";
373 break;
374 case ClientVertexArrayType::TextureCoord:
375 os << "GL_TEXTURE_COORD_ARRAY";
376 break;
377 case ClientVertexArrayType::Vertex:
378 os << "GL_VERTEX_ARRAY";
379 break;
380 default:
381 os << "GL_INVALID_ENUM";
382 break;
383 }
384 return os;
385 }
386
387 template <>
FromGLenum(GLenum from)388 ClipDepthMode FromGLenum<ClipDepthMode>(GLenum from)
389 {
390 switch (from)
391 {
392 case GL_NEGATIVE_ONE_TO_ONE_EXT:
393 return ClipDepthMode::NegativeOneToOne;
394 case GL_ZERO_TO_ONE_EXT:
395 return ClipDepthMode::ZeroToOne;
396 default:
397 return ClipDepthMode::InvalidEnum;
398 }
399 }
400
ToGLenum(ClipDepthMode from)401 GLenum ToGLenum(ClipDepthMode from)
402 {
403 switch (from)
404 {
405 case ClipDepthMode::NegativeOneToOne:
406 return GL_NEGATIVE_ONE_TO_ONE_EXT;
407 case ClipDepthMode::ZeroToOne:
408 return GL_ZERO_TO_ONE_EXT;
409 default:
410 UNREACHABLE();
411 return 0;
412 }
413 }
414
operator <<(std::ostream & os,ClipDepthMode value)415 std::ostream &operator<<(std::ostream &os, ClipDepthMode value)
416 {
417 switch (value)
418 {
419 case ClipDepthMode::NegativeOneToOne:
420 os << "GL_NEGATIVE_ONE_TO_ONE_EXT";
421 break;
422 case ClipDepthMode::ZeroToOne:
423 os << "GL_ZERO_TO_ONE_EXT";
424 break;
425 default:
426 os << "GL_INVALID_ENUM";
427 break;
428 }
429 return os;
430 }
431
432 template <>
FromGLenum(GLenum from)433 ClipOrigin FromGLenum<ClipOrigin>(GLenum from)
434 {
435 switch (from)
436 {
437 case GL_LOWER_LEFT_EXT:
438 return ClipOrigin::LowerLeft;
439 case GL_UPPER_LEFT_EXT:
440 return ClipOrigin::UpperLeft;
441 default:
442 return ClipOrigin::InvalidEnum;
443 }
444 }
445
ToGLenum(ClipOrigin from)446 GLenum ToGLenum(ClipOrigin from)
447 {
448 switch (from)
449 {
450 case ClipOrigin::LowerLeft:
451 return GL_LOWER_LEFT_EXT;
452 case ClipOrigin::UpperLeft:
453 return GL_UPPER_LEFT_EXT;
454 default:
455 UNREACHABLE();
456 return 0;
457 }
458 }
459
operator <<(std::ostream & os,ClipOrigin value)460 std::ostream &operator<<(std::ostream &os, ClipOrigin value)
461 {
462 switch (value)
463 {
464 case ClipOrigin::LowerLeft:
465 os << "GL_LOWER_LEFT_EXT";
466 break;
467 case ClipOrigin::UpperLeft:
468 os << "GL_UPPER_LEFT_EXT";
469 break;
470 default:
471 os << "GL_INVALID_ENUM";
472 break;
473 }
474 return os;
475 }
476
477 template <>
FromGLenum(GLenum from)478 CullFaceMode FromGLenum<CullFaceMode>(GLenum from)
479 {
480 switch (from)
481 {
482 case GL_BACK:
483 return CullFaceMode::Back;
484 case GL_FRONT:
485 return CullFaceMode::Front;
486 case GL_FRONT_AND_BACK:
487 return CullFaceMode::FrontAndBack;
488 default:
489 return CullFaceMode::InvalidEnum;
490 }
491 }
492
ToGLenum(CullFaceMode from)493 GLenum ToGLenum(CullFaceMode from)
494 {
495 switch (from)
496 {
497 case CullFaceMode::Back:
498 return GL_BACK;
499 case CullFaceMode::Front:
500 return GL_FRONT;
501 case CullFaceMode::FrontAndBack:
502 return GL_FRONT_AND_BACK;
503 default:
504 UNREACHABLE();
505 return 0;
506 }
507 }
508
operator <<(std::ostream & os,CullFaceMode value)509 std::ostream &operator<<(std::ostream &os, CullFaceMode value)
510 {
511 switch (value)
512 {
513 case CullFaceMode::Back:
514 os << "GL_BACK";
515 break;
516 case CullFaceMode::Front:
517 os << "GL_FRONT";
518 break;
519 case CullFaceMode::FrontAndBack:
520 os << "GL_FRONT_AND_BACK";
521 break;
522 default:
523 os << "GL_INVALID_ENUM";
524 break;
525 }
526 return os;
527 }
528
529 template <>
FromGLenum(GLenum from)530 FilterMode FromGLenum<FilterMode>(GLenum from)
531 {
532 switch (from)
533 {
534 case GL_NEAREST:
535 return FilterMode::Nearest;
536 case GL_LINEAR:
537 return FilterMode::Linear;
538 case GL_NEAREST_MIPMAP_NEAREST:
539 return FilterMode::NearestMipmapNearest;
540 case GL_NEAREST_MIPMAP_LINEAR:
541 return FilterMode::NearestMipmapLinear;
542 case GL_LINEAR_MIPMAP_LINEAR:
543 return FilterMode::LinearMipmapLinear;
544 default:
545 return FilterMode::InvalidEnum;
546 }
547 }
548
ToGLenum(FilterMode from)549 GLenum ToGLenum(FilterMode from)
550 {
551 switch (from)
552 {
553 case FilterMode::Nearest:
554 return GL_NEAREST;
555 case FilterMode::Linear:
556 return GL_LINEAR;
557 case FilterMode::NearestMipmapNearest:
558 return GL_NEAREST_MIPMAP_NEAREST;
559 case FilterMode::NearestMipmapLinear:
560 return GL_NEAREST_MIPMAP_LINEAR;
561 case FilterMode::LinearMipmapLinear:
562 return GL_LINEAR_MIPMAP_LINEAR;
563 default:
564 UNREACHABLE();
565 return 0;
566 }
567 }
568
operator <<(std::ostream & os,FilterMode value)569 std::ostream &operator<<(std::ostream &os, FilterMode value)
570 {
571 switch (value)
572 {
573 case FilterMode::Nearest:
574 os << "GL_NEAREST";
575 break;
576 case FilterMode::Linear:
577 os << "GL_LINEAR";
578 break;
579 case FilterMode::NearestMipmapNearest:
580 os << "GL_NEAREST_MIPMAP_NEAREST";
581 break;
582 case FilterMode::NearestMipmapLinear:
583 os << "GL_NEAREST_MIPMAP_LINEAR";
584 break;
585 case FilterMode::LinearMipmapLinear:
586 os << "GL_LINEAR_MIPMAP_LINEAR";
587 break;
588 default:
589 os << "GL_INVALID_ENUM";
590 break;
591 }
592 return os;
593 }
594
595 template <>
FromGLenum(GLenum from)596 FogMode FromGLenum<FogMode>(GLenum from)
597 {
598 switch (from)
599 {
600 case GL_EXP:
601 return FogMode::Exp;
602 case GL_EXP2:
603 return FogMode::Exp2;
604 case GL_LINEAR:
605 return FogMode::Linear;
606 default:
607 return FogMode::InvalidEnum;
608 }
609 }
610
ToGLenum(FogMode from)611 GLenum ToGLenum(FogMode from)
612 {
613 switch (from)
614 {
615 case FogMode::Exp:
616 return GL_EXP;
617 case FogMode::Exp2:
618 return GL_EXP2;
619 case FogMode::Linear:
620 return GL_LINEAR;
621 default:
622 UNREACHABLE();
623 return 0;
624 }
625 }
626
operator <<(std::ostream & os,FogMode value)627 std::ostream &operator<<(std::ostream &os, FogMode value)
628 {
629 switch (value)
630 {
631 case FogMode::Exp:
632 os << "GL_EXP";
633 break;
634 case FogMode::Exp2:
635 os << "GL_EXP2";
636 break;
637 case FogMode::Linear:
638 os << "GL_LINEAR";
639 break;
640 default:
641 os << "GL_INVALID_ENUM";
642 break;
643 }
644 return os;
645 }
646
647 template <>
FromGLenum(GLenum from)648 GraphicsResetStatus FromGLenum<GraphicsResetStatus>(GLenum from)
649 {
650 switch (from)
651 {
652 case GL_NO_ERROR:
653 return GraphicsResetStatus::NoError;
654 case GL_GUILTY_CONTEXT_RESET:
655 return GraphicsResetStatus::GuiltyContextReset;
656 case GL_INNOCENT_CONTEXT_RESET:
657 return GraphicsResetStatus::InnocentContextReset;
658 case GL_UNKNOWN_CONTEXT_RESET:
659 return GraphicsResetStatus::UnknownContextReset;
660 case GL_PURGED_CONTEXT_RESET_NV:
661 return GraphicsResetStatus::PurgedContextResetNV;
662 default:
663 return GraphicsResetStatus::InvalidEnum;
664 }
665 }
666
ToGLenum(GraphicsResetStatus from)667 GLenum ToGLenum(GraphicsResetStatus from)
668 {
669 switch (from)
670 {
671 case GraphicsResetStatus::NoError:
672 return GL_NO_ERROR;
673 case GraphicsResetStatus::GuiltyContextReset:
674 return GL_GUILTY_CONTEXT_RESET;
675 case GraphicsResetStatus::InnocentContextReset:
676 return GL_INNOCENT_CONTEXT_RESET;
677 case GraphicsResetStatus::UnknownContextReset:
678 return GL_UNKNOWN_CONTEXT_RESET;
679 case GraphicsResetStatus::PurgedContextResetNV:
680 return GL_PURGED_CONTEXT_RESET_NV;
681 default:
682 UNREACHABLE();
683 return 0;
684 }
685 }
686
operator <<(std::ostream & os,GraphicsResetStatus value)687 std::ostream &operator<<(std::ostream &os, GraphicsResetStatus value)
688 {
689 switch (value)
690 {
691 case GraphicsResetStatus::NoError:
692 os << "GL_NO_ERROR";
693 break;
694 case GraphicsResetStatus::GuiltyContextReset:
695 os << "GL_GUILTY_CONTEXT_RESET";
696 break;
697 case GraphicsResetStatus::InnocentContextReset:
698 os << "GL_INNOCENT_CONTEXT_RESET";
699 break;
700 case GraphicsResetStatus::UnknownContextReset:
701 os << "GL_UNKNOWN_CONTEXT_RESET";
702 break;
703 case GraphicsResetStatus::PurgedContextResetNV:
704 os << "GL_PURGED_CONTEXT_RESET_NV";
705 break;
706 default:
707 os << "GL_INVALID_ENUM";
708 break;
709 }
710 return os;
711 }
712
713 template <>
FromGLenum(GLenum from)714 HandleType FromGLenum<HandleType>(GLenum from)
715 {
716 switch (from)
717 {
718 case GL_HANDLE_TYPE_OPAQUE_FD_EXT:
719 return HandleType::OpaqueFd;
720 case GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE:
721 return HandleType::ZirconVmo;
722 case GL_HANDLE_TYPE_ZIRCON_EVENT_ANGLE:
723 return HandleType::ZirconEvent;
724 default:
725 return HandleType::InvalidEnum;
726 }
727 }
728
ToGLenum(HandleType from)729 GLenum ToGLenum(HandleType from)
730 {
731 switch (from)
732 {
733 case HandleType::OpaqueFd:
734 return GL_HANDLE_TYPE_OPAQUE_FD_EXT;
735 case HandleType::ZirconVmo:
736 return GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE;
737 case HandleType::ZirconEvent:
738 return GL_HANDLE_TYPE_ZIRCON_EVENT_ANGLE;
739 default:
740 UNREACHABLE();
741 return 0;
742 }
743 }
744
operator <<(std::ostream & os,HandleType value)745 std::ostream &operator<<(std::ostream &os, HandleType value)
746 {
747 switch (value)
748 {
749 case HandleType::OpaqueFd:
750 os << "GL_HANDLE_TYPE_OPAQUE_FD_EXT";
751 break;
752 case HandleType::ZirconVmo:
753 os << "GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE";
754 break;
755 case HandleType::ZirconEvent:
756 os << "GL_HANDLE_TYPE_ZIRCON_EVENT_ANGLE";
757 break;
758 default:
759 os << "GL_INVALID_ENUM";
760 break;
761 }
762 return os;
763 }
764
765 template <>
FromGLenum(GLenum from)766 HintSetting FromGLenum<HintSetting>(GLenum from)
767 {
768 switch (from)
769 {
770 case GL_DONT_CARE:
771 return HintSetting::DontCare;
772 case GL_FASTEST:
773 return HintSetting::Fastest;
774 case GL_NICEST:
775 return HintSetting::Nicest;
776 default:
777 return HintSetting::InvalidEnum;
778 }
779 }
780
ToGLenum(HintSetting from)781 GLenum ToGLenum(HintSetting from)
782 {
783 switch (from)
784 {
785 case HintSetting::DontCare:
786 return GL_DONT_CARE;
787 case HintSetting::Fastest:
788 return GL_FASTEST;
789 case HintSetting::Nicest:
790 return GL_NICEST;
791 default:
792 UNREACHABLE();
793 return 0;
794 }
795 }
796
operator <<(std::ostream & os,HintSetting value)797 std::ostream &operator<<(std::ostream &os, HintSetting value)
798 {
799 switch (value)
800 {
801 case HintSetting::DontCare:
802 os << "GL_DONT_CARE";
803 break;
804 case HintSetting::Fastest:
805 os << "GL_FASTEST";
806 break;
807 case HintSetting::Nicest:
808 os << "GL_NICEST";
809 break;
810 default:
811 os << "GL_INVALID_ENUM";
812 break;
813 }
814 return os;
815 }
816
817 template <>
FromGLenum(GLenum from)818 ImageLayout FromGLenum<ImageLayout>(GLenum from)
819 {
820 switch (from)
821 {
822 case GL_NONE:
823 return ImageLayout::Undefined;
824 case GL_LAYOUT_GENERAL_EXT:
825 return ImageLayout::General;
826 case GL_LAYOUT_COLOR_ATTACHMENT_EXT:
827 return ImageLayout::ColorAttachment;
828 case GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT:
829 return ImageLayout::DepthStencilAttachment;
830 case GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT:
831 return ImageLayout::DepthStencilReadOnlyAttachment;
832 case GL_LAYOUT_SHADER_READ_ONLY_EXT:
833 return ImageLayout::ShaderReadOnly;
834 case GL_LAYOUT_TRANSFER_SRC_EXT:
835 return ImageLayout::TransferSrc;
836 case GL_LAYOUT_TRANSFER_DST_EXT:
837 return ImageLayout::TransferDst;
838 case GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT:
839 return ImageLayout::DepthReadOnlyStencilAttachment;
840 case GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT:
841 return ImageLayout::DepthAttachmentStencilReadOnly;
842 default:
843 return ImageLayout::InvalidEnum;
844 }
845 }
846
ToGLenum(ImageLayout from)847 GLenum ToGLenum(ImageLayout from)
848 {
849 switch (from)
850 {
851 case ImageLayout::Undefined:
852 return GL_NONE;
853 case ImageLayout::General:
854 return GL_LAYOUT_GENERAL_EXT;
855 case ImageLayout::ColorAttachment:
856 return GL_LAYOUT_COLOR_ATTACHMENT_EXT;
857 case ImageLayout::DepthStencilAttachment:
858 return GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT;
859 case ImageLayout::DepthStencilReadOnlyAttachment:
860 return GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT;
861 case ImageLayout::ShaderReadOnly:
862 return GL_LAYOUT_SHADER_READ_ONLY_EXT;
863 case ImageLayout::TransferSrc:
864 return GL_LAYOUT_TRANSFER_SRC_EXT;
865 case ImageLayout::TransferDst:
866 return GL_LAYOUT_TRANSFER_DST_EXT;
867 case ImageLayout::DepthReadOnlyStencilAttachment:
868 return GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT;
869 case ImageLayout::DepthAttachmentStencilReadOnly:
870 return GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT;
871 default:
872 UNREACHABLE();
873 return 0;
874 }
875 }
876
operator <<(std::ostream & os,ImageLayout value)877 std::ostream &operator<<(std::ostream &os, ImageLayout value)
878 {
879 switch (value)
880 {
881 case ImageLayout::Undefined:
882 os << "GL_NONE";
883 break;
884 case ImageLayout::General:
885 os << "GL_LAYOUT_GENERAL_EXT";
886 break;
887 case ImageLayout::ColorAttachment:
888 os << "GL_LAYOUT_COLOR_ATTACHMENT_EXT";
889 break;
890 case ImageLayout::DepthStencilAttachment:
891 os << "GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT";
892 break;
893 case ImageLayout::DepthStencilReadOnlyAttachment:
894 os << "GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT";
895 break;
896 case ImageLayout::ShaderReadOnly:
897 os << "GL_LAYOUT_SHADER_READ_ONLY_EXT";
898 break;
899 case ImageLayout::TransferSrc:
900 os << "GL_LAYOUT_TRANSFER_SRC_EXT";
901 break;
902 case ImageLayout::TransferDst:
903 os << "GL_LAYOUT_TRANSFER_DST_EXT";
904 break;
905 case ImageLayout::DepthReadOnlyStencilAttachment:
906 os << "GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT";
907 break;
908 case ImageLayout::DepthAttachmentStencilReadOnly:
909 os << "GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT";
910 break;
911 default:
912 os << "GL_INVALID_ENUM";
913 break;
914 }
915 return os;
916 }
917
918 template <>
FromGLenum(GLenum from)919 LightParameter FromGLenum<LightParameter>(GLenum from)
920 {
921 switch (from)
922 {
923 case GL_AMBIENT:
924 return LightParameter::Ambient;
925 case GL_AMBIENT_AND_DIFFUSE:
926 return LightParameter::AmbientAndDiffuse;
927 case GL_CONSTANT_ATTENUATION:
928 return LightParameter::ConstantAttenuation;
929 case GL_DIFFUSE:
930 return LightParameter::Diffuse;
931 case GL_LINEAR_ATTENUATION:
932 return LightParameter::LinearAttenuation;
933 case GL_POSITION:
934 return LightParameter::Position;
935 case GL_QUADRATIC_ATTENUATION:
936 return LightParameter::QuadraticAttenuation;
937 case GL_SPECULAR:
938 return LightParameter::Specular;
939 case GL_SPOT_CUTOFF:
940 return LightParameter::SpotCutoff;
941 case GL_SPOT_DIRECTION:
942 return LightParameter::SpotDirection;
943 case GL_SPOT_EXPONENT:
944 return LightParameter::SpotExponent;
945 default:
946 return LightParameter::InvalidEnum;
947 }
948 }
949
ToGLenum(LightParameter from)950 GLenum ToGLenum(LightParameter from)
951 {
952 switch (from)
953 {
954 case LightParameter::Ambient:
955 return GL_AMBIENT;
956 case LightParameter::AmbientAndDiffuse:
957 return GL_AMBIENT_AND_DIFFUSE;
958 case LightParameter::ConstantAttenuation:
959 return GL_CONSTANT_ATTENUATION;
960 case LightParameter::Diffuse:
961 return GL_DIFFUSE;
962 case LightParameter::LinearAttenuation:
963 return GL_LINEAR_ATTENUATION;
964 case LightParameter::Position:
965 return GL_POSITION;
966 case LightParameter::QuadraticAttenuation:
967 return GL_QUADRATIC_ATTENUATION;
968 case LightParameter::Specular:
969 return GL_SPECULAR;
970 case LightParameter::SpotCutoff:
971 return GL_SPOT_CUTOFF;
972 case LightParameter::SpotDirection:
973 return GL_SPOT_DIRECTION;
974 case LightParameter::SpotExponent:
975 return GL_SPOT_EXPONENT;
976 default:
977 UNREACHABLE();
978 return 0;
979 }
980 }
981
operator <<(std::ostream & os,LightParameter value)982 std::ostream &operator<<(std::ostream &os, LightParameter value)
983 {
984 switch (value)
985 {
986 case LightParameter::Ambient:
987 os << "GL_AMBIENT";
988 break;
989 case LightParameter::AmbientAndDiffuse:
990 os << "GL_AMBIENT_AND_DIFFUSE";
991 break;
992 case LightParameter::ConstantAttenuation:
993 os << "GL_CONSTANT_ATTENUATION";
994 break;
995 case LightParameter::Diffuse:
996 os << "GL_DIFFUSE";
997 break;
998 case LightParameter::LinearAttenuation:
999 os << "GL_LINEAR_ATTENUATION";
1000 break;
1001 case LightParameter::Position:
1002 os << "GL_POSITION";
1003 break;
1004 case LightParameter::QuadraticAttenuation:
1005 os << "GL_QUADRATIC_ATTENUATION";
1006 break;
1007 case LightParameter::Specular:
1008 os << "GL_SPECULAR";
1009 break;
1010 case LightParameter::SpotCutoff:
1011 os << "GL_SPOT_CUTOFF";
1012 break;
1013 case LightParameter::SpotDirection:
1014 os << "GL_SPOT_DIRECTION";
1015 break;
1016 case LightParameter::SpotExponent:
1017 os << "GL_SPOT_EXPONENT";
1018 break;
1019 default:
1020 os << "GL_INVALID_ENUM";
1021 break;
1022 }
1023 return os;
1024 }
1025
1026 template <>
FromGLenum(GLenum from)1027 LogicalOperation FromGLenum<LogicalOperation>(GLenum from)
1028 {
1029 switch (from)
1030 {
1031 case GL_AND:
1032 return LogicalOperation::And;
1033 case GL_AND_INVERTED:
1034 return LogicalOperation::AndInverted;
1035 case GL_AND_REVERSE:
1036 return LogicalOperation::AndReverse;
1037 case GL_CLEAR:
1038 return LogicalOperation::Clear;
1039 case GL_COPY:
1040 return LogicalOperation::Copy;
1041 case GL_COPY_INVERTED:
1042 return LogicalOperation::CopyInverted;
1043 case GL_EQUIV:
1044 return LogicalOperation::Equiv;
1045 case GL_INVERT:
1046 return LogicalOperation::Invert;
1047 case GL_NAND:
1048 return LogicalOperation::Nand;
1049 case GL_NOOP:
1050 return LogicalOperation::Noop;
1051 case GL_NOR:
1052 return LogicalOperation::Nor;
1053 case GL_OR:
1054 return LogicalOperation::Or;
1055 case GL_OR_INVERTED:
1056 return LogicalOperation::OrInverted;
1057 case GL_OR_REVERSE:
1058 return LogicalOperation::OrReverse;
1059 case GL_SET:
1060 return LogicalOperation::Set;
1061 case GL_XOR:
1062 return LogicalOperation::Xor;
1063 default:
1064 return LogicalOperation::InvalidEnum;
1065 }
1066 }
1067
ToGLenum(LogicalOperation from)1068 GLenum ToGLenum(LogicalOperation from)
1069 {
1070 switch (from)
1071 {
1072 case LogicalOperation::And:
1073 return GL_AND;
1074 case LogicalOperation::AndInverted:
1075 return GL_AND_INVERTED;
1076 case LogicalOperation::AndReverse:
1077 return GL_AND_REVERSE;
1078 case LogicalOperation::Clear:
1079 return GL_CLEAR;
1080 case LogicalOperation::Copy:
1081 return GL_COPY;
1082 case LogicalOperation::CopyInverted:
1083 return GL_COPY_INVERTED;
1084 case LogicalOperation::Equiv:
1085 return GL_EQUIV;
1086 case LogicalOperation::Invert:
1087 return GL_INVERT;
1088 case LogicalOperation::Nand:
1089 return GL_NAND;
1090 case LogicalOperation::Noop:
1091 return GL_NOOP;
1092 case LogicalOperation::Nor:
1093 return GL_NOR;
1094 case LogicalOperation::Or:
1095 return GL_OR;
1096 case LogicalOperation::OrInverted:
1097 return GL_OR_INVERTED;
1098 case LogicalOperation::OrReverse:
1099 return GL_OR_REVERSE;
1100 case LogicalOperation::Set:
1101 return GL_SET;
1102 case LogicalOperation::Xor:
1103 return GL_XOR;
1104 default:
1105 UNREACHABLE();
1106 return 0;
1107 }
1108 }
1109
operator <<(std::ostream & os,LogicalOperation value)1110 std::ostream &operator<<(std::ostream &os, LogicalOperation value)
1111 {
1112 switch (value)
1113 {
1114 case LogicalOperation::And:
1115 os << "GL_AND";
1116 break;
1117 case LogicalOperation::AndInverted:
1118 os << "GL_AND_INVERTED";
1119 break;
1120 case LogicalOperation::AndReverse:
1121 os << "GL_AND_REVERSE";
1122 break;
1123 case LogicalOperation::Clear:
1124 os << "GL_CLEAR";
1125 break;
1126 case LogicalOperation::Copy:
1127 os << "GL_COPY";
1128 break;
1129 case LogicalOperation::CopyInverted:
1130 os << "GL_COPY_INVERTED";
1131 break;
1132 case LogicalOperation::Equiv:
1133 os << "GL_EQUIV";
1134 break;
1135 case LogicalOperation::Invert:
1136 os << "GL_INVERT";
1137 break;
1138 case LogicalOperation::Nand:
1139 os << "GL_NAND";
1140 break;
1141 case LogicalOperation::Noop:
1142 os << "GL_NOOP";
1143 break;
1144 case LogicalOperation::Nor:
1145 os << "GL_NOR";
1146 break;
1147 case LogicalOperation::Or:
1148 os << "GL_OR";
1149 break;
1150 case LogicalOperation::OrInverted:
1151 os << "GL_OR_INVERTED";
1152 break;
1153 case LogicalOperation::OrReverse:
1154 os << "GL_OR_REVERSE";
1155 break;
1156 case LogicalOperation::Set:
1157 os << "GL_SET";
1158 break;
1159 case LogicalOperation::Xor:
1160 os << "GL_XOR";
1161 break;
1162 default:
1163 os << "GL_INVALID_ENUM";
1164 break;
1165 }
1166 return os;
1167 }
1168
1169 template <>
FromGLenum(GLenum from)1170 MaterialParameter FromGLenum<MaterialParameter>(GLenum from)
1171 {
1172 switch (from)
1173 {
1174 case GL_AMBIENT:
1175 return MaterialParameter::Ambient;
1176 case GL_AMBIENT_AND_DIFFUSE:
1177 return MaterialParameter::AmbientAndDiffuse;
1178 case GL_DIFFUSE:
1179 return MaterialParameter::Diffuse;
1180 case GL_EMISSION:
1181 return MaterialParameter::Emission;
1182 case GL_SHININESS:
1183 return MaterialParameter::Shininess;
1184 case GL_SPECULAR:
1185 return MaterialParameter::Specular;
1186 default:
1187 return MaterialParameter::InvalidEnum;
1188 }
1189 }
1190
ToGLenum(MaterialParameter from)1191 GLenum ToGLenum(MaterialParameter from)
1192 {
1193 switch (from)
1194 {
1195 case MaterialParameter::Ambient:
1196 return GL_AMBIENT;
1197 case MaterialParameter::AmbientAndDiffuse:
1198 return GL_AMBIENT_AND_DIFFUSE;
1199 case MaterialParameter::Diffuse:
1200 return GL_DIFFUSE;
1201 case MaterialParameter::Emission:
1202 return GL_EMISSION;
1203 case MaterialParameter::Shininess:
1204 return GL_SHININESS;
1205 case MaterialParameter::Specular:
1206 return GL_SPECULAR;
1207 default:
1208 UNREACHABLE();
1209 return 0;
1210 }
1211 }
1212
operator <<(std::ostream & os,MaterialParameter value)1213 std::ostream &operator<<(std::ostream &os, MaterialParameter value)
1214 {
1215 switch (value)
1216 {
1217 case MaterialParameter::Ambient:
1218 os << "GL_AMBIENT";
1219 break;
1220 case MaterialParameter::AmbientAndDiffuse:
1221 os << "GL_AMBIENT_AND_DIFFUSE";
1222 break;
1223 case MaterialParameter::Diffuse:
1224 os << "GL_DIFFUSE";
1225 break;
1226 case MaterialParameter::Emission:
1227 os << "GL_EMISSION";
1228 break;
1229 case MaterialParameter::Shininess:
1230 os << "GL_SHININESS";
1231 break;
1232 case MaterialParameter::Specular:
1233 os << "GL_SPECULAR";
1234 break;
1235 default:
1236 os << "GL_INVALID_ENUM";
1237 break;
1238 }
1239 return os;
1240 }
1241
1242 template <>
FromGLenum(GLenum from)1243 MatrixType FromGLenum<MatrixType>(GLenum from)
1244 {
1245 switch (from)
1246 {
1247 case GL_MODELVIEW:
1248 return MatrixType::Modelview;
1249 case GL_PROJECTION:
1250 return MatrixType::Projection;
1251 case GL_TEXTURE:
1252 return MatrixType::Texture;
1253 default:
1254 return MatrixType::InvalidEnum;
1255 }
1256 }
1257
ToGLenum(MatrixType from)1258 GLenum ToGLenum(MatrixType from)
1259 {
1260 switch (from)
1261 {
1262 case MatrixType::Modelview:
1263 return GL_MODELVIEW;
1264 case MatrixType::Projection:
1265 return GL_PROJECTION;
1266 case MatrixType::Texture:
1267 return GL_TEXTURE;
1268 default:
1269 UNREACHABLE();
1270 return 0;
1271 }
1272 }
1273
operator <<(std::ostream & os,MatrixType value)1274 std::ostream &operator<<(std::ostream &os, MatrixType value)
1275 {
1276 switch (value)
1277 {
1278 case MatrixType::Modelview:
1279 os << "GL_MODELVIEW";
1280 break;
1281 case MatrixType::Projection:
1282 os << "GL_PROJECTION";
1283 break;
1284 case MatrixType::Texture:
1285 os << "GL_TEXTURE";
1286 break;
1287 default:
1288 os << "GL_INVALID_ENUM";
1289 break;
1290 }
1291 return os;
1292 }
1293
1294 template <>
FromGLenum(GLenum from)1295 PointParameter FromGLenum<PointParameter>(GLenum from)
1296 {
1297 switch (from)
1298 {
1299 case GL_POINT_SIZE_MIN:
1300 return PointParameter::PointSizeMin;
1301 case GL_POINT_SIZE_MAX:
1302 return PointParameter::PointSizeMax;
1303 case GL_POINT_FADE_THRESHOLD_SIZE:
1304 return PointParameter::PointFadeThresholdSize;
1305 case GL_POINT_DISTANCE_ATTENUATION:
1306 return PointParameter::PointDistanceAttenuation;
1307 default:
1308 return PointParameter::InvalidEnum;
1309 }
1310 }
1311
ToGLenum(PointParameter from)1312 GLenum ToGLenum(PointParameter from)
1313 {
1314 switch (from)
1315 {
1316 case PointParameter::PointSizeMin:
1317 return GL_POINT_SIZE_MIN;
1318 case PointParameter::PointSizeMax:
1319 return GL_POINT_SIZE_MAX;
1320 case PointParameter::PointFadeThresholdSize:
1321 return GL_POINT_FADE_THRESHOLD_SIZE;
1322 case PointParameter::PointDistanceAttenuation:
1323 return GL_POINT_DISTANCE_ATTENUATION;
1324 default:
1325 UNREACHABLE();
1326 return 0;
1327 }
1328 }
1329
operator <<(std::ostream & os,PointParameter value)1330 std::ostream &operator<<(std::ostream &os, PointParameter value)
1331 {
1332 switch (value)
1333 {
1334 case PointParameter::PointSizeMin:
1335 os << "GL_POINT_SIZE_MIN";
1336 break;
1337 case PointParameter::PointSizeMax:
1338 os << "GL_POINT_SIZE_MAX";
1339 break;
1340 case PointParameter::PointFadeThresholdSize:
1341 os << "GL_POINT_FADE_THRESHOLD_SIZE";
1342 break;
1343 case PointParameter::PointDistanceAttenuation:
1344 os << "GL_POINT_DISTANCE_ATTENUATION";
1345 break;
1346 default:
1347 os << "GL_INVALID_ENUM";
1348 break;
1349 }
1350 return os;
1351 }
1352
1353 template <>
FromGLenum(GLenum from)1354 PolygonMode FromGLenum<PolygonMode>(GLenum from)
1355 {
1356 switch (from)
1357 {
1358 case GL_POINT_NV:
1359 return PolygonMode::Point;
1360 case GL_LINE_NV:
1361 return PolygonMode::Line;
1362 case GL_FILL_NV:
1363 return PolygonMode::Fill;
1364 default:
1365 return PolygonMode::InvalidEnum;
1366 }
1367 }
1368
ToGLenum(PolygonMode from)1369 GLenum ToGLenum(PolygonMode from)
1370 {
1371 switch (from)
1372 {
1373 case PolygonMode::Point:
1374 return GL_POINT_NV;
1375 case PolygonMode::Line:
1376 return GL_LINE_NV;
1377 case PolygonMode::Fill:
1378 return GL_FILL_NV;
1379 default:
1380 UNREACHABLE();
1381 return 0;
1382 }
1383 }
1384
operator <<(std::ostream & os,PolygonMode value)1385 std::ostream &operator<<(std::ostream &os, PolygonMode value)
1386 {
1387 switch (value)
1388 {
1389 case PolygonMode::Point:
1390 os << "GL_POINT_NV";
1391 break;
1392 case PolygonMode::Line:
1393 os << "GL_LINE_NV";
1394 break;
1395 case PolygonMode::Fill:
1396 os << "GL_FILL_NV";
1397 break;
1398 default:
1399 os << "GL_INVALID_ENUM";
1400 break;
1401 }
1402 return os;
1403 }
1404
1405 template <>
FromGLenum(GLenum from)1406 ProvokingVertexConvention FromGLenum<ProvokingVertexConvention>(GLenum from)
1407 {
1408 switch (from)
1409 {
1410 case GL_FIRST_VERTEX_CONVENTION_ANGLE:
1411 return ProvokingVertexConvention::FirstVertexConvention;
1412 case GL_LAST_VERTEX_CONVENTION_ANGLE:
1413 return ProvokingVertexConvention::LastVertexConvention;
1414 default:
1415 return ProvokingVertexConvention::InvalidEnum;
1416 }
1417 }
1418
ToGLenum(ProvokingVertexConvention from)1419 GLenum ToGLenum(ProvokingVertexConvention from)
1420 {
1421 switch (from)
1422 {
1423 case ProvokingVertexConvention::FirstVertexConvention:
1424 return GL_FIRST_VERTEX_CONVENTION_ANGLE;
1425 case ProvokingVertexConvention::LastVertexConvention:
1426 return GL_LAST_VERTEX_CONVENTION_ANGLE;
1427 default:
1428 UNREACHABLE();
1429 return 0;
1430 }
1431 }
1432
operator <<(std::ostream & os,ProvokingVertexConvention value)1433 std::ostream &operator<<(std::ostream &os, ProvokingVertexConvention value)
1434 {
1435 switch (value)
1436 {
1437 case ProvokingVertexConvention::FirstVertexConvention:
1438 os << "GL_FIRST_VERTEX_CONVENTION_ANGLE";
1439 break;
1440 case ProvokingVertexConvention::LastVertexConvention:
1441 os << "GL_LAST_VERTEX_CONVENTION_ANGLE";
1442 break;
1443 default:
1444 os << "GL_INVALID_ENUM";
1445 break;
1446 }
1447 return os;
1448 }
1449
1450 template <>
FromGLenum(GLenum from)1451 QueryType FromGLenum<QueryType>(GLenum from)
1452 {
1453 switch (from)
1454 {
1455 case GL_ANY_SAMPLES_PASSED:
1456 return QueryType::AnySamples;
1457 case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
1458 return QueryType::AnySamplesConservative;
1459 case GL_COMMANDS_COMPLETED_CHROMIUM:
1460 return QueryType::CommandsCompleted;
1461 case GL_PRIMITIVES_GENERATED_EXT:
1462 return QueryType::PrimitivesGenerated;
1463 case GL_TIME_ELAPSED_EXT:
1464 return QueryType::TimeElapsed;
1465 case GL_TIMESTAMP_EXT:
1466 return QueryType::Timestamp;
1467 case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
1468 return QueryType::TransformFeedbackPrimitivesWritten;
1469 default:
1470 return QueryType::InvalidEnum;
1471 }
1472 }
1473
ToGLenum(QueryType from)1474 GLenum ToGLenum(QueryType from)
1475 {
1476 switch (from)
1477 {
1478 case QueryType::AnySamples:
1479 return GL_ANY_SAMPLES_PASSED;
1480 case QueryType::AnySamplesConservative:
1481 return GL_ANY_SAMPLES_PASSED_CONSERVATIVE;
1482 case QueryType::CommandsCompleted:
1483 return GL_COMMANDS_COMPLETED_CHROMIUM;
1484 case QueryType::PrimitivesGenerated:
1485 return GL_PRIMITIVES_GENERATED_EXT;
1486 case QueryType::TimeElapsed:
1487 return GL_TIME_ELAPSED_EXT;
1488 case QueryType::Timestamp:
1489 return GL_TIMESTAMP_EXT;
1490 case QueryType::TransformFeedbackPrimitivesWritten:
1491 return GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN;
1492 default:
1493 UNREACHABLE();
1494 return 0;
1495 }
1496 }
1497
operator <<(std::ostream & os,QueryType value)1498 std::ostream &operator<<(std::ostream &os, QueryType value)
1499 {
1500 switch (value)
1501 {
1502 case QueryType::AnySamples:
1503 os << "GL_ANY_SAMPLES_PASSED";
1504 break;
1505 case QueryType::AnySamplesConservative:
1506 os << "GL_ANY_SAMPLES_PASSED_CONSERVATIVE";
1507 break;
1508 case QueryType::CommandsCompleted:
1509 os << "GL_COMMANDS_COMPLETED_CHROMIUM";
1510 break;
1511 case QueryType::PrimitivesGenerated:
1512 os << "GL_PRIMITIVES_GENERATED_EXT";
1513 break;
1514 case QueryType::TimeElapsed:
1515 os << "GL_TIME_ELAPSED_EXT";
1516 break;
1517 case QueryType::Timestamp:
1518 os << "GL_TIMESTAMP_EXT";
1519 break;
1520 case QueryType::TransformFeedbackPrimitivesWritten:
1521 os << "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN";
1522 break;
1523 default:
1524 os << "GL_INVALID_ENUM";
1525 break;
1526 }
1527 return os;
1528 }
1529
1530 template <>
FromGLenum(GLenum from)1531 ShaderType FromGLenum<ShaderType>(GLenum from)
1532 {
1533 switch (from)
1534 {
1535 case GL_VERTEX_SHADER:
1536 return ShaderType::Vertex;
1537 case GL_TESS_CONTROL_SHADER_EXT:
1538 return ShaderType::TessControl;
1539 case GL_TESS_EVALUATION_SHADER_EXT:
1540 return ShaderType::TessEvaluation;
1541 case GL_GEOMETRY_SHADER_EXT:
1542 return ShaderType::Geometry;
1543 case GL_FRAGMENT_SHADER:
1544 return ShaderType::Fragment;
1545 case GL_COMPUTE_SHADER:
1546 return ShaderType::Compute;
1547 default:
1548 return ShaderType::InvalidEnum;
1549 }
1550 }
1551
ToGLenum(ShaderType from)1552 GLenum ToGLenum(ShaderType from)
1553 {
1554 switch (from)
1555 {
1556 case ShaderType::Vertex:
1557 return GL_VERTEX_SHADER;
1558 case ShaderType::TessControl:
1559 return GL_TESS_CONTROL_SHADER_EXT;
1560 case ShaderType::TessEvaluation:
1561 return GL_TESS_EVALUATION_SHADER_EXT;
1562 case ShaderType::Geometry:
1563 return GL_GEOMETRY_SHADER_EXT;
1564 case ShaderType::Fragment:
1565 return GL_FRAGMENT_SHADER;
1566 case ShaderType::Compute:
1567 return GL_COMPUTE_SHADER;
1568 default:
1569 UNREACHABLE();
1570 return 0;
1571 }
1572 }
1573
operator <<(std::ostream & os,ShaderType value)1574 std::ostream &operator<<(std::ostream &os, ShaderType value)
1575 {
1576 switch (value)
1577 {
1578 case ShaderType::Vertex:
1579 os << "GL_VERTEX_SHADER";
1580 break;
1581 case ShaderType::TessControl:
1582 os << "GL_TESS_CONTROL_SHADER_EXT";
1583 break;
1584 case ShaderType::TessEvaluation:
1585 os << "GL_TESS_EVALUATION_SHADER_EXT";
1586 break;
1587 case ShaderType::Geometry:
1588 os << "GL_GEOMETRY_SHADER_EXT";
1589 break;
1590 case ShaderType::Fragment:
1591 os << "GL_FRAGMENT_SHADER";
1592 break;
1593 case ShaderType::Compute:
1594 os << "GL_COMPUTE_SHADER";
1595 break;
1596 default:
1597 os << "GL_INVALID_ENUM";
1598 break;
1599 }
1600 return os;
1601 }
1602
1603 template <>
FromGLenum(GLenum from)1604 ShadingModel FromGLenum<ShadingModel>(GLenum from)
1605 {
1606 switch (from)
1607 {
1608 case GL_FLAT:
1609 return ShadingModel::Flat;
1610 case GL_SMOOTH:
1611 return ShadingModel::Smooth;
1612 default:
1613 return ShadingModel::InvalidEnum;
1614 }
1615 }
1616
ToGLenum(ShadingModel from)1617 GLenum ToGLenum(ShadingModel from)
1618 {
1619 switch (from)
1620 {
1621 case ShadingModel::Flat:
1622 return GL_FLAT;
1623 case ShadingModel::Smooth:
1624 return GL_SMOOTH;
1625 default:
1626 UNREACHABLE();
1627 return 0;
1628 }
1629 }
1630
operator <<(std::ostream & os,ShadingModel value)1631 std::ostream &operator<<(std::ostream &os, ShadingModel value)
1632 {
1633 switch (value)
1634 {
1635 case ShadingModel::Flat:
1636 os << "GL_FLAT";
1637 break;
1638 case ShadingModel::Smooth:
1639 os << "GL_SMOOTH";
1640 break;
1641 default:
1642 os << "GL_INVALID_ENUM";
1643 break;
1644 }
1645 return os;
1646 }
1647
1648 template <>
FromGLenum(GLenum from)1649 ShadingRate FromGLenum<ShadingRate>(GLenum from)
1650 {
1651 switch (from)
1652 {
1653 case GL_NONE:
1654 return ShadingRate::Undefined;
1655 case GL_SHADING_RATE_1X1_PIXELS_QCOM:
1656 return ShadingRate::_1x1;
1657 case GL_SHADING_RATE_1X2_PIXELS_QCOM:
1658 return ShadingRate::_1x2;
1659 case GL_SHADING_RATE_2X1_PIXELS_QCOM:
1660 return ShadingRate::_2x1;
1661 case GL_SHADING_RATE_2X2_PIXELS_QCOM:
1662 return ShadingRate::_2x2;
1663 case GL_SHADING_RATE_4X2_PIXELS_QCOM:
1664 return ShadingRate::_4x2;
1665 case GL_SHADING_RATE_4X4_PIXELS_QCOM:
1666 return ShadingRate::_4x4;
1667 default:
1668 return ShadingRate::InvalidEnum;
1669 }
1670 }
1671
ToGLenum(ShadingRate from)1672 GLenum ToGLenum(ShadingRate from)
1673 {
1674 switch (from)
1675 {
1676 case ShadingRate::Undefined:
1677 return GL_NONE;
1678 case ShadingRate::_1x1:
1679 return GL_SHADING_RATE_1X1_PIXELS_QCOM;
1680 case ShadingRate::_1x2:
1681 return GL_SHADING_RATE_1X2_PIXELS_QCOM;
1682 case ShadingRate::_2x1:
1683 return GL_SHADING_RATE_2X1_PIXELS_QCOM;
1684 case ShadingRate::_2x2:
1685 return GL_SHADING_RATE_2X2_PIXELS_QCOM;
1686 case ShadingRate::_4x2:
1687 return GL_SHADING_RATE_4X2_PIXELS_QCOM;
1688 case ShadingRate::_4x4:
1689 return GL_SHADING_RATE_4X4_PIXELS_QCOM;
1690 default:
1691 UNREACHABLE();
1692 return 0;
1693 }
1694 }
1695
operator <<(std::ostream & os,ShadingRate value)1696 std::ostream &operator<<(std::ostream &os, ShadingRate value)
1697 {
1698 switch (value)
1699 {
1700 case ShadingRate::Undefined:
1701 os << "GL_NONE";
1702 break;
1703 case ShadingRate::_1x1:
1704 os << "GL_SHADING_RATE_1X1_PIXELS_QCOM";
1705 break;
1706 case ShadingRate::_1x2:
1707 os << "GL_SHADING_RATE_1X2_PIXELS_QCOM";
1708 break;
1709 case ShadingRate::_2x1:
1710 os << "GL_SHADING_RATE_2X1_PIXELS_QCOM";
1711 break;
1712 case ShadingRate::_2x2:
1713 os << "GL_SHADING_RATE_2X2_PIXELS_QCOM";
1714 break;
1715 case ShadingRate::_4x2:
1716 os << "GL_SHADING_RATE_4X2_PIXELS_QCOM";
1717 break;
1718 case ShadingRate::_4x4:
1719 os << "GL_SHADING_RATE_4X4_PIXELS_QCOM";
1720 break;
1721 default:
1722 os << "GL_INVALID_ENUM";
1723 break;
1724 }
1725 return os;
1726 }
1727
1728 template <>
FromGLenum(GLenum from)1729 TextureCombine FromGLenum<TextureCombine>(GLenum from)
1730 {
1731 switch (from)
1732 {
1733 case GL_ADD:
1734 return TextureCombine::Add;
1735 case GL_ADD_SIGNED:
1736 return TextureCombine::AddSigned;
1737 case GL_DOT3_RGB:
1738 return TextureCombine::Dot3Rgb;
1739 case GL_DOT3_RGBA:
1740 return TextureCombine::Dot3Rgba;
1741 case GL_INTERPOLATE:
1742 return TextureCombine::Interpolate;
1743 case GL_MODULATE:
1744 return TextureCombine::Modulate;
1745 case GL_REPLACE:
1746 return TextureCombine::Replace;
1747 case GL_SUBTRACT:
1748 return TextureCombine::Subtract;
1749 default:
1750 return TextureCombine::InvalidEnum;
1751 }
1752 }
1753
ToGLenum(TextureCombine from)1754 GLenum ToGLenum(TextureCombine from)
1755 {
1756 switch (from)
1757 {
1758 case TextureCombine::Add:
1759 return GL_ADD;
1760 case TextureCombine::AddSigned:
1761 return GL_ADD_SIGNED;
1762 case TextureCombine::Dot3Rgb:
1763 return GL_DOT3_RGB;
1764 case TextureCombine::Dot3Rgba:
1765 return GL_DOT3_RGBA;
1766 case TextureCombine::Interpolate:
1767 return GL_INTERPOLATE;
1768 case TextureCombine::Modulate:
1769 return GL_MODULATE;
1770 case TextureCombine::Replace:
1771 return GL_REPLACE;
1772 case TextureCombine::Subtract:
1773 return GL_SUBTRACT;
1774 default:
1775 UNREACHABLE();
1776 return 0;
1777 }
1778 }
1779
operator <<(std::ostream & os,TextureCombine value)1780 std::ostream &operator<<(std::ostream &os, TextureCombine value)
1781 {
1782 switch (value)
1783 {
1784 case TextureCombine::Add:
1785 os << "GL_ADD";
1786 break;
1787 case TextureCombine::AddSigned:
1788 os << "GL_ADD_SIGNED";
1789 break;
1790 case TextureCombine::Dot3Rgb:
1791 os << "GL_DOT3_RGB";
1792 break;
1793 case TextureCombine::Dot3Rgba:
1794 os << "GL_DOT3_RGBA";
1795 break;
1796 case TextureCombine::Interpolate:
1797 os << "GL_INTERPOLATE";
1798 break;
1799 case TextureCombine::Modulate:
1800 os << "GL_MODULATE";
1801 break;
1802 case TextureCombine::Replace:
1803 os << "GL_REPLACE";
1804 break;
1805 case TextureCombine::Subtract:
1806 os << "GL_SUBTRACT";
1807 break;
1808 default:
1809 os << "GL_INVALID_ENUM";
1810 break;
1811 }
1812 return os;
1813 }
1814
1815 template <>
FromGLenum(GLenum from)1816 TextureEnvMode FromGLenum<TextureEnvMode>(GLenum from)
1817 {
1818 switch (from)
1819 {
1820 case GL_ADD:
1821 return TextureEnvMode::Add;
1822 case GL_BLEND:
1823 return TextureEnvMode::Blend;
1824 case GL_COMBINE:
1825 return TextureEnvMode::Combine;
1826 case GL_DECAL:
1827 return TextureEnvMode::Decal;
1828 case GL_MODULATE:
1829 return TextureEnvMode::Modulate;
1830 case GL_REPLACE:
1831 return TextureEnvMode::Replace;
1832 default:
1833 return TextureEnvMode::InvalidEnum;
1834 }
1835 }
1836
ToGLenum(TextureEnvMode from)1837 GLenum ToGLenum(TextureEnvMode from)
1838 {
1839 switch (from)
1840 {
1841 case TextureEnvMode::Add:
1842 return GL_ADD;
1843 case TextureEnvMode::Blend:
1844 return GL_BLEND;
1845 case TextureEnvMode::Combine:
1846 return GL_COMBINE;
1847 case TextureEnvMode::Decal:
1848 return GL_DECAL;
1849 case TextureEnvMode::Modulate:
1850 return GL_MODULATE;
1851 case TextureEnvMode::Replace:
1852 return GL_REPLACE;
1853 default:
1854 UNREACHABLE();
1855 return 0;
1856 }
1857 }
1858
operator <<(std::ostream & os,TextureEnvMode value)1859 std::ostream &operator<<(std::ostream &os, TextureEnvMode value)
1860 {
1861 switch (value)
1862 {
1863 case TextureEnvMode::Add:
1864 os << "GL_ADD";
1865 break;
1866 case TextureEnvMode::Blend:
1867 os << "GL_BLEND";
1868 break;
1869 case TextureEnvMode::Combine:
1870 os << "GL_COMBINE";
1871 break;
1872 case TextureEnvMode::Decal:
1873 os << "GL_DECAL";
1874 break;
1875 case TextureEnvMode::Modulate:
1876 os << "GL_MODULATE";
1877 break;
1878 case TextureEnvMode::Replace:
1879 os << "GL_REPLACE";
1880 break;
1881 default:
1882 os << "GL_INVALID_ENUM";
1883 break;
1884 }
1885 return os;
1886 }
1887
1888 template <>
FromGLenum(GLenum from)1889 TextureEnvParameter FromGLenum<TextureEnvParameter>(GLenum from)
1890 {
1891 switch (from)
1892 {
1893 case GL_TEXTURE_ENV_MODE:
1894 return TextureEnvParameter::Mode;
1895 case GL_TEXTURE_ENV_COLOR:
1896 return TextureEnvParameter::Color;
1897 case GL_COMBINE_RGB:
1898 return TextureEnvParameter::CombineRgb;
1899 case GL_COMBINE_ALPHA:
1900 return TextureEnvParameter::CombineAlpha;
1901 case GL_RGB_SCALE:
1902 return TextureEnvParameter::RgbScale;
1903 case GL_ALPHA_SCALE:
1904 return TextureEnvParameter::AlphaScale;
1905 case GL_SRC0_RGB:
1906 return TextureEnvParameter::Src0Rgb;
1907 case GL_SRC1_RGB:
1908 return TextureEnvParameter::Src1Rgb;
1909 case GL_SRC2_RGB:
1910 return TextureEnvParameter::Src2Rgb;
1911 case GL_SRC0_ALPHA:
1912 return TextureEnvParameter::Src0Alpha;
1913 case GL_SRC1_ALPHA:
1914 return TextureEnvParameter::Src1Alpha;
1915 case GL_SRC2_ALPHA:
1916 return TextureEnvParameter::Src2Alpha;
1917 case GL_OPERAND0_RGB:
1918 return TextureEnvParameter::Op0Rgb;
1919 case GL_OPERAND1_RGB:
1920 return TextureEnvParameter::Op1Rgb;
1921 case GL_OPERAND2_RGB:
1922 return TextureEnvParameter::Op2Rgb;
1923 case GL_OPERAND0_ALPHA:
1924 return TextureEnvParameter::Op0Alpha;
1925 case GL_OPERAND1_ALPHA:
1926 return TextureEnvParameter::Op1Alpha;
1927 case GL_OPERAND2_ALPHA:
1928 return TextureEnvParameter::Op2Alpha;
1929 case GL_COORD_REPLACE_OES:
1930 return TextureEnvParameter::PointCoordReplace;
1931 default:
1932 return TextureEnvParameter::InvalidEnum;
1933 }
1934 }
1935
ToGLenum(TextureEnvParameter from)1936 GLenum ToGLenum(TextureEnvParameter from)
1937 {
1938 switch (from)
1939 {
1940 case TextureEnvParameter::Mode:
1941 return GL_TEXTURE_ENV_MODE;
1942 case TextureEnvParameter::Color:
1943 return GL_TEXTURE_ENV_COLOR;
1944 case TextureEnvParameter::CombineRgb:
1945 return GL_COMBINE_RGB;
1946 case TextureEnvParameter::CombineAlpha:
1947 return GL_COMBINE_ALPHA;
1948 case TextureEnvParameter::RgbScale:
1949 return GL_RGB_SCALE;
1950 case TextureEnvParameter::AlphaScale:
1951 return GL_ALPHA_SCALE;
1952 case TextureEnvParameter::Src0Rgb:
1953 return GL_SRC0_RGB;
1954 case TextureEnvParameter::Src1Rgb:
1955 return GL_SRC1_RGB;
1956 case TextureEnvParameter::Src2Rgb:
1957 return GL_SRC2_RGB;
1958 case TextureEnvParameter::Src0Alpha:
1959 return GL_SRC0_ALPHA;
1960 case TextureEnvParameter::Src1Alpha:
1961 return GL_SRC1_ALPHA;
1962 case TextureEnvParameter::Src2Alpha:
1963 return GL_SRC2_ALPHA;
1964 case TextureEnvParameter::Op0Rgb:
1965 return GL_OPERAND0_RGB;
1966 case TextureEnvParameter::Op1Rgb:
1967 return GL_OPERAND1_RGB;
1968 case TextureEnvParameter::Op2Rgb:
1969 return GL_OPERAND2_RGB;
1970 case TextureEnvParameter::Op0Alpha:
1971 return GL_OPERAND0_ALPHA;
1972 case TextureEnvParameter::Op1Alpha:
1973 return GL_OPERAND1_ALPHA;
1974 case TextureEnvParameter::Op2Alpha:
1975 return GL_OPERAND2_ALPHA;
1976 case TextureEnvParameter::PointCoordReplace:
1977 return GL_COORD_REPLACE_OES;
1978 default:
1979 UNREACHABLE();
1980 return 0;
1981 }
1982 }
1983
operator <<(std::ostream & os,TextureEnvParameter value)1984 std::ostream &operator<<(std::ostream &os, TextureEnvParameter value)
1985 {
1986 switch (value)
1987 {
1988 case TextureEnvParameter::Mode:
1989 os << "GL_TEXTURE_ENV_MODE";
1990 break;
1991 case TextureEnvParameter::Color:
1992 os << "GL_TEXTURE_ENV_COLOR";
1993 break;
1994 case TextureEnvParameter::CombineRgb:
1995 os << "GL_COMBINE_RGB";
1996 break;
1997 case TextureEnvParameter::CombineAlpha:
1998 os << "GL_COMBINE_ALPHA";
1999 break;
2000 case TextureEnvParameter::RgbScale:
2001 os << "GL_RGB_SCALE";
2002 break;
2003 case TextureEnvParameter::AlphaScale:
2004 os << "GL_ALPHA_SCALE";
2005 break;
2006 case TextureEnvParameter::Src0Rgb:
2007 os << "GL_SRC0_RGB";
2008 break;
2009 case TextureEnvParameter::Src1Rgb:
2010 os << "GL_SRC1_RGB";
2011 break;
2012 case TextureEnvParameter::Src2Rgb:
2013 os << "GL_SRC2_RGB";
2014 break;
2015 case TextureEnvParameter::Src0Alpha:
2016 os << "GL_SRC0_ALPHA";
2017 break;
2018 case TextureEnvParameter::Src1Alpha:
2019 os << "GL_SRC1_ALPHA";
2020 break;
2021 case TextureEnvParameter::Src2Alpha:
2022 os << "GL_SRC2_ALPHA";
2023 break;
2024 case TextureEnvParameter::Op0Rgb:
2025 os << "GL_OPERAND0_RGB";
2026 break;
2027 case TextureEnvParameter::Op1Rgb:
2028 os << "GL_OPERAND1_RGB";
2029 break;
2030 case TextureEnvParameter::Op2Rgb:
2031 os << "GL_OPERAND2_RGB";
2032 break;
2033 case TextureEnvParameter::Op0Alpha:
2034 os << "GL_OPERAND0_ALPHA";
2035 break;
2036 case TextureEnvParameter::Op1Alpha:
2037 os << "GL_OPERAND1_ALPHA";
2038 break;
2039 case TextureEnvParameter::Op2Alpha:
2040 os << "GL_OPERAND2_ALPHA";
2041 break;
2042 case TextureEnvParameter::PointCoordReplace:
2043 os << "GL_COORD_REPLACE_OES";
2044 break;
2045 default:
2046 os << "GL_INVALID_ENUM";
2047 break;
2048 }
2049 return os;
2050 }
2051
2052 template <>
FromGLenum(GLenum from)2053 TextureEnvTarget FromGLenum<TextureEnvTarget>(GLenum from)
2054 {
2055 switch (from)
2056 {
2057 case GL_TEXTURE_ENV:
2058 return TextureEnvTarget::Env;
2059 case GL_POINT_SPRITE_OES:
2060 return TextureEnvTarget::PointSprite;
2061 default:
2062 return TextureEnvTarget::InvalidEnum;
2063 }
2064 }
2065
ToGLenum(TextureEnvTarget from)2066 GLenum ToGLenum(TextureEnvTarget from)
2067 {
2068 switch (from)
2069 {
2070 case TextureEnvTarget::Env:
2071 return GL_TEXTURE_ENV;
2072 case TextureEnvTarget::PointSprite:
2073 return GL_POINT_SPRITE_OES;
2074 default:
2075 UNREACHABLE();
2076 return 0;
2077 }
2078 }
2079
operator <<(std::ostream & os,TextureEnvTarget value)2080 std::ostream &operator<<(std::ostream &os, TextureEnvTarget value)
2081 {
2082 switch (value)
2083 {
2084 case TextureEnvTarget::Env:
2085 os << "GL_TEXTURE_ENV";
2086 break;
2087 case TextureEnvTarget::PointSprite:
2088 os << "GL_POINT_SPRITE_OES";
2089 break;
2090 default:
2091 os << "GL_INVALID_ENUM";
2092 break;
2093 }
2094 return os;
2095 }
2096
2097 template <>
FromGLenum(GLenum from)2098 TextureOp FromGLenum<TextureOp>(GLenum from)
2099 {
2100 switch (from)
2101 {
2102 case GL_ONE_MINUS_SRC_ALPHA:
2103 return TextureOp::OneMinusSrcAlpha;
2104 case GL_ONE_MINUS_SRC_COLOR:
2105 return TextureOp::OneMinusSrcColor;
2106 case GL_SRC_ALPHA:
2107 return TextureOp::SrcAlpha;
2108 case GL_SRC_COLOR:
2109 return TextureOp::SrcColor;
2110 default:
2111 return TextureOp::InvalidEnum;
2112 }
2113 }
2114
ToGLenum(TextureOp from)2115 GLenum ToGLenum(TextureOp from)
2116 {
2117 switch (from)
2118 {
2119 case TextureOp::OneMinusSrcAlpha:
2120 return GL_ONE_MINUS_SRC_ALPHA;
2121 case TextureOp::OneMinusSrcColor:
2122 return GL_ONE_MINUS_SRC_COLOR;
2123 case TextureOp::SrcAlpha:
2124 return GL_SRC_ALPHA;
2125 case TextureOp::SrcColor:
2126 return GL_SRC_COLOR;
2127 default:
2128 UNREACHABLE();
2129 return 0;
2130 }
2131 }
2132
operator <<(std::ostream & os,TextureOp value)2133 std::ostream &operator<<(std::ostream &os, TextureOp value)
2134 {
2135 switch (value)
2136 {
2137 case TextureOp::OneMinusSrcAlpha:
2138 os << "GL_ONE_MINUS_SRC_ALPHA";
2139 break;
2140 case TextureOp::OneMinusSrcColor:
2141 os << "GL_ONE_MINUS_SRC_COLOR";
2142 break;
2143 case TextureOp::SrcAlpha:
2144 os << "GL_SRC_ALPHA";
2145 break;
2146 case TextureOp::SrcColor:
2147 os << "GL_SRC_COLOR";
2148 break;
2149 default:
2150 os << "GL_INVALID_ENUM";
2151 break;
2152 }
2153 return os;
2154 }
2155
2156 template <>
FromGLenum(GLenum from)2157 TextureSrc FromGLenum<TextureSrc>(GLenum from)
2158 {
2159 switch (from)
2160 {
2161 case GL_CONSTANT:
2162 return TextureSrc::Constant;
2163 case GL_PREVIOUS:
2164 return TextureSrc::Previous;
2165 case GL_PRIMARY_COLOR:
2166 return TextureSrc::PrimaryColor;
2167 case GL_TEXTURE:
2168 return TextureSrc::Texture;
2169 default:
2170 return TextureSrc::InvalidEnum;
2171 }
2172 }
2173
ToGLenum(TextureSrc from)2174 GLenum ToGLenum(TextureSrc from)
2175 {
2176 switch (from)
2177 {
2178 case TextureSrc::Constant:
2179 return GL_CONSTANT;
2180 case TextureSrc::Previous:
2181 return GL_PREVIOUS;
2182 case TextureSrc::PrimaryColor:
2183 return GL_PRIMARY_COLOR;
2184 case TextureSrc::Texture:
2185 return GL_TEXTURE;
2186 default:
2187 UNREACHABLE();
2188 return 0;
2189 }
2190 }
2191
operator <<(std::ostream & os,TextureSrc value)2192 std::ostream &operator<<(std::ostream &os, TextureSrc value)
2193 {
2194 switch (value)
2195 {
2196 case TextureSrc::Constant:
2197 os << "GL_CONSTANT";
2198 break;
2199 case TextureSrc::Previous:
2200 os << "GL_PREVIOUS";
2201 break;
2202 case TextureSrc::PrimaryColor:
2203 os << "GL_PRIMARY_COLOR";
2204 break;
2205 case TextureSrc::Texture:
2206 os << "GL_TEXTURE";
2207 break;
2208 default:
2209 os << "GL_INVALID_ENUM";
2210 break;
2211 }
2212 return os;
2213 }
2214
2215 template <>
FromGLenum(GLenum from)2216 TextureTarget FromGLenum<TextureTarget>(GLenum from)
2217 {
2218 switch (from)
2219 {
2220 case GL_TEXTURE_2D:
2221 return TextureTarget::_2D;
2222 case GL_TEXTURE_2D_ARRAY:
2223 return TextureTarget::_2DArray;
2224 case GL_TEXTURE_2D_MULTISAMPLE:
2225 return TextureTarget::_2DMultisample;
2226 case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
2227 return TextureTarget::_2DMultisampleArray;
2228 case GL_TEXTURE_3D:
2229 return TextureTarget::_3D;
2230 case GL_TEXTURE_EXTERNAL_OES:
2231 return TextureTarget::External;
2232 case GL_TEXTURE_RECTANGLE_ANGLE:
2233 return TextureTarget::Rectangle;
2234 case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
2235 return TextureTarget::CubeMapPositiveX;
2236 case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
2237 return TextureTarget::CubeMapNegativeX;
2238 case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
2239 return TextureTarget::CubeMapPositiveY;
2240 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
2241 return TextureTarget::CubeMapNegativeY;
2242 case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
2243 return TextureTarget::CubeMapPositiveZ;
2244 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
2245 return TextureTarget::CubeMapNegativeZ;
2246 case GL_TEXTURE_CUBE_MAP_ARRAY:
2247 return TextureTarget::CubeMapArray;
2248 case GL_TEXTURE_VIDEO_IMAGE_WEBGL:
2249 return TextureTarget::VideoImage;
2250 case GL_TEXTURE_BUFFER:
2251 return TextureTarget::Buffer;
2252 default:
2253 return TextureTarget::InvalidEnum;
2254 }
2255 }
2256
ToGLenum(TextureTarget from)2257 GLenum ToGLenum(TextureTarget from)
2258 {
2259 switch (from)
2260 {
2261 case TextureTarget::_2D:
2262 return GL_TEXTURE_2D;
2263 case TextureTarget::_2DArray:
2264 return GL_TEXTURE_2D_ARRAY;
2265 case TextureTarget::_2DMultisample:
2266 return GL_TEXTURE_2D_MULTISAMPLE;
2267 case TextureTarget::_2DMultisampleArray:
2268 return GL_TEXTURE_2D_MULTISAMPLE_ARRAY;
2269 case TextureTarget::_3D:
2270 return GL_TEXTURE_3D;
2271 case TextureTarget::External:
2272 return GL_TEXTURE_EXTERNAL_OES;
2273 case TextureTarget::Rectangle:
2274 return GL_TEXTURE_RECTANGLE_ANGLE;
2275 case TextureTarget::CubeMapPositiveX:
2276 return GL_TEXTURE_CUBE_MAP_POSITIVE_X;
2277 case TextureTarget::CubeMapNegativeX:
2278 return GL_TEXTURE_CUBE_MAP_NEGATIVE_X;
2279 case TextureTarget::CubeMapPositiveY:
2280 return GL_TEXTURE_CUBE_MAP_POSITIVE_Y;
2281 case TextureTarget::CubeMapNegativeY:
2282 return GL_TEXTURE_CUBE_MAP_NEGATIVE_Y;
2283 case TextureTarget::CubeMapPositiveZ:
2284 return GL_TEXTURE_CUBE_MAP_POSITIVE_Z;
2285 case TextureTarget::CubeMapNegativeZ:
2286 return GL_TEXTURE_CUBE_MAP_NEGATIVE_Z;
2287 case TextureTarget::CubeMapArray:
2288 return GL_TEXTURE_CUBE_MAP_ARRAY;
2289 case TextureTarget::VideoImage:
2290 return GL_TEXTURE_VIDEO_IMAGE_WEBGL;
2291 case TextureTarget::Buffer:
2292 return GL_TEXTURE_BUFFER;
2293 default:
2294 UNREACHABLE();
2295 return 0;
2296 }
2297 }
2298
operator <<(std::ostream & os,TextureTarget value)2299 std::ostream &operator<<(std::ostream &os, TextureTarget value)
2300 {
2301 switch (value)
2302 {
2303 case TextureTarget::_2D:
2304 os << "GL_TEXTURE_2D";
2305 break;
2306 case TextureTarget::_2DArray:
2307 os << "GL_TEXTURE_2D_ARRAY";
2308 break;
2309 case TextureTarget::_2DMultisample:
2310 os << "GL_TEXTURE_2D_MULTISAMPLE";
2311 break;
2312 case TextureTarget::_2DMultisampleArray:
2313 os << "GL_TEXTURE_2D_MULTISAMPLE_ARRAY";
2314 break;
2315 case TextureTarget::_3D:
2316 os << "GL_TEXTURE_3D";
2317 break;
2318 case TextureTarget::External:
2319 os << "GL_TEXTURE_EXTERNAL_OES";
2320 break;
2321 case TextureTarget::Rectangle:
2322 os << "GL_TEXTURE_RECTANGLE_ANGLE";
2323 break;
2324 case TextureTarget::CubeMapPositiveX:
2325 os << "GL_TEXTURE_CUBE_MAP_POSITIVE_X";
2326 break;
2327 case TextureTarget::CubeMapNegativeX:
2328 os << "GL_TEXTURE_CUBE_MAP_NEGATIVE_X";
2329 break;
2330 case TextureTarget::CubeMapPositiveY:
2331 os << "GL_TEXTURE_CUBE_MAP_POSITIVE_Y";
2332 break;
2333 case TextureTarget::CubeMapNegativeY:
2334 os << "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y";
2335 break;
2336 case TextureTarget::CubeMapPositiveZ:
2337 os << "GL_TEXTURE_CUBE_MAP_POSITIVE_Z";
2338 break;
2339 case TextureTarget::CubeMapNegativeZ:
2340 os << "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z";
2341 break;
2342 case TextureTarget::CubeMapArray:
2343 os << "GL_TEXTURE_CUBE_MAP_ARRAY";
2344 break;
2345 case TextureTarget::VideoImage:
2346 os << "GL_TEXTURE_VIDEO_IMAGE_WEBGL";
2347 break;
2348 case TextureTarget::Buffer:
2349 os << "GL_TEXTURE_BUFFER";
2350 break;
2351 default:
2352 os << "GL_INVALID_ENUM";
2353 break;
2354 }
2355 return os;
2356 }
2357
2358 template <>
FromGLenum(GLenum from)2359 TextureType FromGLenum<TextureType>(GLenum from)
2360 {
2361 switch (from)
2362 {
2363 case GL_TEXTURE_2D:
2364 return TextureType::_2D;
2365 case GL_TEXTURE_2D_ARRAY:
2366 return TextureType::_2DArray;
2367 case GL_TEXTURE_2D_MULTISAMPLE:
2368 return TextureType::_2DMultisample;
2369 case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
2370 return TextureType::_2DMultisampleArray;
2371 case GL_TEXTURE_3D:
2372 return TextureType::_3D;
2373 case GL_TEXTURE_EXTERNAL_OES:
2374 return TextureType::External;
2375 case GL_TEXTURE_RECTANGLE_ANGLE:
2376 return TextureType::Rectangle;
2377 case GL_TEXTURE_CUBE_MAP:
2378 return TextureType::CubeMap;
2379 case GL_TEXTURE_CUBE_MAP_ARRAY:
2380 return TextureType::CubeMapArray;
2381 case GL_TEXTURE_VIDEO_IMAGE_WEBGL:
2382 return TextureType::VideoImage;
2383 case GL_TEXTURE_BUFFER:
2384 return TextureType::Buffer;
2385 default:
2386 return TextureType::InvalidEnum;
2387 }
2388 }
2389
ToGLenum(TextureType from)2390 GLenum ToGLenum(TextureType from)
2391 {
2392 switch (from)
2393 {
2394 case TextureType::_2D:
2395 return GL_TEXTURE_2D;
2396 case TextureType::_2DArray:
2397 return GL_TEXTURE_2D_ARRAY;
2398 case TextureType::_2DMultisample:
2399 return GL_TEXTURE_2D_MULTISAMPLE;
2400 case TextureType::_2DMultisampleArray:
2401 return GL_TEXTURE_2D_MULTISAMPLE_ARRAY;
2402 case TextureType::_3D:
2403 return GL_TEXTURE_3D;
2404 case TextureType::External:
2405 return GL_TEXTURE_EXTERNAL_OES;
2406 case TextureType::Rectangle:
2407 return GL_TEXTURE_RECTANGLE_ANGLE;
2408 case TextureType::CubeMap:
2409 return GL_TEXTURE_CUBE_MAP;
2410 case TextureType::CubeMapArray:
2411 return GL_TEXTURE_CUBE_MAP_ARRAY;
2412 case TextureType::VideoImage:
2413 return GL_TEXTURE_VIDEO_IMAGE_WEBGL;
2414 case TextureType::Buffer:
2415 return GL_TEXTURE_BUFFER;
2416 default:
2417 UNREACHABLE();
2418 return 0;
2419 }
2420 }
2421
operator <<(std::ostream & os,TextureType value)2422 std::ostream &operator<<(std::ostream &os, TextureType value)
2423 {
2424 switch (value)
2425 {
2426 case TextureType::_2D:
2427 os << "GL_TEXTURE_2D";
2428 break;
2429 case TextureType::_2DArray:
2430 os << "GL_TEXTURE_2D_ARRAY";
2431 break;
2432 case TextureType::_2DMultisample:
2433 os << "GL_TEXTURE_2D_MULTISAMPLE";
2434 break;
2435 case TextureType::_2DMultisampleArray:
2436 os << "GL_TEXTURE_2D_MULTISAMPLE_ARRAY";
2437 break;
2438 case TextureType::_3D:
2439 os << "GL_TEXTURE_3D";
2440 break;
2441 case TextureType::External:
2442 os << "GL_TEXTURE_EXTERNAL_OES";
2443 break;
2444 case TextureType::Rectangle:
2445 os << "GL_TEXTURE_RECTANGLE_ANGLE";
2446 break;
2447 case TextureType::CubeMap:
2448 os << "GL_TEXTURE_CUBE_MAP";
2449 break;
2450 case TextureType::CubeMapArray:
2451 os << "GL_TEXTURE_CUBE_MAP_ARRAY";
2452 break;
2453 case TextureType::VideoImage:
2454 os << "GL_TEXTURE_VIDEO_IMAGE_WEBGL";
2455 break;
2456 case TextureType::Buffer:
2457 os << "GL_TEXTURE_BUFFER";
2458 break;
2459 default:
2460 os << "GL_INVALID_ENUM";
2461 break;
2462 }
2463 return os;
2464 }
2465
2466 template <>
FromGLenum(GLenum from)2467 TilingMode FromGLenum<TilingMode>(GLenum from)
2468 {
2469 switch (from)
2470 {
2471 case GL_OPTIMAL_TILING_EXT:
2472 return TilingMode::Optimal;
2473 case GL_LINEAR_TILING_EXT:
2474 return TilingMode::Linear;
2475 default:
2476 return TilingMode::InvalidEnum;
2477 }
2478 }
2479
ToGLenum(TilingMode from)2480 GLenum ToGLenum(TilingMode from)
2481 {
2482 switch (from)
2483 {
2484 case TilingMode::Optimal:
2485 return GL_OPTIMAL_TILING_EXT;
2486 case TilingMode::Linear:
2487 return GL_LINEAR_TILING_EXT;
2488 default:
2489 UNREACHABLE();
2490 return 0;
2491 }
2492 }
2493
operator <<(std::ostream & os,TilingMode value)2494 std::ostream &operator<<(std::ostream &os, TilingMode value)
2495 {
2496 switch (value)
2497 {
2498 case TilingMode::Optimal:
2499 os << "GL_OPTIMAL_TILING_EXT";
2500 break;
2501 case TilingMode::Linear:
2502 os << "GL_LINEAR_TILING_EXT";
2503 break;
2504 default:
2505 os << "GL_INVALID_ENUM";
2506 break;
2507 }
2508 return os;
2509 }
2510
2511 template <>
FromGLenum(GLenum from)2512 VertexArrayType FromGLenum<VertexArrayType>(GLenum from)
2513 {
2514 switch (from)
2515 {
2516 case GL_COLOR_ARRAY:
2517 return VertexArrayType::Color;
2518 case GL_NORMAL_ARRAY:
2519 return VertexArrayType::Normal;
2520 case GL_POINT_SIZE_ARRAY_OES:
2521 return VertexArrayType::PointSize;
2522 case GL_TEXTURE_COORD_ARRAY:
2523 return VertexArrayType::TextureCoord;
2524 case GL_VERTEX_ARRAY:
2525 return VertexArrayType::Vertex;
2526 default:
2527 return VertexArrayType::InvalidEnum;
2528 }
2529 }
2530
ToGLenum(VertexArrayType from)2531 GLenum ToGLenum(VertexArrayType from)
2532 {
2533 switch (from)
2534 {
2535 case VertexArrayType::Color:
2536 return GL_COLOR_ARRAY;
2537 case VertexArrayType::Normal:
2538 return GL_NORMAL_ARRAY;
2539 case VertexArrayType::PointSize:
2540 return GL_POINT_SIZE_ARRAY_OES;
2541 case VertexArrayType::TextureCoord:
2542 return GL_TEXTURE_COORD_ARRAY;
2543 case VertexArrayType::Vertex:
2544 return GL_VERTEX_ARRAY;
2545 default:
2546 UNREACHABLE();
2547 return 0;
2548 }
2549 }
2550
operator <<(std::ostream & os,VertexArrayType value)2551 std::ostream &operator<<(std::ostream &os, VertexArrayType value)
2552 {
2553 switch (value)
2554 {
2555 case VertexArrayType::Color:
2556 os << "GL_COLOR_ARRAY";
2557 break;
2558 case VertexArrayType::Normal:
2559 os << "GL_NORMAL_ARRAY";
2560 break;
2561 case VertexArrayType::PointSize:
2562 os << "GL_POINT_SIZE_ARRAY_OES";
2563 break;
2564 case VertexArrayType::TextureCoord:
2565 os << "GL_TEXTURE_COORD_ARRAY";
2566 break;
2567 case VertexArrayType::Vertex:
2568 os << "GL_VERTEX_ARRAY";
2569 break;
2570 default:
2571 os << "GL_INVALID_ENUM";
2572 break;
2573 }
2574 return os;
2575 }
2576
2577 template <>
FromGLenum(GLenum from)2578 WrapMode FromGLenum<WrapMode>(GLenum from)
2579 {
2580 switch (from)
2581 {
2582 case GL_CLAMP_TO_EDGE:
2583 return WrapMode::ClampToEdge;
2584 case GL_CLAMP_TO_BORDER:
2585 return WrapMode::ClampToBorder;
2586 case GL_MIRRORED_REPEAT:
2587 return WrapMode::MirroredRepeat;
2588 case GL_REPEAT:
2589 return WrapMode::Repeat;
2590 default:
2591 return WrapMode::InvalidEnum;
2592 }
2593 }
2594
ToGLenum(WrapMode from)2595 GLenum ToGLenum(WrapMode from)
2596 {
2597 switch (from)
2598 {
2599 case WrapMode::ClampToEdge:
2600 return GL_CLAMP_TO_EDGE;
2601 case WrapMode::ClampToBorder:
2602 return GL_CLAMP_TO_BORDER;
2603 case WrapMode::MirroredRepeat:
2604 return GL_MIRRORED_REPEAT;
2605 case WrapMode::Repeat:
2606 return GL_REPEAT;
2607 default:
2608 UNREACHABLE();
2609 return 0;
2610 }
2611 }
2612
operator <<(std::ostream & os,WrapMode value)2613 std::ostream &operator<<(std::ostream &os, WrapMode value)
2614 {
2615 switch (value)
2616 {
2617 case WrapMode::ClampToEdge:
2618 os << "GL_CLAMP_TO_EDGE";
2619 break;
2620 case WrapMode::ClampToBorder:
2621 os << "GL_CLAMP_TO_BORDER";
2622 break;
2623 case WrapMode::MirroredRepeat:
2624 os << "GL_MIRRORED_REPEAT";
2625 break;
2626 case WrapMode::Repeat:
2627 os << "GL_REPEAT";
2628 break;
2629 default:
2630 os << "GL_INVALID_ENUM";
2631 break;
2632 }
2633 return os;
2634 }
2635
2636 } // namespace gl
2637