1 //
2 // Copyright 2019 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // gl_enum_utils.cpp:
7 // Utility functions for converting GLenums to string.
8
9 #include "libANGLE/gl_enum_utils.h"
10
11 #include "common/bitset_utils.h"
12
13 #include <iomanip>
14 #include <sstream>
15
16 namespace gl
17 {
18 const char kUnknownGLenumString[] = "EnumUnknown";
19
OutputGLenumString(std::ostream & out,GLenumGroup enumGroup,unsigned int value)20 void OutputGLenumString(std::ostream &out, GLenumGroup enumGroup, unsigned int value)
21 {
22 const char *enumStr = GLenumToString(enumGroup, value);
23 if (enumStr != kUnknownGLenumString)
24 {
25 out << enumStr;
26 return;
27 }
28
29 if (enumGroup != GLenumGroup::DefaultGroup)
30 {
31 // Retry with the "Default" group
32 enumStr = GLenumToString(GLenumGroup::DefaultGroup, value);
33 if (enumStr != kUnknownGLenumString)
34 {
35 out << enumStr;
36 return;
37 }
38 }
39
40 out << std::hex << "0x" << std::setfill('0') << std::setw(4) << value << std::dec;
41 }
42
OutputGLbitfieldString(std::ostream & out,GLenumGroup enumGroup,unsigned int value)43 void OutputGLbitfieldString(std::ostream &out, GLenumGroup enumGroup, unsigned int value)
44 {
45 out << GLbitfieldToString(enumGroup, value);
46 }
47
GLbooleanToString(unsigned int value)48 const char *GLbooleanToString(unsigned int value)
49 {
50 switch (value)
51 {
52 case 0x0:
53 return "GL_FALSE";
54 case 0x1:
55 return "GL_TRUE";
56 default:
57 return kUnknownGLenumString;
58 }
59 }
60
GLbitfieldToString(GLenumGroup enumGroup,unsigned int value)61 std::string GLbitfieldToString(GLenumGroup enumGroup, unsigned int value)
62 {
63 std::stringstream st;
64
65 if (value == 0)
66 {
67 return "0";
68 }
69
70 const angle::BitSet<32> bitSet(value);
71 bool first = true;
72 for (const auto index : bitSet)
73 {
74 if (!first)
75 {
76 st << " | ";
77 }
78 first = false;
79
80 unsigned int mask = 1u << index;
81 OutputGLenumString(st, enumGroup, mask);
82 }
83
84 return st.str();
85 }
86 } // namespace gl
87