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