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