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