xref: /aosp_15_r20/external/angle/src/common/PackedGLEnums_autogen.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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