1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; -*- */
2 /* ***** BEGIN LICENSE BLOCK *****
3  * This file is part of openfx-supportext <https://github.com/devernay/openfx-supportext>,
4  * Copyright (C) 2013-2018 INRIA
5  *
6  * openfx-supportext is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * openfx-supportext is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with openfx-supportext.  If not, see <http://www.gnu.org/licenses/gpl-2.0.html>
18  * ***** END LICENSE BLOCK ***** */
19 
20 #ifndef openfx_supportext_ofxsOGLDebug_h
21 #define openfx_supportext_ofxsOGLDebug_h
22 
23 inline const char*
glErrorString(GLenum errorCode)24 glErrorString(GLenum errorCode)
25 {
26     static const struct
27     {
28         GLenum code;
29         const char *string;
30     }
31 
32     errors[] =
33     {
34         /* GL */
35         {GL_NO_ERROR, "no error"},
36         {GL_INVALID_ENUM, "invalid enumerant"},
37         {GL_INVALID_VALUE, "invalid value"},
38         {GL_INVALID_OPERATION, "invalid operation"},
39         {GL_STACK_OVERFLOW, "stack overflow"},
40         {GL_STACK_UNDERFLOW, "stack underflow"},
41         {GL_OUT_OF_MEMORY, "out of memory"},
42 #ifdef GL_EXT_histogram
43         {GL_TABLE_TOO_LARGE, "table too large"},
44 #endif
45 #ifdef GL_EXT_framebuffer_object
46         {GL_INVALID_FRAMEBUFFER_OPERATION_EXT, "invalid framebuffer operation"},
47 #endif
48 
49         {0, NULL }
50     };
51     int i;
52 
53     for (i = 0; errors[i].string; i++) {
54         if (errors[i].code == errorCode) {
55             return errors[i].string;
56         }
57     }
58 
59     return NULL;
60 }
61 
62 /* *INDENT-OFF* */
63 
64 inline const char*
glGetEnumString(GLenum v)65 glGetEnumString(GLenum v)
66 {
67     switch (v) {
68         case 0x0000: return "GL_ZERO/GL_NO_ERROR/GL_POINTS";
69         case 0x0001: return "GL_ONE/GL_LINES";
70         case 0x0002: return "GL_LINE_LOOP";
71         case 0x0003: return "GL_LINE_STRIP";
72         case 0x0004: return "GL_TRIANGLES";
73         case 0x0005: return "GL_TRIANGLE_STRIP";
74         case 0x0006: return "GL_TRIANGLE_FAN";
75         case 0x0100: return "GL_DEPTH_BUFFER_BIT";
76         case 0x0104: return "GL_ADD";
77         case 0x0200: return "GL_NEVER";
78         case 0x0201: return "GL_LESS";
79         case 0x0202: return "GL_EQUAL";
80         case 0x0203: return "GL_LEQUAL";
81         case 0x0204: return "GL_GREATER";
82         case 0x0205: return "GL_NOTEQUAL";
83         case 0x0206: return "GL_GEQUAL";
84         case 0x0207: return "GL_ALWAYS";
85         case 0x0300: return "GL_SRC_COLOR";
86         case 0x0301: return "GL_ONE_MINUS_SRC_COLOR";
87         case 0x0302: return "GL_SRC_ALPHA";
88         case 0x0303: return "GL_ONE_MINUS_SRC_ALPHA";
89         case 0x0304: return "GL_DST_ALPHA";
90         case 0x0305: return "GL_ONE_MINUS_DST_ALPHA";
91         case 0x0306: return "GL_DST_COLOR";
92         case 0x0307: return "GL_ONE_MINUS_DST_COLOR";
93         case 0x0308: return "GL_SRC_ALPHA_SATURATE";
94         case 0x0400: return "GL_STENCIL_BUFFER_BIT";
95         case 0x0404: return "GL_FRONT";
96         case 0x0405: return "GL_BACK";
97         case 0x0408: return "GL_FRONT_AND_BACK";
98         case 0x0500: return "GL_INVALID_ENUM";
99         case 0x0501: return "GL_INVALID_VALUE";
100         case 0x0502: return "GL_INVALID_OPERATION";
101         case 0x0503: return "GL_STACK_OVERFLOW";
102         case 0x0504: return "GL_STACK_UNDERFLOW";
103         case 0x0505: return "GL_OUT_OF_MEMORY";
104         case 0x0506: return "GL_INVALID_FRAMEBUFFER_OPERATION";
105         case 0x0800: return "GL_EXP";
106         case 0x0801: return "GL_EXP2";
107         case 0x0900: return "GL_CW";
108         case 0x0901: return "GL_CCW";
109         case 0x0B00: return "GL_CURRENT_COLOR";
110         case 0x0B02: return "GL_CURRENT_NORMAL";
111         case 0x0B03: return "GL_CURRENT_TEXTURE_COORDS";
112         case 0x0B10: return "GL_POINT_SMOOTH";
113         case 0x0B11: return "GL_POINT_SIZE";
114         case 0x0B12: return "GL_SMOOTH_POINT_SIZE_RANGE";
115         case 0x0B20: return "GL_LINE_SMOOTH";
116         case 0x0B21: return "GL_LINE_WIDTH";
117         case 0x0B22: return "GL_SMOOTH_LINE_WIDTH_RANGE";
118         case 0x0B44: return "GL_CULL_FACE";
119         case 0x0B45: return "GL_CULL_FACE_MODE";
120         case 0x0B46: return "GL_FRONT_FACE";
121         case 0x0B50: return "GL_LIGHTING";
122         case 0x0B52: return "GL_LIGHT_MODEL_TWO_SIDE";
123         case 0x0B53: return "GL_LIGHT_MODEL_AMBIENT";
124         case 0x0B54: return "GL_SHADE_MODEL";
125         case 0x0B57: return "GL_COLOR_MATERIAL";
126         case 0x0B60: return "GL_FOG";
127         case 0x0B62: return "GL_FOG_DENSITY";
128         case 0x0B63: return "GL_FOG_START";
129         case 0x0B64: return "GL_FOG_END";
130         case 0x0B65: return "GL_FOG_MODE";
131         case 0x0B66: return "GL_FOG_COLOR";
132         case 0x0B70: return "GL_DEPTH_RANGE";
133         case 0x0B71: return "GL_DEPTH_TEST";
134         case 0x0B72: return "GL_DEPTH_WRITEMASK";
135         case 0x0B73: return "GL_DEPTH_CLEAR_VALUE";
136         case 0x0B74: return "GL_DEPTH_FUNC";
137         case 0x0B90: return "GL_STENCIL_TEST";
138         case 0x0B91: return "GL_STENCIL_CLEAR_VALUE";
139         case 0x0B92: return "GL_STENCIL_FUNC";
140         case 0x0B93: return "GL_STENCIL_VALUE_MASK";
141         case 0x0B94: return "GL_STENCIL_FAIL";
142         case 0x0B95: return "GL_STENCIL_PASS_DEPTH_FAIL";
143         case 0x0B96: return "GL_STENCIL_PASS_DEPTH_PASS";
144         case 0x0B97: return "GL_STENCIL_REF";
145         case 0x0B98: return "GL_STENCIL_WRITEMASK";
146         case 0x0BA0: return "GL_MATRIX_MODE";
147         case 0x0BA1: return "GL_NORMALIZE";
148         case 0x0BA2: return "GL_VIEWPORT";
149         case 0x0BA3: return "GL_MODELVIEW_STACK_DEPTH";
150         case 0x0BA4: return "GL_PROJECTION_STACK_DEPTH";
151         case 0x0BA5: return "GL_TEXTURE_STACK_DEPTH";
152         case 0x0BA6: return "GL_MODELVIEW_MATRIX";
153         case 0x0BA7: return "GL_PROJECTION_MATRIX";
154         case 0x0BA8: return "GL_TEXTURE_MATRIX";
155         case 0x0BC0: return "GL_ALPHA_TEST";
156         case 0x0BC1: return "GL_ALPHA_TEST_FUNC";
157         case 0x0BC2: return "GL_ALPHA_TEST_REF";
158         case 0x0BD0: return "GL_DITHER";
159         case 0x0BE0: return "GL_BLEND_DST";
160         case 0x0BE1: return "GL_BLEND_SRC";
161         case 0x0BE2: return "GL_BLEND";
162         case 0x0BF0: return "GL_LOGIC_OP_MODE";
163         case 0x0BF2: return "GL_COLOR_LOGIC_OP";
164         case 0x0C10: return "GL_SCISSOR_BOX";
165         case 0x0C11: return "GL_SCISSOR_TEST";
166         case 0x0C22: return "GL_COLOR_CLEAR_VALUE";
167         case 0x0C23: return "GL_COLOR_WRITEMASK";
168         case 0x0C50: return "GL_PERSPECTIVE_CORRECTION_HINT";
169         case 0x0C51: return "GL_POINT_SMOOTH_HINT";
170         case 0x0C52: return "GL_LINE_SMOOTH_HINT";
171         case 0x0C54: return "GL_FOG_HINT";
172         case 0x0CF5: return "GL_UNPACK_ALIGNMENT";
173         case 0x0D05: return "GL_PACK_ALIGNMENT";
174         case 0x0D1C: return "GL_ALPHA_SCALE";
175         case 0x0D31: return "GL_MAX_LIGHTS";
176         case 0x0D32: return "GL_MAX_CLIP_PLANES";
177         case 0x0D33: return "GL_MAX_TEXTURE_SIZE";
178         case 0x0D36: return "GL_MAX_MODELVIEW_STACK_DEPTH";
179         case 0x0D38: return "GL_MAX_PROJECTION_STACK_DEPTH";
180         case 0x0D39: return "GL_MAX_TEXTURE_STACK_DEPTH";
181         case 0x0D3A: return "GL_MAX_VIEWPORT_DIMS";
182         case 0x0D50: return "GL_SUBPIXEL_BITS";
183         case 0x0D52: return "GL_RED_BITS";
184         case 0x0D53: return "GL_GREEN_BITS";
185         case 0x0D54: return "GL_BLUE_BITS";
186         case 0x0D55: return "GL_ALPHA_BITS";
187         case 0x0D56: return "GL_DEPTH_BITS";
188         case 0x0D57: return "GL_STENCIL_BITS";
189         case 0x0DE1: return "GL_TEXTURE_2D";
190         case 0x1100: return "GL_DONT_CARE";
191         case 0x1101: return "GL_FASTEST";
192         case 0x1102: return "GL_NICEST";
193         case 0x1200: return "GL_AMBIENT";
194         case 0x1201: return "GL_DIFFUSE";
195         case 0x1202: return "GL_SPECULAR";
196         case 0x1203: return "GL_POSITION";
197         case 0x1204: return "GL_SPOT_DIRECTION";
198         case 0x1205: return "GL_SPOT_EXPONENT";
199         case 0x1206: return "GL_SPOT_CUTOFF";
200         case 0x1207: return "GL_CONSTANT_ATTENUATION";
201         case 0x1208: return "GL_LINEAR_ATTENUATION";
202         case 0x1209: return "GL_QUADRATIC_ATTENUATION";
203         case 0x1400: return "GL_BYTE";
204         case 0x1401: return "GL_UNSIGNED_BYTE";
205         case 0x1402: return "GL_SHORT";
206         case 0x1403: return "GL_UNSIGNED_SHORT";
207         case 0x1404: return "GL_INT";
208         case 0x1405: return "GL_UNSIGNED_INT";
209         case 0x1406: return "GL_FLOAT";
210         case 0x140C: return "GL_FIXED";
211         case 0x1500: return "GL_CLEAR";
212         case 0x1501: return "GL_AND";
213         case 0x1502: return "GL_AND_REVERSE";
214         case 0x1503: return "GL_COPY";
215         case 0x1504: return "GL_AND_INVERTED";
216         case 0x1505: return "GL_NOOP";
217         case 0x1506: return "GL_XOR";
218         case 0x1507: return "GL_OR";
219         case 0x1508: return "GL_NOR";
220         case 0x1509: return "GL_EQUIV";
221         case 0x150A: return "GL_INVERT";
222         case 0x150B: return "GL_OR_REVERSE";
223         case 0x150C: return "GL_COPY_INVERTED";
224         case 0x150D: return "GL_OR_INVERTED";
225         case 0x150E: return "GL_NAND";
226         case 0x150F: return "GL_SET";
227         case 0x1600: return "GL_EMISSION";
228         case 0x1601: return "GL_SHININESS";
229         case 0x1602: return "GL_AMBIENT_AND_DIFFUSE";
230         case 0x1700: return "GL_MODELVIEW";
231         case 0x1701: return "GL_PROJECTION";
232         case 0x1702: return "GL_TEXTURE";
233         case 0x1901: return "GL_STENCIL_INDEX";
234         case 0x1902: return "GL_DEPTH_COMPONENT";
235         case 0x1906: return "GL_ALPHA";
236         case 0x1907: return "GL_RGB";
237         case 0x1908: return "GL_RGBA";
238         case 0x1909: return "GL_LUMINANCE";
239         case 0x190A: return "GL_LUMINANCE_ALPHA";
240         case 0x1D00: return "GL_FLAT";
241         case 0x1D01: return "GL_SMOOTH";
242         case 0x1E00: return "GL_KEEP";
243         case 0x1E01: return "GL_REPLACE";
244         case 0x1E02: return "GL_INCR";
245         case 0x1E03: return "GL_DECR";
246         case 0x1F00: return "GL_VENDOR";
247         case 0x1F01: return "GL_RENDERER";
248         case 0x1F02: return "GL_VERSION";
249         case 0x1F03: return "GL_EXTENSIONS";
250         case 0x2100: return "GL_MODULATE";
251         case 0x2101: return "GL_DECAL";
252         case 0x2200: return "GL_TEXTURE_ENV_MODE";
253         case 0x2201: return "GL_TEXTURE_ENV_COLOR";
254         case 0x2300: return "GL_TEXTURE_ENV";
255         case 0x2500: return "GL_TEXTURE_GEN_MODE_OES";
256         case 0x2600: return "GL_NEAREST";
257         case 0x2601: return "GL_LINEAR";
258         case 0x2700: return "GL_NEAREST_MIPMAP_NEAREST";
259         case 0x2701: return "GL_LINEAR_MIPMAP_NEAREST";
260         case 0x2702: return "GL_NEAREST_MIPMAP_LINEAR";
261         case 0x2703: return "GL_LINEAR_MIPMAP_LINEAR";
262         case 0x2800: return "GL_TEXTURE_MAG_FILTER";
263         case 0x2801: return "GL_TEXTURE_MIN_FILTER";
264         case 0x2802: return "GL_TEXTURE_WRAP_S";
265         case 0x2803: return "GL_TEXTURE_WRAP_T";
266         case 0x2901: return "GL_REPEAT";
267         case 0x2A00: return "GL_POLYGON_OFFSET_UNITS";
268         case 0x3000: return "GL_CLIP_PLANE0";
269         case 0x3001: return "GL_CLIP_PLANE1";
270         case 0x3002: return "GL_CLIP_PLANE2";
271         case 0x3003: return "GL_CLIP_PLANE3";
272         case 0x3004: return "GL_CLIP_PLANE4";
273         case 0x3005: return "GL_CLIP_PLANE5";
274         case 0x300E: return "GL_CONTEXT_LOST";
275         case 0x4000: return "GL_LIGHT0";
276         case 0x4001: return "GL_LIGHT1";
277         case 0x4002: return "GL_LIGHT2";
278         case 0x4003: return "GL_LIGHT3";
279         case 0x4004: return "GL_LIGHT4";
280         case 0x4005: return "GL_LIGHT5";
281         case 0x4006: return "GL_LIGHT6";
282         case 0x4007: return "GL_LIGHT7";
283         case 0x8001: return "GL_CONSTANT_COLOR";
284         case 0x8002: return "GL_ONE_MINUS_CONSTANT_COLOR";
285         case 0x8003: return "GL_CONSTANT_ALPHA";
286         case 0x8004: return "GL_ONE_MINUS_CONSTANT_ALPHA";
287         case 0x8005: return "GL_BLEND_COLOR";
288         case 0x8006: return "GL_FUNC_ADD";
289         case 0x8009: return "GL_BLEND_EQUATION";
290         case 0x800A: return "GL_FUNC_SUBTRACT";
291         case 0x800B: return "GL_FUNC_REVERSE_SUBTRACT";
292         case 0x8033: return "GL_UNSIGNED_SHORT_4_4_4_4";
293         case 0x8034: return "GL_UNSIGNED_SHORT_5_5_5_1";
294         case 0x8037: return "GL_POLYGON_OFFSET_FILL";
295         case 0x8038: return "GL_POLYGON_OFFSET_FACTOR";
296         case 0x803A: return "GL_RESCALE_NORMAL";
297         case 0x8056: return "GL_RGBA4";
298         case 0x8057: return "GL_RGB5_A1";
299         case 0x8069: return "GL_TEXTURE_BINDING_2D";
300         case 0x8074: return "GL_VERTEX_ARRAY";
301         case 0x8075: return "GL_NORMAL_ARRAY";
302         case 0x8076: return "GL_COLOR_ARRAY";
303         case 0x8078: return "GL_TEXTURE_COORD_ARRAY";
304         case 0x807A: return "GL_VERTEX_ARRAY_SIZE";
305         case 0x807B: return "GL_VERTEX_ARRAY_TYPE";
306         case 0x807C: return "GL_VERTEX_ARRAY_STRIDE";
307         case 0x807E: return "GL_NORMAL_ARRAY_TYPE";
308         case 0x807F: return "GL_NORMAL_ARRAY_STRIDE";
309         case 0x8081: return "GL_COLOR_ARRAY_SIZE";
310         case 0x8082: return "GL_COLOR_ARRAY_TYPE";
311         case 0x8083: return "GL_COLOR_ARRAY_STRIDE";
312         case 0x8088: return "GL_TEXTURE_COORD_ARRAY_SIZE";
313         case 0x8089: return "GL_TEXTURE_COORD_ARRAY_TYPE";
314         case 0x808A: return "GL_TEXTURE_COORD_ARRAY_STRIDE";
315         case 0x808E: return "GL_VERTEX_ARRAY_POINTER";
316         case 0x808F: return "GL_NORMAL_ARRAY_POINTER";
317         case 0x8090: return "GL_COLOR_ARRAY_POINTER";
318         case 0x8092: return "GL_TEXTURE_COORD_ARRAY_POINTER";
319         case 0x809D: return "GL_MULTISAMPLE";
320         case 0x809E: return "GL_SAMPLE_ALPHA_TO_COVERAGE";
321         case 0x809F: return "GL_SAMPLE_ALPHA_TO_ONE";
322         case 0x80A0: return "GL_SAMPLE_COVERAGE";
323         case 0x80A8: return "GL_SAMPLE_BUFFERS";
324         case 0x80A9: return "GL_SAMPLES";
325         case 0x80AA: return "GL_SAMPLE_COVERAGE_VALUE";
326         case 0x80AB: return "GL_SAMPLE_COVERAGE_INVERT";
327         case 0x80C8: return "GL_BLEND_DST_RGB";
328         case 0x80C9: return "GL_BLEND_SRC_RGB";
329         case 0x80CA: return "GL_BLEND_DST_ALPHA";
330         case 0x80CB: return "GL_BLEND_SRC_ALPHA";
331         case 0x8126: return "GL_POINT_SIZE_MIN";
332         case 0x8127: return "GL_POINT_SIZE_MAX";
333         case 0x8128: return "GL_POINT_FADE_THRESHOLD_SIZE";
334         case 0x8129: return "GL_POINT_DISTANCE_ATTENUATION";
335         case 0x812F: return "GL_CLAMP_TO_EDGE";
336         case 0x8191: return "GL_GENERATE_MIPMAP";
337         case 0x8192: return "GL_GENERATE_MIPMAP_HINT";
338         case 0x81A5: return "GL_DEPTH_COMPONENT16";
339         case 0x81A6: return "GL_DEPTH_COMPONENT24_OES";
340         case 0x81A7: return "GL_DEPTH_COMPONENT32_OES";
341         case 0x8363: return "GL_UNSIGNED_SHORT_5_6_5";
342         case 0x8370: return "GL_MIRRORED_REPEAT";
343         case 0x846D: return "GL_ALIASED_POINT_SIZE_RANGE";
344         case 0x846E: return "GL_ALIASED_LINE_WIDTH_RANGE";
345         case 0x84C0: return "GL_TEXTURE0";
346         case 0x84C1: return "GL_TEXTURE1";
347         case 0x84C2: return "GL_TEXTURE2";
348         case 0x84C3: return "GL_TEXTURE3";
349         case 0x84C4: return "GL_TEXTURE4";
350         case 0x84C5: return "GL_TEXTURE5";
351         case 0x84C6: return "GL_TEXTURE6";
352         case 0x84C7: return "GL_TEXTURE7";
353         case 0x84C8: return "GL_TEXTURE8";
354         case 0x84C9: return "GL_TEXTURE9";
355         case 0x84CA: return "GL_TEXTURE10";
356         case 0x84CB: return "GL_TEXTURE11";
357         case 0x84CC: return "GL_TEXTURE12";
358         case 0x84CD: return "GL_TEXTURE13";
359         case 0x84CE: return "GL_TEXTURE14";
360         case 0x84CF: return "GL_TEXTURE15";
361         case 0x84D0: return "GL_TEXTURE16";
362         case 0x84D1: return "GL_TEXTURE17";
363         case 0x84D2: return "GL_TEXTURE18";
364         case 0x84D3: return "GL_TEXTURE19";
365         case 0x84D4: return "GL_TEXTURE20";
366         case 0x84D5: return "GL_TEXTURE21";
367         case 0x84D6: return "GL_TEXTURE22";
368         case 0x84D7: return "GL_TEXTURE23";
369         case 0x84D8: return "GL_TEXTURE24";
370         case 0x84D9: return "GL_TEXTURE25";
371         case 0x84DA: return "GL_TEXTURE26";
372         case 0x84DB: return "GL_TEXTURE27";
373         case 0x84DC: return "GL_TEXTURE28";
374         case 0x84DD: return "GL_TEXTURE29";
375         case 0x84DE: return "GL_TEXTURE30";
376         case 0x84DF: return "GL_TEXTURE31";
377         case 0x84E0: return "GL_ACTIVE_TEXTURE";
378         case 0x84E1: return "GL_CLIENT_ACTIVE_TEXTURE";
379         case 0x84E2: return "GL_MAX_TEXTURE_UNITS";
380         case 0x84E7: return "GL_SUBTRACT";
381         case 0x84E8: return "GL_MAX_RENDERBUFFER_SIZE";
382         case 0x8507: return "GL_INCR_WRAP";
383         case 0x8508: return "GL_DECR_WRAP";
384         case 0x8511: return "GL_NORMAL_MAP_OES";
385         case 0x8512: return "GL_REFLECTION_MAP_OES";
386         case 0x8513: return "GL_TEXTURE_CUBE_MAP_OES";
387         case 0x8514: return "GL_TEXTURE_BINDING_CUBE_MAP_OES";
388         case 0x8515: return "GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES";
389         case 0x8516: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES";
390         case 0x8517: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES";
391         case 0x8518: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES";
392         case 0x8519: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES";
393         case 0x851A: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES";
394         case 0x851C: return "GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES";
395         case 0x8570: return "GL_COMBINE";
396         case 0x8571: return "GL_COMBINE_RGB";
397         case 0x8572: return "GL_COMBINE_ALPHA";
398         case 0x8573: return "GL_RGB_SCALE";
399         case 0x8574: return "GL_ADD_SIGNED";
400         case 0x8575: return "GL_INTERPOLATE";
401         case 0x8576: return "GL_CONSTANT";
402         case 0x8577: return "GL_PRIMARY_COLOR";
403         case 0x8578: return "GL_PREVIOUS";
404         case 0x8580: return "GL_SRC0_RGB";
405         case 0x8581: return "GL_SRC1_RGB";
406         case 0x8582: return "GL_SRC2_RGB";
407         case 0x8588: return "GL_SRC0_ALPHA";
408         case 0x8589: return "GL_SRC1_ALPHA";
409         case 0x858A: return "GL_SRC2_ALPHA";
410         case 0x8590: return "GL_OPERAND0_RGB";
411         case 0x8591: return "GL_OPERAND1_RGB";
412         case 0x8592: return "GL_OPERAND2_RGB";
413         case 0x8598: return "GL_OPERAND0_ALPHA";
414         case 0x8599: return "GL_OPERAND1_ALPHA";
415         case 0x859A: return "GL_OPERAND2_ALPHA";
416         case 0x8622: return "GL_VERTEX_ATTRIB_ARRAY_ENABLED";
417         case 0x8623: return "GL_VERTEX_ATTRIB_ARRAY_SIZE";
418         case 0x8624: return "GL_VERTEX_ATTRIB_ARRAY_STRIDE";
419         case 0x8625: return "GL_VERTEX_ATTRIB_ARRAY_TYPE";
420         case 0x8626: return "GL_CURRENT_VERTEX_ATTRIB";
421         case 0x8645: return "GL_VERTEX_ATTRIB_ARRAY_POINTER";
422         case 0x86A2: return "GL_NUM_COMPRESSED_TEXTURE_FORMATS";
423         case 0x86A3: return "GL_COMPRESSED_TEXTURE_FORMATS";
424         case 0x86AE: return "GL_DOT3_RGB";
425         case 0x86AF: return "GL_DOT3_RGBA";
426         case 0x8764: return "GL_BUFFER_SIZE";
427         case 0x8765: return "GL_BUFFER_USAGE";
428         case 0x8800: return "GL_STENCIL_BACK_FUNC";
429         case 0x8801: return "GL_STENCIL_BACK_FAIL";
430         case 0x8802: return "GL_STENCIL_BACK_PASS_DEPTH_FAIL";
431         case 0x8803: return "GL_STENCIL_BACK_PASS_DEPTH_PASS";
432         case 0x883D: return "GL_BLEND_EQUATION_ALPHA";
433         case 0x8861: return "GL_POINT_SPRITE_OES";
434         case 0x8862: return "GL_COORD_REPLACE_OES";
435         case 0x8869: return "GL_MAX_VERTEX_ATTRIBS";
436         case 0x886A: return "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED";
437         case 0x8872: return "GL_MAX_TEXTURE_IMAGE_UNITS";
438         case 0x8892: return "GL_ARRAY_BUFFER";
439         case 0x8893: return "GL_ELEMENT_ARRAY_BUFFER";
440         case 0x8894: return "GL_ARRAY_BUFFER_BINDING";
441         case 0x8895: return "GL_ELEMENT_ARRAY_BUFFER_BINDING";
442         case 0x8896: return "GL_VERTEX_ARRAY_BUFFER_BINDING";
443         case 0x8897: return "GL_NORMAL_ARRAY_BUFFER_BINDING";
444         case 0x8898: return "GL_COLOR_ARRAY_BUFFER_BINDING";
445         case 0x889A: return "GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING";
446         case 0x889F: return "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING";
447         case 0x88E0: return "GL_STREAM_DRAW";
448         case 0x88E4: return "GL_STATIC_DRAW";
449         case 0x88E8: return "GL_DYNAMIC_DRAW";
450         case 0x898A: return "GL_POINT_SIZE_ARRAY_TYPE_OES";
451         case 0x898B: return "GL_POINT_SIZE_ARRAY_STRIDE_OES";
452         case 0x898C: return "GL_POINT_SIZE_ARRAY_POINTER_OES";
453         case 0x8B30: return "GL_FRAGMENT_SHADER";
454         case 0x8B31: return "GL_VERTEX_SHADER";
455         case 0x8B4C: return "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS";
456         case 0x8B4D: return "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS";
457         case 0x8B4F: return "GL_SHADER_TYPE";
458         case 0x8B50: return "GL_FLOAT_VEC2";
459         case 0x8B51: return "GL_FLOAT_VEC3";
460         case 0x8B52: return "GL_FLOAT_VEC4";
461         case 0x8B53: return "GL_INT_VEC2";
462         case 0x8B54: return "GL_INT_VEC3";
463         case 0x8B55: return "GL_INT_VEC4";
464         case 0x8B56: return "GL_BOOL";
465         case 0x8B57: return "GL_BOOL_VEC2";
466         case 0x8B58: return "GL_BOOL_VEC3";
467         case 0x8B59: return "GL_BOOL_VEC4";
468         case 0x8B5A: return "GL_FLOAT_MAT2";
469         case 0x8B5B: return "GL_FLOAT_MAT3";
470         case 0x8B5C: return "GL_FLOAT_MAT4";
471         case 0x8B5E: return "GL_SAMPLER_2D";
472         case 0x8B60: return "GL_SAMPLER_CUBE";
473         case 0x8B80: return "GL_DELETE_STATUS";
474         case 0x8B81: return "GL_COMPILE_STATUS";
475         case 0x8B82: return "GL_LINK_STATUS";
476         case 0x8B83: return "GL_VALIDATE_STATUS";
477         case 0x8B84: return "GL_INFO_LOG_LENGTH";
478         case 0x8B85: return "GL_ATTACHED_SHADERS";
479         case 0x8B86: return "GL_ACTIVE_UNIFORMS";
480         case 0x8B87: return "GL_ACTIVE_UNIFORM_MAX_LENGTH";
481         case 0x8B88: return "GL_SHADER_SOURCE_LENGTH";
482         case 0x8B89: return "GL_ACTIVE_ATTRIBUTES";
483         case 0x8B8A: return "GL_ACTIVE_ATTRIBUTE_MAX_LENGTH";
484         case 0x8B8C: return "GL_SHADING_LANGUAGE_VERSION";
485         case 0x8B8D: return "GL_CURRENT_PROGRAM";
486         case 0x8B90: return "GL_PALETTE4_RGB8_OES";
487         case 0x8B91: return "GL_PALETTE4_RGBA8_OES";
488         case 0x8B92: return "GL_PALETTE4_R5_G6_B5_OES";
489         case 0x8B93: return "GL_PALETTE4_RGBA4_OES";
490         case 0x8B94: return "GL_PALETTE4_RGB5_A1_OES";
491         case 0x8B95: return "GL_PALETTE8_RGB8_OES";
492         case 0x8B96: return "GL_PALETTE8_RGBA8_OES";
493         case 0x8B97: return "GL_PALETTE8_R5_G6_B5_OES";
494         case 0x8B98: return "GL_PALETTE8_RGBA4_OES";
495         case 0x8B99: return "GL_PALETTE8_RGB5_A1_OES";
496         case 0x8B9A: return "GL_IMPLEMENTATION_COLOR_READ_TYPE";
497         case 0x8B9B: return "GL_IMPLEMENTATION_COLOR_READ_FORMAT";
498         case 0x8B9C: return "GL_POINT_SIZE_ARRAY_OES";
499         case 0x8B9D: return "GL_POINT_SIZE_ARRAY_OES";
500         case 0x8B9F: return "GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES";
501         case 0x8CA3: return "GL_STENCIL_BACK_REF";
502         case 0x8CA4: return "GL_STENCIL_BACK_VALUE_MASK";
503         case 0x8CA5: return "GL_STENCIL_BACK_WRITEMASK";
504         case 0x8CA6: return "GL_FRAMEBUFFER_BINDING";
505         case 0x8CA7: return "GL_RENDERBUFFER_BINDING";
506         case 0x8CD0: return "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE";
507         case 0x8CD1: return "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME";
508         case 0x8CD2: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL";
509         case 0x8CD3: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE";
510         case 0x8CD5: return "GL_FRAMEBUFFER_COMPLETE";
511         case 0x8CD6: return "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT";
512         case 0x8CD7: return "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";
513         case 0x8CD9: return "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS";
514         case 0x8CDD: return "GL_FRAMEBUFFER_UNSUPPORTED";
515         case 0x8CE0: return "GL_COLOR_ATTACHMENT0";
516         case 0x8D00: return "GL_DEPTH_ATTACHMENT";
517         case 0x8D20: return "GL_STENCIL_ATTACHMENT";
518         case 0x8D40: return "GL_FRAMEBUFFER";
519         case 0x8D41: return "GL_RENDERBUFFER";
520         case 0x8D42: return "GL_RENDERBUFFER_WIDTH";
521         case 0x8D43: return "GL_RENDERBUFFER_HEIGHT";
522         case 0x8D44: return "GL_RENDERBUFFER_INTERNAL_FORMAT";
523         case 0x8D48: return "GL_STENCIL_INDEX8";
524         case 0x8D50: return "GL_RENDERBUFFER_RED_SIZE";
525         case 0x8D51: return "GL_RENDERBUFFER_GREEN_SIZE";
526         case 0x8D52: return "GL_RENDERBUFFER_BLUE_SIZE";
527         case 0x8D53: return "GL_RENDERBUFFER_ALPHA_SIZE";
528         case 0x8D54: return "GL_RENDERBUFFER_DEPTH_SIZE";
529         case 0x8D55: return "GL_RENDERBUFFER_STENCIL_SIZE";
530         case 0x8D60: return "GL_TEXTURE_GEN_STR_OES";
531         case 0x8D62: return "GL_RGB565";
532         case 0x8D64: return "GL_ETC1_RGB8_OES";
533         case 0x8D65: return "GL_TEXTURE_EXTERNAL_OES";
534         case 0x8D67: return "GL_TEXTURE_BINDING_EXTERNAL_OES";
535         case 0x8D68: return "GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES";
536         case 0x8DF0: return "GL_LOW_FLOAT";
537         case 0x8DF1: return "GL_MEDIUM_FLOAT";
538         case 0x8DF2: return "GL_HIGH_FLOAT";
539         case 0x8DF3: return "GL_LOW_INT";
540         case 0x8DF4: return "GL_MEDIUM_INT";
541         case 0x8DF5: return "GL_HIGH_INT";
542         case 0x8DF8: return "GL_SHADER_BINARY_FORMATS";
543         case 0x8DF9: return "GL_NUM_SHADER_BINARY_FORMATS";
544         case 0x8DFA: return "GL_SHADER_COMPILER";
545         case 0x8DFB: return "GL_MAX_VERTEX_UNIFORM_VECTORS";
546         case 0x8DFC: return "GL_MAX_VARYING_VECTORS";
547         case 0x8DFD: return "GL_MAX_FRAGMENT_UNIFORM_VECTORS";
548         default: return "<unknown>";
549     }
550 }
551 
552 /* *INDENT-ON* */
553 
554 #ifndef DEBUG
555 #define glCheckError() ( (void)0 )
556 #else
557 
558 #include <iostream>
559 
560 // put a breakpoint in glError to halt the debugger
561 inline void
glError()562 glError() {}
563 
564 
565 #define glCheckError()                                                  \
566     {                                                                   \
567         GLenum _glerror_ = glGetError();                                \
568         if (_glerror_ != GL_NO_ERROR) {                                 \
569             std::cout << "GL_ERROR: " << __FILE__ << ":" << __LINE__ << " " << glErrorString(_glerror_) << std::endl; \
570             glError();                                                  \
571         }                                                               \
572     }
573 
574 #endif // ifndef DEBUG
575 
576 
577 #endif /* defined(openfx_supportext_ofxsOGLDebug_h) */
578