1 // Copyright 2018 The ANGLE Project Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 //
5 // PackedGLEnums.cpp:
6 // Declares ANGLE-specific enums classes for GLEnum and functions operating
7 // on them.
8
9 #include "common/PackedEnums.h"
10
11 #include "common/utilities.h"
12
13 namespace gl
14 {
15
TextureTargetToType(TextureTarget target)16 TextureType TextureTargetToType(TextureTarget target)
17 {
18 switch (target)
19 {
20 case TextureTarget::CubeMapNegativeX:
21 case TextureTarget::CubeMapNegativeY:
22 case TextureTarget::CubeMapNegativeZ:
23 case TextureTarget::CubeMapPositiveX:
24 case TextureTarget::CubeMapPositiveY:
25 case TextureTarget::CubeMapPositiveZ:
26 return TextureType::CubeMap;
27 case TextureTarget::CubeMapArray:
28 return TextureType::CubeMapArray;
29 case TextureTarget::External:
30 return TextureType::External;
31 case TextureTarget::Rectangle:
32 return TextureType::Rectangle;
33 case TextureTarget::_2D:
34 return TextureType::_2D;
35 case TextureTarget::_2DArray:
36 return TextureType::_2DArray;
37 case TextureTarget::_2DMultisample:
38 return TextureType::_2DMultisample;
39 case TextureTarget::_2DMultisampleArray:
40 return TextureType::_2DMultisampleArray;
41 case TextureTarget::_3D:
42 return TextureType::_3D;
43 case TextureTarget::VideoImage:
44 return TextureType::VideoImage;
45 case TextureTarget::Buffer:
46 return TextureType::Buffer;
47 case TextureTarget::InvalidEnum:
48 return TextureType::InvalidEnum;
49 default:
50 UNREACHABLE();
51 return TextureType::InvalidEnum;
52 }
53 }
54
IsCubeMapFaceTarget(TextureTarget target)55 bool IsCubeMapFaceTarget(TextureTarget target)
56 {
57 return TextureTargetToType(target) == TextureType::CubeMap;
58 }
59
NonCubeTextureTypeToTarget(TextureType type)60 TextureTarget NonCubeTextureTypeToTarget(TextureType type)
61 {
62 switch (type)
63 {
64 case TextureType::External:
65 return TextureTarget::External;
66 case TextureType::Rectangle:
67 return TextureTarget::Rectangle;
68 case TextureType::_2D:
69 return TextureTarget::_2D;
70 case TextureType::_2DArray:
71 return TextureTarget::_2DArray;
72 case TextureType::_2DMultisample:
73 return TextureTarget::_2DMultisample;
74 case TextureType::_2DMultisampleArray:
75 return TextureTarget::_2DMultisampleArray;
76 case TextureType::_3D:
77 return TextureTarget::_3D;
78 case TextureType::CubeMapArray:
79 return TextureTarget::CubeMapArray;
80 case TextureType::VideoImage:
81 return TextureTarget::VideoImage;
82 case TextureType::Buffer:
83 return TextureTarget::Buffer;
84 default:
85 UNREACHABLE();
86 return TextureTarget::InvalidEnum;
87 }
88 }
89
90 // Check that we can do arithmetic on TextureTarget to convert from / to cube map faces
91 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeX) -
92 static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
93 1u,
94 "");
95 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapPositiveY) -
96 static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
97 2u,
98 "");
99 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeY) -
100 static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
101 3u,
102 "");
103 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapPositiveZ) -
104 static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
105 4u,
106 "");
107 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeZ) -
108 static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
109 5u,
110 "");
111
CubeFaceIndexToTextureTarget(size_t face)112 TextureTarget CubeFaceIndexToTextureTarget(size_t face)
113 {
114 ASSERT(face < 6u);
115 return static_cast<TextureTarget>(static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) + face);
116 }
117
CubeMapTextureTargetToFaceIndex(TextureTarget target)118 size_t CubeMapTextureTargetToFaceIndex(TextureTarget target)
119 {
120 ASSERT(IsCubeMapFaceTarget(target));
121 return static_cast<uint8_t>(target) - static_cast<uint8_t>(TextureTarget::CubeMapPositiveX);
122 }
123
SamplerTypeToTextureType(GLenum samplerType)124 TextureType SamplerTypeToTextureType(GLenum samplerType)
125 {
126 switch (samplerType)
127 {
128 case GL_SAMPLER_2D:
129 case GL_INT_SAMPLER_2D:
130 case GL_UNSIGNED_INT_SAMPLER_2D:
131 case GL_SAMPLER_2D_SHADOW:
132 return TextureType::_2D;
133
134 case GL_SAMPLER_EXTERNAL_OES:
135 case GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT:
136 return TextureType::External;
137
138 case GL_SAMPLER_CUBE:
139 case GL_INT_SAMPLER_CUBE:
140 case GL_UNSIGNED_INT_SAMPLER_CUBE:
141 case GL_SAMPLER_CUBE_SHADOW:
142 return TextureType::CubeMap;
143
144 case GL_SAMPLER_CUBE_MAP_ARRAY:
145 case GL_INT_SAMPLER_CUBE_MAP_ARRAY:
146 case GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY:
147 case GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW:
148 return TextureType::CubeMapArray;
149
150 case GL_SAMPLER_2D_ARRAY:
151 case GL_INT_SAMPLER_2D_ARRAY:
152 case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
153 case GL_SAMPLER_2D_ARRAY_SHADOW:
154 return TextureType::_2DArray;
155
156 case GL_SAMPLER_3D:
157 case GL_INT_SAMPLER_3D:
158 case GL_UNSIGNED_INT_SAMPLER_3D:
159 return TextureType::_3D;
160
161 case GL_SAMPLER_2D_MULTISAMPLE:
162 case GL_INT_SAMPLER_2D_MULTISAMPLE:
163 case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
164 return TextureType::_2DMultisample;
165
166 case GL_SAMPLER_2D_MULTISAMPLE_ARRAY:
167 case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
168 case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
169 return TextureType::_2DMultisampleArray;
170
171 case GL_SAMPLER_BUFFER:
172 case GL_INT_SAMPLER_BUFFER:
173 case GL_UNSIGNED_INT_SAMPLER_BUFFER:
174 return TextureType::Buffer;
175
176 case GL_SAMPLER_2D_RECT_ANGLE:
177 return TextureType::Rectangle;
178
179 case GL_SAMPLER_VIDEO_IMAGE_WEBGL:
180 return TextureType::VideoImage;
181
182 default:
183 UNREACHABLE();
184 return TextureType::InvalidEnum;
185 }
186 }
187
ImageTypeToTextureType(GLenum imageType)188 TextureType ImageTypeToTextureType(GLenum imageType)
189 {
190 switch (imageType)
191 {
192 case GL_IMAGE_2D:
193 case GL_INT_IMAGE_2D:
194 case GL_UNSIGNED_INT_IMAGE_2D:
195 return TextureType::_2D;
196
197 case GL_IMAGE_CUBE:
198 case GL_INT_IMAGE_CUBE:
199 case GL_UNSIGNED_INT_IMAGE_CUBE:
200 return TextureType::CubeMap;
201
202 case GL_IMAGE_CUBE_MAP_ARRAY:
203 case GL_INT_IMAGE_CUBE_MAP_ARRAY:
204 case GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY:
205 return TextureType::CubeMapArray;
206
207 case GL_IMAGE_2D_ARRAY:
208 case GL_INT_IMAGE_2D_ARRAY:
209 case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
210 return TextureType::_2DArray;
211
212 case GL_IMAGE_3D:
213 case GL_INT_IMAGE_3D:
214 case GL_UNSIGNED_INT_IMAGE_3D:
215 return TextureType::_3D;
216
217 case GL_IMAGE_BUFFER:
218 case GL_INT_IMAGE_BUFFER:
219 case GL_UNSIGNED_INT_IMAGE_BUFFER:
220 return TextureType::Buffer;
221
222 default:
223 UNREACHABLE();
224 return TextureType::InvalidEnum;
225 }
226 }
227
IsMultisampled(TextureType type)228 bool IsMultisampled(TextureType type)
229 {
230 switch (type)
231 {
232 case TextureType::_2DMultisample:
233 case TextureType::_2DMultisampleArray:
234 return true;
235 default:
236 return false;
237 }
238 }
239
IsArrayTextureType(TextureType type)240 bool IsArrayTextureType(TextureType type)
241 {
242 switch (type)
243 {
244 case TextureType::_2DArray:
245 case TextureType::_2DMultisampleArray:
246 case TextureType::CubeMapArray:
247 return true;
248 default:
249 return false;
250 }
251 }
252
IsLayeredTextureType(TextureType type)253 bool IsLayeredTextureType(TextureType type)
254 {
255 switch (type)
256 {
257 case TextureType::_2DArray:
258 case TextureType::_2DMultisampleArray:
259 case TextureType::_3D:
260 case TextureType::CubeMap:
261 case TextureType::CubeMapArray:
262 return true;
263 default:
264 return false;
265 }
266 }
267
IsStaticBufferUsage(BufferUsage useage)268 bool IsStaticBufferUsage(BufferUsage useage)
269 {
270 switch (useage)
271 {
272 case BufferUsage::StaticCopy:
273 case BufferUsage::StaticDraw:
274 case BufferUsage::StaticRead:
275 return true;
276 default:
277 return false;
278 }
279 }
280
operator <<(std::ostream & os,PrimitiveMode value)281 std::ostream &operator<<(std::ostream &os, PrimitiveMode value)
282 {
283 switch (value)
284 {
285 case PrimitiveMode::LineLoop:
286 os << "GL_LINE_LOOP";
287 break;
288 case PrimitiveMode::Lines:
289 os << "GL_LINES";
290 break;
291 case PrimitiveMode::LinesAdjacency:
292 os << "GL_LINES_ADJACENCY";
293 break;
294 case PrimitiveMode::LineStrip:
295 os << "GL_LINE_STRIP";
296 break;
297 case PrimitiveMode::LineStripAdjacency:
298 os << "GL_LINE_STRIP_ADJANCENCY";
299 break;
300 case PrimitiveMode::Patches:
301 os << "GL_PATCHES";
302 break;
303 case PrimitiveMode::Points:
304 os << "GL_POINTS";
305 break;
306 case PrimitiveMode::TriangleFan:
307 os << "GL_TRIANGLE_FAN";
308 break;
309 case PrimitiveMode::Triangles:
310 os << "GL_TRIANGLES";
311 break;
312 case PrimitiveMode::TrianglesAdjacency:
313 os << "GL_TRIANGLES_ADJANCENCY";
314 break;
315 case PrimitiveMode::TriangleStrip:
316 os << "GL_TRIANGLE_STRIP";
317 break;
318 case PrimitiveMode::TriangleStripAdjacency:
319 os << "GL_TRIANGLE_STRIP_ADJACENCY";
320 break;
321 default:
322 os << "GL_INVALID_ENUM";
323 break;
324 }
325 return os;
326 }
327
operator <<(std::ostream & os,DrawElementsType value)328 std::ostream &operator<<(std::ostream &os, DrawElementsType value)
329 {
330 switch (value)
331 {
332 case DrawElementsType::UnsignedByte:
333 os << "GL_UNSIGNED_BYTE";
334 break;
335 case DrawElementsType::UnsignedShort:
336 os << "GL_UNSIGNED_SHORT";
337 break;
338 case DrawElementsType::UnsignedInt:
339 os << "GL_UNSIGNED_INT";
340 break;
341 default:
342 os << "GL_INVALID_ENUM";
343 break;
344 }
345
346 return os;
347 }
348
operator <<(std::ostream & os,BlendEquationType value)349 std::ostream &operator<<(std::ostream &os, BlendEquationType value)
350 {
351 switch (value)
352 {
353 case BlendEquationType::Add:
354 os << "GL_FUNC_ADD";
355 break;
356 case BlendEquationType::Min:
357 os << "GL_MIN";
358 break;
359 case BlendEquationType::Max:
360 os << "GL_MAX";
361 break;
362 case BlendEquationType::Subtract:
363 os << "GL_FUNC_SUBTRACT";
364 break;
365 case BlendEquationType::ReverseSubtract:
366 os << "GL_FUNC_REVERSE_SUBTRACT";
367 break;
368 case BlendEquationType::Multiply:
369 os << "GL_MULTIPLY_KHR";
370 break;
371 case BlendEquationType::Screen:
372 os << "GL_SCREEN_KHR";
373 break;
374 case BlendEquationType::Overlay:
375 os << "GL_OVERLAY_KHR";
376 break;
377 case BlendEquationType::Darken:
378 os << "GL_DARKEN_KHR";
379 break;
380 case BlendEquationType::Lighten:
381 os << "GL_LIGHTEN_KHR";
382 break;
383 case BlendEquationType::Colordodge:
384 os << "GL_COLORDODGE_KHR";
385 break;
386 case BlendEquationType::Colorburn:
387 os << "GL_COLORBURN_KHR";
388 break;
389 case BlendEquationType::Hardlight:
390 os << "GL_HARDLIGHT_KHR";
391 break;
392 case BlendEquationType::Softlight:
393 os << "GL_SOFTLIGHT_KHR";
394 break;
395 case BlendEquationType::Difference:
396 os << "GL_DIFFERENCE_KHR";
397 break;
398 case BlendEquationType::Exclusion:
399 os << "GL_EXCLUSION_KHR";
400 break;
401 case BlendEquationType::HslHue:
402 os << "GL_HSL_HUE_KHR";
403 break;
404 case BlendEquationType::HslSaturation:
405 os << "GL_HSL_SATURATION_KHR";
406 break;
407 case BlendEquationType::HslColor:
408 os << "GL_HSL_COLOR_KHR";
409 break;
410 case BlendEquationType::HslLuminosity:
411 os << "GL_HSL_LUMINOSITY_KHR";
412 break;
413 default:
414 os << "GL_INVALID_ENUM";
415 break;
416 }
417
418 return os;
419 }
420
operator <<(std::ostream & os,BlendFactorType value)421 std::ostream &operator<<(std::ostream &os, BlendFactorType value)
422 {
423 switch (value)
424 {
425 case BlendFactorType::Zero:
426 os << "GL_ZERO";
427 break;
428 case BlendFactorType::One:
429 os << "GL_ONE";
430 break;
431 case BlendFactorType::SrcColor:
432 os << "GL_SRC_COLOR";
433 break;
434 case BlendFactorType::OneMinusSrcColor:
435 os << "GL_ONE_MINUS_SRC_COLOR";
436 break;
437 case BlendFactorType::SrcAlpha:
438 os << "GL_SRC_ALPHA";
439 break;
440 case BlendFactorType::OneMinusSrcAlpha:
441 os << "GL_ONE_MINUS_SRC_ALPHA";
442 break;
443 case BlendFactorType::DstAlpha:
444 os << "GL_DST_ALPHA";
445 break;
446 case BlendFactorType::OneMinusDstAlpha:
447 os << "GL_ONE_MINUS_DST_ALPHA";
448 break;
449 case BlendFactorType::DstColor:
450 os << "GL_DST_COLOR";
451 break;
452 case BlendFactorType::OneMinusDstColor:
453 os << "GL_ONE_MINUS_DST_COLOR";
454 break;
455 case BlendFactorType::SrcAlphaSaturate:
456 os << "GL_SRC_ALPHA_SATURATE";
457 break;
458 case BlendFactorType::ConstantColor:
459 os << "GL_CONSTANT_COLOR";
460 break;
461 case BlendFactorType::OneMinusConstantColor:
462 os << "GL_ONE_MINUS_CONSTANT_COLOR";
463 break;
464 case BlendFactorType::ConstantAlpha:
465 os << "GL_CONSTANT_ALPHA";
466 break;
467 case BlendFactorType::OneMinusConstantAlpha:
468 os << "GL_ONE_MINUS_CONSTANT_ALPHA";
469 break;
470 case BlendFactorType::Src1Alpha:
471 os << "GL_SRC1_ALPHA_EXT";
472 break;
473 case BlendFactorType::Src1Color:
474 os << "GL_SRC1_COLOR_EXT";
475 break;
476 case BlendFactorType::OneMinusSrc1Color:
477 os << "GL_ONE_MINUS_SRC1_COLOR_EXT";
478 break;
479 case BlendFactorType::OneMinusSrc1Alpha:
480 os << "GL_ONE_MINUS_SRC1_ALPHA_EXT";
481 break;
482 default:
483 os << "GL_INVALID_ENUM";
484 break;
485 }
486
487 return os;
488 }
489
operator <<(std::ostream & os,VertexAttribType value)490 std::ostream &operator<<(std::ostream &os, VertexAttribType value)
491 {
492 switch (value)
493 {
494 case VertexAttribType::Byte:
495 os << "GL_BYTE";
496 break;
497 case VertexAttribType::Fixed:
498 os << "GL_FIXED";
499 break;
500 case VertexAttribType::Float:
501 os << "GL_FLOAT";
502 break;
503 case VertexAttribType::HalfFloat:
504 os << "GL_HALF_FLOAT";
505 break;
506 case VertexAttribType::HalfFloatOES:
507 os << "GL_HALF_FLOAT_OES";
508 break;
509 case VertexAttribType::Int:
510 os << "GL_INT";
511 break;
512 case VertexAttribType::Int2101010:
513 os << "GL_INT_2_10_10_10_REV";
514 break;
515 case VertexAttribType::Int1010102:
516 os << "GL_INT_10_10_10_2_OES";
517 break;
518 case VertexAttribType::Short:
519 os << "GL_SHORT";
520 break;
521 case VertexAttribType::UnsignedByte:
522 os << "GL_UNSIGNED_BYTE";
523 break;
524 case VertexAttribType::UnsignedInt:
525 os << "GL_UNSIGNED_INT";
526 break;
527 case VertexAttribType::UnsignedInt2101010:
528 os << "GL_UNSIGNED_INT_2_10_10_10_REV";
529 break;
530 case VertexAttribType::UnsignedInt1010102:
531 os << "GL_UNSIGNED_INT_10_10_10_2_OES";
532 break;
533 case VertexAttribType::UnsignedShort:
534 os << "GL_UNSIGNED_SHORT";
535 break;
536 default:
537 os << "GL_INVALID_ENUM";
538 break;
539 }
540 return os;
541 }
542
operator <<(std::ostream & os,TessEvaluationType value)543 std::ostream &operator<<(std::ostream &os, TessEvaluationType value)
544 {
545 switch (value)
546 {
547 case TessEvaluationType::Triangles:
548 os << "GL_TRIANGLES";
549 break;
550 case TessEvaluationType::Quads:
551 os << "GL_QUADS";
552 break;
553 case TessEvaluationType::Isolines:
554 os << "GL_ISOLINES";
555 break;
556 case TessEvaluationType::EqualSpacing:
557 os << "GL_EQUAL";
558 break;
559 case TessEvaluationType::FractionalEvenSpacing:
560 os << "GL_FRACTIONAL_EVEN";
561 break;
562 case TessEvaluationType::FractionalOddSpacing:
563 os << "GL_FRACTIONAL_ODD";
564 break;
565 case TessEvaluationType::Cw:
566 os << "GL_CW";
567 break;
568 case TessEvaluationType::Ccw:
569 os << "GL_CCW";
570 break;
571 case TessEvaluationType::PointMode:
572 os << "GL_TESS_GEN_POINT_MODE";
573 break;
574 default:
575 os << "GL_INVALID_ENUM";
576 break;
577 }
578 return os;
579 }
580
ShaderTypeToString(ShaderType shaderType)581 const char *ShaderTypeToString(ShaderType shaderType)
582 {
583 constexpr ShaderMap<const char *> kShaderTypeNameMap = {
584 {ShaderType::Vertex, "Vertex"},
585 {ShaderType::TessControl, "Tessellation control"},
586 {ShaderType::TessEvaluation, "Tessellation evaluation"},
587 {ShaderType::Geometry, "Geometry"},
588 {ShaderType::Fragment, "Fragment"},
589 {ShaderType::Compute, "Compute"}};
590 return kShaderTypeNameMap[shaderType];
591 }
592
operator <(const UniformLocation & lhs,const UniformLocation & rhs)593 bool operator<(const UniformLocation &lhs, const UniformLocation &rhs)
594 {
595 return lhs.value < rhs.value;
596 }
597
IsEmulatedCompressedFormat(GLenum format)598 bool IsEmulatedCompressedFormat(GLenum format)
599 {
600 // TODO(anglebug.com/42264702): Check for all formats ANGLE will use to emulate a compressed
601 // texture
602 return format == GL_RGBA || format == GL_RG || format == GL_RED;
603 }
604 } // namespace gl
605
606 namespace egl
607 {
ErrorCodeToMessageType(EGLint errorCode)608 MessageType ErrorCodeToMessageType(EGLint errorCode)
609 {
610 switch (errorCode)
611 {
612 case EGL_BAD_ALLOC:
613 case EGL_CONTEXT_LOST:
614 case EGL_NOT_INITIALIZED:
615 return MessageType::Critical;
616
617 case EGL_BAD_ACCESS:
618 case EGL_BAD_ATTRIBUTE:
619 case EGL_BAD_CONFIG:
620 case EGL_BAD_CONTEXT:
621 case EGL_BAD_CURRENT_SURFACE:
622 case EGL_BAD_DISPLAY:
623 case EGL_BAD_MATCH:
624 case EGL_BAD_NATIVE_PIXMAP:
625 case EGL_BAD_NATIVE_WINDOW:
626 case EGL_BAD_PARAMETER:
627 case EGL_BAD_SURFACE:
628 case EGL_BAD_STREAM_KHR:
629 case EGL_BAD_STATE_KHR:
630 case EGL_BAD_DEVICE_EXT:
631 return MessageType::Error;
632
633 case EGL_SUCCESS:
634 default:
635 UNREACHABLE();
636 return MessageType::InvalidEnum;
637 }
638 }
639 } // namespace egl
640
641 namespace egl_gl
642 {
643
EGLCubeMapTargetToCubeMapTarget(EGLenum eglTarget)644 gl::TextureTarget EGLCubeMapTargetToCubeMapTarget(EGLenum eglTarget)
645 {
646 ASSERT(egl::IsCubeMapTextureTarget(eglTarget));
647 return gl::CubeFaceIndexToTextureTarget(egl::CubeMapTextureTargetToLayerIndex(eglTarget));
648 }
649
EGLImageTargetToTextureTarget(EGLenum eglTarget)650 gl::TextureTarget EGLImageTargetToTextureTarget(EGLenum eglTarget)
651 {
652 switch (eglTarget)
653 {
654 case EGL_GL_TEXTURE_2D_KHR:
655 return gl::TextureTarget::_2D;
656
657 case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR:
658 case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR:
659 case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR:
660 case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR:
661 case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR:
662 case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR:
663 return EGLCubeMapTargetToCubeMapTarget(eglTarget);
664
665 case EGL_GL_TEXTURE_3D_KHR:
666 return gl::TextureTarget::_3D;
667
668 default:
669 UNREACHABLE();
670 return gl::TextureTarget::InvalidEnum;
671 }
672 }
673
EGLTextureTargetToTextureType(EGLenum eglTarget)674 gl::TextureType EGLTextureTargetToTextureType(EGLenum eglTarget)
675 {
676 switch (eglTarget)
677 {
678 case EGL_TEXTURE_2D:
679 return gl::TextureType::_2D;
680
681 case EGL_TEXTURE_RECTANGLE_ANGLE:
682 return gl::TextureType::Rectangle;
683
684 default:
685 UNREACHABLE();
686 return gl::TextureType::InvalidEnum;
687 }
688 }
689 } // namespace egl_gl
690