]> git.cworth.org Git - apitrace/blob - glsize.hpp
Handle glget*(GL_PIXEL_{PACK,UNPACK}_BUFFER_BINDING)
[apitrace] / glsize.hpp
1 /**************************************************************************
2  *
3  * Copyright 2010 VMware, Inc.
4  * Copyright 2004 IBM Corporation
5  * All Rights Reserved.
6  * 
7  * Permission is hereby granted, free of charge, to any person obtaining a
8  * copy of this software and associated documentation files (the "Software"),
9  * to deal in the Software without restriction, including without limitation
10  * the rights to use, copy, modify, merge, publish, distribute, sub license,
11  * and/or sell copies of the Software, and to permit persons to whom the
12  * Software is furnished to do so, subject to the following conditions:
13  * 
14  * The above copyright notice and this permission notice (including the next
15  * paragraph) shall be included in all copies or substantial portions of the
16  * Software.
17  * 
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
21  * AUTHORS,
22  * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
24  * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25  * SOFTWARE.
26  *
27  **************************************************************************/
28
29 /*
30  * Auxiliary functions to compute the size of array/blob arguments, depending.
31  *
32  * Some of these functions were semi-automatically generated with
33  * apigen/glsize.py script from Mesa's XML description of the GL enums.
34  *
35  * Other functions were done by hand.
36  */
37
38 #ifndef _GL_HELPERS_HPP_
39 #define _GL_HELPERS_HPP_
40
41
42 #include "os.hpp"
43 #include "glimports.hpp"
44
45
46 static inline size_t
47 __gl_type_size(GLenum type)
48 {
49     switch (type) {
50     case GL_BOOL:
51     case GL_BYTE:
52     case GL_UNSIGNED_BYTE:
53         return 1;
54         break;
55     case GL_SHORT:
56     case GL_UNSIGNED_SHORT:
57     case GL_2_BYTES:
58     case GL_HALF_FLOAT:
59         return 2;
60         break;
61     case GL_3_BYTES:
62         return 3;
63         break;
64     case GL_INT:
65     case GL_UNSIGNED_INT:
66     case GL_FLOAT:
67     case GL_4_BYTES:
68         return 4;
69         break;
70     case GL_DOUBLE:
71         return 8;
72         break;
73     default:
74         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, type);
75         return 0;
76     }
77 }
78
79 static inline size_t
80 __glArrayPointer_size(GLint size, GLenum type, GLsizei stride, GLsizei maxIndex)
81 {
82     GLsizei elementSize = size*__gl_type_size(type);
83     if (!stride) {
84         stride = elementSize;
85     }
86     return stride*maxIndex + elementSize;
87 }
88
89 #define __glVertexPointer_size(size, type, stride, maxIndex) __glArrayPointer_size(size, type, stride, maxIndex)
90 #define __glNormalPointer_size(type, stride, maxIndex) __glArrayPointer_size(3, type, stride, maxIndex)
91 #define __glColorPointer_size(size, type, stride, maxIndex) __glArrayPointer_size(size, type, stride, maxIndex)
92 #define __glIndexPointer_size(type, stride, maxIndex) __glArrayPointer_size(1, type, stride, maxIndex)
93 #define __glTexCoordPointer_size(size, type, stride, maxIndex) __glArrayPointer_size(size, type, stride, maxIndex)
94 #define __glEdgeFlagPointer_size(stride, maxIndex) __glArrayPointer_size(1, GL_BOOL, stride, maxIndex)
95 #define __glFogCoordPointer_size(type, stride, maxIndex) __glArrayPointer_size(1, type, stride, maxIndex)
96 #define __glSecondaryColorPointer_size(size, type, stride, maxIndex) __glArrayPointer_size(size, type, stride, maxIndex)
97
98 static inline size_t
99 __glDrawArrays_maxindex(GLint first, GLsizei count)
100 {
101     return first + count - 1;
102 }
103
104 static inline size_t
105 __glDrawElements_maxindex(GLsizei count, GLenum type, const GLvoid *_indices)
106 {
107     size_t maxindex = 0;
108     unsigned i;
109
110     if (type == GL_UNSIGNED_BYTE) {
111         const GLubyte *indices = (const GLubyte *)_indices;
112         for (i = 0; i < count; ++i) {
113             if (indices[i] > maxindex) {
114                 maxindex = indices[i];
115             }
116         }
117     } else if (type == GL_UNSIGNED_SHORT) {
118         const GLushort *indices = (const GLushort *)_indices;
119         for (i = 0; i < count; ++i) {
120             if (indices[i] > maxindex) {
121                 maxindex = indices[i];
122             }
123         }
124     } else if (type == GL_UNSIGNED_INT) {
125         const GLuint *indices = (const GLuint *)_indices;
126         for (i = 0; i < count; ++i) {
127             if (indices[i] > maxindex) {
128                 maxindex = indices[i];
129             }
130         }
131     } else {
132         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, type);
133     }
134
135     return maxindex;
136 }
137
138 static inline size_t
139 __glDrawRangeElements_maxindex(GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices)
140 {
141     return __glDrawElements_maxindex(count, type, indices);
142 }
143
144 static inline size_t
145 __glCallLists_size(GLsizei n, GLenum type)
146 {
147     return n*__gl_type_size(type);
148 }
149
150 static inline size_t
151 __glFogfv_size(GLenum pname)
152 {
153     switch (pname) {
154     case GL_FOG_INDEX:
155     case GL_FOG_DENSITY:
156     case GL_FOG_START:
157     case GL_FOG_END:
158     case GL_FOG_MODE:
159     case GL_FOG_OFFSET_VALUE_SGIX:
160     case GL_FOG_DISTANCE_MODE_NV:
161         return 1;
162     case GL_FOG_COLOR:
163         return 4;
164     default:
165         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
166         return 1;
167     }
168 }
169
170 #define __glFogiv_size __glFogfv_size
171
172 static inline size_t
173 __glLightfv_size(GLenum pname)
174 {
175     switch (pname) {
176     case GL_SPOT_EXPONENT:
177     case GL_SPOT_CUTOFF:
178     case GL_CONSTANT_ATTENUATION:
179     case GL_LINEAR_ATTENUATION:
180     case GL_QUADRATIC_ATTENUATION:
181         return 1;
182     case GL_SPOT_DIRECTION:
183         return 3;
184     case GL_AMBIENT:
185     case GL_DIFFUSE:
186     case GL_SPECULAR:
187     case GL_POSITION:
188         return 4;
189     default:
190         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
191         return 1;
192     }
193 }
194
195 #define __glLightiv_size __glLightfv_size
196
197 static inline size_t
198 __glLightModelfv_size(GLenum pname)
199 {
200     switch (pname) {
201     case GL_LIGHT_MODEL_LOCAL_VIEWER:
202     case GL_LIGHT_MODEL_TWO_SIDE:
203     case GL_LIGHT_MODEL_COLOR_CONTROL:
204 /*  case GL_LIGHT_MODEL_COLOR_CONTROL_EXT:*/
205         return 1;
206     case GL_LIGHT_MODEL_AMBIENT:
207         return 4;
208     default:
209         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
210         return 1;
211     }
212 }
213
214 #define __glLightModeliv_size __glLightModelfv_size
215
216 static inline size_t
217 __glMaterialfv_size(GLenum pname)
218 {
219     switch (pname) {
220     case GL_SHININESS:
221         return 1;
222     case GL_COLOR_INDEXES:
223         return 3;
224     case GL_AMBIENT:
225     case GL_DIFFUSE:
226     case GL_SPECULAR:
227     case GL_EMISSION:
228     case GL_AMBIENT_AND_DIFFUSE:
229         return 4;
230     default:
231         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
232         return 1;
233     }
234 }
235
236 #define __glMaterialiv_size __glMaterialfv_size
237
238 static inline size_t
239 __glTexParameterfv_size(GLenum pname)
240 {
241     switch (pname) {
242     case GL_TEXTURE_MAG_FILTER:
243     case GL_TEXTURE_MIN_FILTER:
244     case GL_TEXTURE_WRAP_S:
245     case GL_TEXTURE_WRAP_T:
246     case GL_TEXTURE_PRIORITY:
247     case GL_TEXTURE_WRAP_R:
248     case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB:
249 /*  case GL_SHADOW_AMBIENT_SGIX:*/
250     case GL_TEXTURE_MIN_LOD:
251     case GL_TEXTURE_MAX_LOD:
252     case GL_TEXTURE_BASE_LEVEL:
253     case GL_TEXTURE_MAX_LEVEL:
254     case GL_TEXTURE_CLIPMAP_FRAME_SGIX:
255     case GL_TEXTURE_LOD_BIAS_S_SGIX:
256     case GL_TEXTURE_LOD_BIAS_T_SGIX:
257     case GL_TEXTURE_LOD_BIAS_R_SGIX:
258     case GL_GENERATE_MIPMAP:
259 /*  case GL_GENERATE_MIPMAP_SGIS:*/
260     case GL_TEXTURE_COMPARE_SGIX:
261     case GL_TEXTURE_COMPARE_OPERATOR_SGIX:
262     case GL_TEXTURE_MAX_CLAMP_S_SGIX:
263     case GL_TEXTURE_MAX_CLAMP_T_SGIX:
264     case GL_TEXTURE_MAX_CLAMP_R_SGIX:
265     case GL_TEXTURE_MAX_ANISOTROPY_EXT:
266     case GL_TEXTURE_LOD_BIAS:
267 /*  case GL_TEXTURE_LOD_BIAS_EXT:*/
268     case GL_TEXTURE_STORAGE_HINT_APPLE:
269     case GL_STORAGE_PRIVATE_APPLE:
270     case GL_STORAGE_CACHED_APPLE:
271     case GL_STORAGE_SHARED_APPLE:
272     case GL_DEPTH_TEXTURE_MODE:
273 /*  case GL_DEPTH_TEXTURE_MODE_ARB:*/
274     case GL_TEXTURE_COMPARE_MODE:
275 /*  case GL_TEXTURE_COMPARE_MODE_ARB:*/
276     case GL_TEXTURE_COMPARE_FUNC:
277 /*  case GL_TEXTURE_COMPARE_FUNC_ARB:*/
278     case GL_TEXTURE_UNSIGNED_REMAP_MODE_NV:
279         return 1;
280     case GL_TEXTURE_CLIPMAP_CENTER_SGIX:
281     case GL_TEXTURE_CLIPMAP_OFFSET_SGIX:
282         return 2;
283     case GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX:
284         return 3;
285     case GL_TEXTURE_BORDER_COLOR:
286     case GL_POST_TEXTURE_FILTER_BIAS_SGIX:
287     case GL_POST_TEXTURE_FILTER_SCALE_SGIX:
288         return 4;
289     default:
290         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
291         return 1;
292     }
293 }
294
295 #define __glTexParameteriv_size __glTexParameterfv_size
296
297 static inline size_t
298 __glTexEnvfv_size(GLenum pname)
299 {
300     switch (pname) {
301     case GL_ALPHA_SCALE:
302     case GL_TEXTURE_ENV_MODE:
303     case GL_TEXTURE_LOD_BIAS:
304     case GL_COMBINE_RGB:
305     case GL_COMBINE_ALPHA:
306     case GL_RGB_SCALE:
307     case GL_SOURCE0_RGB:
308     case GL_SOURCE1_RGB:
309     case GL_SOURCE2_RGB:
310     case GL_SOURCE3_RGB_NV:
311     case GL_SOURCE0_ALPHA:
312     case GL_SOURCE1_ALPHA:
313     case GL_SOURCE2_ALPHA:
314     case GL_SOURCE3_ALPHA_NV:
315     case GL_OPERAND0_RGB:
316     case GL_OPERAND1_RGB:
317     case GL_OPERAND2_RGB:
318     case GL_OPERAND3_RGB_NV:
319     case GL_OPERAND0_ALPHA:
320     case GL_OPERAND1_ALPHA:
321     case GL_OPERAND2_ALPHA:
322     case GL_OPERAND3_ALPHA_NV:
323     case GL_BUMP_TARGET_ATI:
324     case GL_COORD_REPLACE_ARB:
325 /*  case GL_COORD_REPLACE_NV:*/
326         return 1;
327     case GL_TEXTURE_ENV_COLOR:
328         return 4;
329     default:
330         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
331         return 1;
332     }
333 }
334
335 #define __glTexEnviv_size __glTexEnvfv_size
336
337 static inline size_t
338 __glTexGendv_size(GLenum pname)
339 {
340     switch (pname) {
341     case GL_TEXTURE_GEN_MODE:
342         return 1;
343     case GL_OBJECT_PLANE:
344     case GL_EYE_PLANE:
345         return 4;
346     default:
347         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
348         return 1;
349     }
350 }
351
352 #define __glTexGenfv_size __glTexGendv_size
353
354 #define __glTexGeniv_size __glTexGendv_size
355
356 static inline size_t
357 __glMap1d_size(GLenum pname)
358 {
359     switch (pname) {
360     case GL_MAP1_INDEX:
361     case GL_MAP1_TEXTURE_COORD_1:
362         return 1;
363     case GL_MAP1_TEXTURE_COORD_2:
364         return 2;
365     case GL_MAP1_NORMAL:
366     case GL_MAP1_TEXTURE_COORD_3:
367     case GL_MAP1_VERTEX_3:
368         return 3;
369     case GL_MAP1_COLOR_4:
370     case GL_MAP1_TEXTURE_COORD_4:
371     case GL_MAP1_VERTEX_4:
372         return 4;
373     default:
374         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
375         return 1;
376     }
377 }
378
379 #define __glMap1f_size __glMap1d_size
380
381 static inline size_t
382 __glMap2d_size(GLenum pname)
383 {
384     switch (pname) {
385     case GL_MAP2_INDEX:
386     case GL_MAP2_TEXTURE_COORD_1:
387         return 1;
388     case GL_MAP2_TEXTURE_COORD_2:
389         return 2;
390     case GL_MAP2_NORMAL:
391     case GL_MAP2_TEXTURE_COORD_3:
392     case GL_MAP2_VERTEX_3:
393         return 3;
394     case GL_MAP2_COLOR_4:
395     case GL_MAP2_TEXTURE_COORD_4:
396     case GL_MAP2_VERTEX_4:
397         return 4;
398     default:
399         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
400         return 1;
401     }
402 }
403
404 #define __glMap2f_size __glMap2d_size
405
406 static inline size_t
407 __glGetBooleanv_size(GLenum pname)
408 {
409     switch (pname) {
410     case GL_CURRENT_INDEX:
411     case GL_CURRENT_RASTER_INDEX:
412     case GL_CURRENT_RASTER_POSITION_VALID:
413     case GL_CURRENT_RASTER_DISTANCE:
414     case GL_POINT_SMOOTH:
415     case GL_POINT_SIZE:
416     case GL_SMOOTH_POINT_SIZE_GRANULARITY:
417     case GL_LINE_SMOOTH:
418     case GL_LINE_WIDTH:
419     case GL_LINE_WIDTH_GRANULARITY:
420     case GL_LINE_STIPPLE:
421     case GL_LINE_STIPPLE_PATTERN:
422     case GL_LINE_STIPPLE_REPEAT:
423     case GL_LIST_MODE:
424     case GL_MAX_LIST_NESTING:
425     case GL_LIST_BASE:
426     case GL_LIST_INDEX:
427     case GL_POLYGON_SMOOTH:
428     case GL_POLYGON_STIPPLE:
429     case GL_EDGE_FLAG:
430     case GL_CULL_FACE:
431     case GL_CULL_FACE_MODE:
432     case GL_FRONT_FACE:
433     case GL_LIGHTING:
434     case GL_LIGHT_MODEL_LOCAL_VIEWER:
435     case GL_LIGHT_MODEL_TWO_SIDE:
436     case GL_SHADE_MODEL:
437     case GL_COLOR_MATERIAL_FACE:
438     case GL_COLOR_MATERIAL_PARAMETER:
439     case GL_COLOR_MATERIAL:
440     case GL_FOG:
441     case GL_FOG_INDEX:
442     case GL_FOG_DENSITY:
443     case GL_FOG_START:
444     case GL_FOG_END:
445     case GL_FOG_MODE:
446     case GL_DEPTH_TEST:
447     case GL_DEPTH_WRITEMASK:
448     case GL_DEPTH_CLEAR_VALUE:
449     case GL_DEPTH_FUNC:
450     case GL_STENCIL_TEST:
451     case GL_STENCIL_CLEAR_VALUE:
452     case GL_STENCIL_FUNC:
453     case GL_STENCIL_VALUE_MASK:
454     case GL_STENCIL_FAIL:
455     case GL_STENCIL_PASS_DEPTH_FAIL:
456     case GL_STENCIL_PASS_DEPTH_PASS:
457     case GL_STENCIL_REF:
458     case GL_STENCIL_WRITEMASK:
459     case GL_MATRIX_MODE:
460     case GL_NORMALIZE:
461     case GL_MODELVIEW_STACK_DEPTH:
462     case GL_PROJECTION_STACK_DEPTH:
463     case GL_TEXTURE_STACK_DEPTH:
464     case GL_ATTRIB_STACK_DEPTH:
465     case GL_CLIENT_ATTRIB_STACK_DEPTH:
466     case GL_ALPHA_TEST:
467     case GL_ALPHA_TEST_FUNC:
468     case GL_ALPHA_TEST_REF:
469     case GL_DITHER:
470     case GL_BLEND_DST:
471     case GL_BLEND_SRC:
472     case GL_BLEND:
473     case GL_LOGIC_OP_MODE:
474     case GL_LOGIC_OP:
475     case GL_AUX_BUFFERS:
476     case GL_DRAW_BUFFER:
477     case GL_READ_BUFFER:
478     case GL_SCISSOR_TEST:
479     case GL_INDEX_CLEAR_VALUE:
480     case GL_INDEX_WRITEMASK:
481     case GL_INDEX_MODE:
482     case GL_RGBA_MODE:
483     case GL_DOUBLEBUFFER:
484     case GL_STEREO:
485     case GL_RENDER_MODE:
486     case GL_PERSPECTIVE_CORRECTION_HINT:
487     case GL_POINT_SMOOTH_HINT:
488     case GL_LINE_SMOOTH_HINT:
489     case GL_POLYGON_SMOOTH_HINT:
490     case GL_FOG_HINT:
491     case GL_TEXTURE_GEN_S:
492     case GL_TEXTURE_GEN_T:
493     case GL_TEXTURE_GEN_R:
494     case GL_TEXTURE_GEN_Q:
495     case GL_PIXEL_MAP_I_TO_I:
496     case GL_PIXEL_MAP_I_TO_I_SIZE:
497     case GL_PIXEL_MAP_S_TO_S_SIZE:
498     case GL_PIXEL_MAP_I_TO_R_SIZE:
499     case GL_PIXEL_MAP_I_TO_G_SIZE:
500     case GL_PIXEL_MAP_I_TO_B_SIZE:
501     case GL_PIXEL_MAP_I_TO_A_SIZE:
502     case GL_PIXEL_MAP_R_TO_R_SIZE:
503     case GL_PIXEL_MAP_G_TO_G_SIZE:
504     case GL_PIXEL_MAP_B_TO_B_SIZE:
505     case GL_PIXEL_MAP_A_TO_A_SIZE:
506     case GL_UNPACK_SWAP_BYTES:
507     case GL_UNPACK_LSB_FIRST:
508     case GL_UNPACK_ROW_LENGTH:
509     case GL_UNPACK_SKIP_ROWS:
510     case GL_UNPACK_SKIP_PIXELS:
511     case GL_UNPACK_ALIGNMENT:
512     case GL_PACK_SWAP_BYTES:
513     case GL_PACK_LSB_FIRST:
514     case GL_PACK_ROW_LENGTH:
515     case GL_PACK_SKIP_ROWS:
516     case GL_PACK_SKIP_PIXELS:
517     case GL_PACK_ALIGNMENT:
518     case GL_MAP_COLOR:
519     case GL_MAP_STENCIL:
520     case GL_INDEX_SHIFT:
521     case GL_INDEX_OFFSET:
522     case GL_RED_SCALE:
523     case GL_RED_BIAS:
524     case GL_ZOOM_X:
525     case GL_ZOOM_Y:
526     case GL_GREEN_SCALE:
527     case GL_GREEN_BIAS:
528     case GL_BLUE_SCALE:
529     case GL_BLUE_BIAS:
530     case GL_ALPHA_SCALE:
531     case GL_ALPHA_BIAS:
532     case GL_DEPTH_SCALE:
533     case GL_DEPTH_BIAS:
534     case GL_MAX_EVAL_ORDER:
535     case GL_MAX_LIGHTS:
536     case GL_MAX_CLIP_PLANES:
537     case GL_MAX_TEXTURE_SIZE:
538     case GL_MAX_PIXEL_MAP_TABLE:
539     case GL_MAX_ATTRIB_STACK_DEPTH:
540     case GL_MAX_MODELVIEW_STACK_DEPTH:
541     case GL_MAX_NAME_STACK_DEPTH:
542     case GL_MAX_PROJECTION_STACK_DEPTH:
543     case GL_MAX_TEXTURE_STACK_DEPTH:
544     case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
545     case GL_SUBPIXEL_BITS:
546     case GL_INDEX_BITS:
547     case GL_RED_BITS:
548     case GL_GREEN_BITS:
549     case GL_BLUE_BITS:
550     case GL_ALPHA_BITS:
551     case GL_DEPTH_BITS:
552     case GL_STENCIL_BITS:
553     case GL_ACCUM_RED_BITS:
554     case GL_ACCUM_GREEN_BITS:
555     case GL_ACCUM_BLUE_BITS:
556     case GL_ACCUM_ALPHA_BITS:
557     case GL_NAME_STACK_DEPTH:
558     case GL_AUTO_NORMAL:
559     case GL_MAP1_COLOR_4:
560     case GL_MAP1_INDEX:
561     case GL_MAP1_NORMAL:
562     case GL_MAP1_TEXTURE_COORD_1:
563     case GL_MAP1_TEXTURE_COORD_2:
564     case GL_MAP1_TEXTURE_COORD_3:
565     case GL_MAP1_TEXTURE_COORD_4:
566     case GL_MAP1_VERTEX_3:
567     case GL_MAP1_VERTEX_4:
568     case GL_MAP2_COLOR_4:
569     case GL_MAP2_INDEX:
570     case GL_MAP2_NORMAL:
571     case GL_MAP2_TEXTURE_COORD_1:
572     case GL_MAP2_TEXTURE_COORD_2:
573     case GL_MAP2_TEXTURE_COORD_3:
574     case GL_MAP2_TEXTURE_COORD_4:
575     case GL_MAP2_VERTEX_3:
576     case GL_MAP2_VERTEX_4:
577     case GL_MAP1_GRID_SEGMENTS:
578     case GL_TEXTURE_1D:
579     case GL_TEXTURE_2D:
580     case GL_POLYGON_OFFSET_UNITS:
581     case GL_CLIP_PLANE0:
582     case GL_CLIP_PLANE1:
583     case GL_CLIP_PLANE2:
584     case GL_CLIP_PLANE3:
585     case GL_CLIP_PLANE4:
586     case GL_CLIP_PLANE5:
587     case GL_LIGHT0:
588     case GL_LIGHT1:
589     case GL_LIGHT2:
590     case GL_LIGHT3:
591     case GL_LIGHT4:
592     case GL_LIGHT5:
593     case GL_LIGHT6:
594     case GL_LIGHT7:
595     case GL_BLEND_EQUATION:
596 /*  case GL_BLEND_EQUATION_EXT:*/
597     case GL_CONVOLUTION_1D:
598     case GL_CONVOLUTION_2D:
599     case GL_SEPARABLE_2D:
600     case GL_MAX_CONVOLUTION_WIDTH:
601 /*  case GL_MAX_CONVOLUTION_WIDTH_EXT:*/
602     case GL_MAX_CONVOLUTION_HEIGHT:
603 /*  case GL_MAX_CONVOLUTION_HEIGHT_EXT:*/
604     case GL_POST_CONVOLUTION_RED_SCALE:
605 /*  case GL_POST_CONVOLUTION_RED_SCALE_EXT:*/
606     case GL_POST_CONVOLUTION_GREEN_SCALE:
607 /*  case GL_POST_CONVOLUTION_GREEN_SCALE_EXT:*/
608     case GL_POST_CONVOLUTION_BLUE_SCALE:
609 /*  case GL_POST_CONVOLUTION_BLUE_SCALE_EXT:*/
610     case GL_POST_CONVOLUTION_ALPHA_SCALE:
611 /*  case GL_POST_CONVOLUTION_ALPHA_SCALE_EXT:*/
612     case GL_POST_CONVOLUTION_RED_BIAS:
613 /*  case GL_POST_CONVOLUTION_RED_BIAS_EXT:*/
614     case GL_POST_CONVOLUTION_GREEN_BIAS:
615 /*  case GL_POST_CONVOLUTION_GREEN_BIAS_EXT:*/
616     case GL_POST_CONVOLUTION_BLUE_BIAS:
617 /*  case GL_POST_CONVOLUTION_BLUE_BIAS_EXT:*/
618     case GL_POST_CONVOLUTION_ALPHA_BIAS:
619 /*  case GL_POST_CONVOLUTION_ALPHA_BIAS_EXT:*/
620     case GL_HISTOGRAM:
621     case GL_MINMAX:
622     case GL_POLYGON_OFFSET_FACTOR:
623     case GL_RESCALE_NORMAL:
624 /*  case GL_RESCALE_NORMAL_EXT:*/
625     case GL_TEXTURE_BINDING_1D:
626     case GL_TEXTURE_BINDING_2D:
627     case GL_TEXTURE_BINDING_3D:
628     case GL_PACK_SKIP_IMAGES:
629     case GL_PACK_IMAGE_HEIGHT:
630     case GL_UNPACK_SKIP_IMAGES:
631     case GL_UNPACK_IMAGE_HEIGHT:
632     case GL_TEXTURE_3D:
633     case GL_MAX_3D_TEXTURE_SIZE:
634     case GL_VERTEX_ARRAY:
635     case GL_NORMAL_ARRAY:
636     case GL_COLOR_ARRAY:
637     case GL_INDEX_ARRAY:
638     case GL_TEXTURE_COORD_ARRAY:
639     case GL_EDGE_FLAG_ARRAY:
640     case GL_VERTEX_ARRAY_SIZE:
641     case GL_VERTEX_ARRAY_TYPE:
642     case GL_VERTEX_ARRAY_STRIDE:
643     case GL_NORMAL_ARRAY_TYPE:
644     case GL_NORMAL_ARRAY_STRIDE:
645     case GL_COLOR_ARRAY_SIZE:
646     case GL_COLOR_ARRAY_TYPE:
647     case GL_COLOR_ARRAY_STRIDE:
648     case GL_INDEX_ARRAY_TYPE:
649     case GL_INDEX_ARRAY_STRIDE:
650     case GL_TEXTURE_COORD_ARRAY_SIZE:
651     case GL_TEXTURE_COORD_ARRAY_TYPE:
652     case GL_TEXTURE_COORD_ARRAY_STRIDE:
653     case GL_EDGE_FLAG_ARRAY_STRIDE:
654     case GL_MULTISAMPLE:
655 /*  case GL_MULTISAMPLE_ARB:*/
656     case GL_SAMPLE_ALPHA_TO_COVERAGE:
657 /*  case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:*/
658     case GL_SAMPLE_ALPHA_TO_ONE:
659 /*  case GL_SAMPLE_ALPHA_TO_ONE_ARB:*/
660     case GL_SAMPLE_COVERAGE:
661 /*  case GL_SAMPLE_COVERAGE_ARB:*/
662     case GL_SAMPLE_BUFFERS:
663 /*  case GL_SAMPLE_BUFFERS_ARB:*/
664     case GL_SAMPLES:
665 /*  case GL_SAMPLES_ARB:*/
666     case GL_SAMPLE_COVERAGE_VALUE:
667 /*  case GL_SAMPLE_COVERAGE_VALUE_ARB:*/
668     case GL_SAMPLE_COVERAGE_INVERT:
669 /*  case GL_SAMPLE_COVERAGE_INVERT_ARB:*/
670     case GL_COLOR_MATRIX_STACK_DEPTH:
671     case GL_MAX_COLOR_MATRIX_STACK_DEPTH:
672     case GL_POST_COLOR_MATRIX_RED_SCALE:
673     case GL_POST_COLOR_MATRIX_GREEN_SCALE:
674     case GL_POST_COLOR_MATRIX_BLUE_SCALE:
675     case GL_POST_COLOR_MATRIX_ALPHA_SCALE:
676     case GL_POST_COLOR_MATRIX_RED_BIAS:
677     case GL_POST_COLOR_MATRIX_GREEN_BIAS:
678     case GL_POST_COLOR_MATRIX_BLUE_BIAS:
679     case GL_POST_COLOR_MATRIX_ALPHA_BIAS:
680     case GL_BLEND_DST_RGB:
681     case GL_BLEND_SRC_RGB:
682     case GL_BLEND_DST_ALPHA:
683     case GL_BLEND_SRC_ALPHA:
684     case GL_COLOR_TABLE:
685     case GL_POST_CONVOLUTION_COLOR_TABLE:
686     case GL_POST_COLOR_MATRIX_COLOR_TABLE:
687     case GL_MAX_ELEMENTS_VERTICES:
688     case GL_MAX_ELEMENTS_INDICES:
689     case GL_CLIP_VOLUME_CLIPPING_HINT_EXT:
690     case GL_POINT_SIZE_MIN:
691     case GL_POINT_SIZE_MAX:
692     case GL_POINT_FADE_THRESHOLD_SIZE:
693     case GL_OCCLUSION_TEST_HP:
694     case GL_OCCLUSION_TEST_RESULT_HP:
695     case GL_LIGHT_MODEL_COLOR_CONTROL:
696     case GL_CURRENT_FOG_COORD:
697     case GL_FOG_COORDINATE_ARRAY_TYPE:
698     case GL_FOG_COORDINATE_ARRAY_STRIDE:
699     case GL_FOG_COORD_ARRAY:
700     case GL_COLOR_SUM_ARB:
701     case GL_SECONDARY_COLOR_ARRAY_SIZE:
702     case GL_SECONDARY_COLOR_ARRAY_TYPE:
703     case GL_SECONDARY_COLOR_ARRAY_STRIDE:
704     case GL_SECONDARY_COLOR_ARRAY:
705     case GL_ACTIVE_TEXTURE:
706 /*  case GL_ACTIVE_TEXTURE_ARB:*/
707     case GL_CLIENT_ACTIVE_TEXTURE:
708 /*  case GL_CLIENT_ACTIVE_TEXTURE_ARB:*/
709     case GL_MAX_TEXTURE_UNITS:
710 /*  case GL_MAX_TEXTURE_UNITS_ARB:*/
711     case GL_MAX_RENDERBUFFER_SIZE:
712 /*  case GL_MAX_RENDERBUFFER_SIZE_EXT:*/
713     case GL_TEXTURE_COMPRESSION_HINT:
714 /*  case GL_TEXTURE_COMPRESSION_HINT_ARB:*/
715     case GL_TEXTURE_RECTANGLE_ARB:
716 /*  case GL_TEXTURE_RECTANGLE_NV:*/
717     case GL_TEXTURE_BINDING_RECTANGLE_ARB:
718 /*  case GL_TEXTURE_BINDING_RECTANGLE_NV:*/
719     case GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB:
720 /*  case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV:*/
721     case GL_MAX_TEXTURE_LOD_BIAS:
722     case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:
723     case GL_MAX_SHININESS_NV:
724     case GL_MAX_SPOT_EXPONENT_NV:
725     case GL_TEXTURE_CUBE_MAP:
726 /*  case GL_TEXTURE_CUBE_MAP_ARB:*/
727     case GL_TEXTURE_BINDING_CUBE_MAP:
728 /*  case GL_TEXTURE_BINDING_CUBE_MAP_ARB:*/
729     case GL_MAX_CUBE_MAP_TEXTURE_SIZE:
730 /*  case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:*/
731     case GL_MULTISAMPLE_FILTER_HINT_NV:
732     case GL_FOG_DISTANCE_MODE_NV:
733     case GL_VERTEX_PROGRAM_ARB:
734     case GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB:
735     case GL_MAX_PROGRAM_MATRICES_ARB:
736     case GL_CURRENT_MATRIX_STACK_DEPTH_ARB:
737     case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
738     case GL_VERTEX_PROGRAM_TWO_SIDE_ARB:
739     case GL_PROGRAM_ERROR_POSITION_ARB:
740     case GL_DEPTH_CLAMP:
741 /*  case GL_DEPTH_CLAMP_NV:*/
742     case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
743 /*  case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:*/
744     case GL_MAX_VERTEX_UNITS_ARB:
745     case GL_ACTIVE_VERTEX_UNITS_ARB:
746     case GL_WEIGHT_SUM_UNITY_ARB:
747     case GL_VERTEX_BLEND_ARB:
748     case GL_CURRENT_WEIGHT_ARB:
749     case GL_WEIGHT_ARRAY_TYPE_ARB:
750     case GL_WEIGHT_ARRAY_STRIDE_ARB:
751     case GL_WEIGHT_ARRAY_SIZE_ARB:
752     case GL_WEIGHT_ARRAY_ARB:
753     case GL_PACK_INVERT_MESA:
754     case GL_STENCIL_BACK_FUNC_ATI:
755     case GL_STENCIL_BACK_FAIL_ATI:
756     case GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI:
757     case GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI:
758     case GL_FRAGMENT_PROGRAM_ARB:
759     case GL_MAX_DRAW_BUFFERS_ARB:
760 /*  case GL_MAX_DRAW_BUFFERS_ATI:*/
761     case GL_DRAW_BUFFER0_ARB:
762 /*  case GL_DRAW_BUFFER0_ATI:*/
763     case GL_DRAW_BUFFER1_ARB:
764 /*  case GL_DRAW_BUFFER1_ATI:*/
765     case GL_DRAW_BUFFER2_ARB:
766 /*  case GL_DRAW_BUFFER2_ATI:*/
767     case GL_DRAW_BUFFER3_ARB:
768 /*  case GL_DRAW_BUFFER3_ATI:*/
769     case GL_DRAW_BUFFER4_ARB:
770 /*  case GL_DRAW_BUFFER4_ATI:*/
771     case GL_DRAW_BUFFER5_ARB:
772 /*  case GL_DRAW_BUFFER5_ATI:*/
773     case GL_DRAW_BUFFER6_ARB:
774 /*  case GL_DRAW_BUFFER6_ATI:*/
775     case GL_DRAW_BUFFER7_ARB:
776 /*  case GL_DRAW_BUFFER7_ATI:*/
777     case GL_DRAW_BUFFER8_ARB:
778 /*  case GL_DRAW_BUFFER8_ATI:*/
779     case GL_DRAW_BUFFER9_ARB:
780 /*  case GL_DRAW_BUFFER9_ATI:*/
781     case GL_DRAW_BUFFER10_ARB:
782 /*  case GL_DRAW_BUFFER10_ATI:*/
783     case GL_DRAW_BUFFER11_ARB:
784 /*  case GL_DRAW_BUFFER11_ATI:*/
785     case GL_DRAW_BUFFER12_ARB:
786 /*  case GL_DRAW_BUFFER12_ATI:*/
787     case GL_DRAW_BUFFER13_ARB:
788 /*  case GL_DRAW_BUFFER13_ATI:*/
789     case GL_DRAW_BUFFER14_ARB:
790 /*  case GL_DRAW_BUFFER14_ATI:*/
791     case GL_DRAW_BUFFER15_ARB:
792 /*  case GL_DRAW_BUFFER15_ATI:*/
793     case GL_BLEND_EQUATION_ALPHA_EXT:
794     case GL_MATRIX_PALETTE_ARB:
795     case GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB:
796     case GL_MAX_PALETTE_MATRICES_ARB:
797     case GL_CURRENT_PALETTE_MATRIX_ARB:
798     case GL_MATRIX_INDEX_ARRAY_ARB:
799     case GL_CURRENT_MATRIX_INDEX_ARB:
800     case GL_MATRIX_INDEX_ARRAY_SIZE_ARB:
801     case GL_MATRIX_INDEX_ARRAY_TYPE_ARB:
802     case GL_MATRIX_INDEX_ARRAY_STRIDE_ARB:
803     case GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT:
804     case GL_POINT_SPRITE_ARB:
805 /*  case GL_POINT_SPRITE_NV:*/
806     case GL_POINT_SPRITE_R_MODE_NV:
807     case GL_MAX_VERTEX_ATTRIBS_ARB:
808     case GL_MAX_TEXTURE_COORDS_ARB:
809     case GL_MAX_TEXTURE_IMAGE_UNITS_ARB:
810     case GL_DEPTH_BOUNDS_TEST_EXT:
811     case GL_ARRAY_BUFFER_BINDING_ARB:
812     case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
813     case GL_PIXEL_PACK_BUFFER_BINDING:
814     case GL_PIXEL_UNPACK_BUFFER_BINDING:
815     case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
816     case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
817     case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
818     case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
819     case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
820     case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
821     case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
822     case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
823     case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB:
824     case GL_TEXTURE_CUBE_MAP_SEAMLESS:
825     case GL_MAX_ARRAY_TEXTURE_LAYERS_EXT:
826     case GL_STENCIL_TEST_TWO_SIDE_EXT:
827     case GL_ACTIVE_STENCIL_FACE_EXT:
828     case GL_TEXTURE_BINDING_1D_ARRAY_EXT:
829     case GL_TEXTURE_BINDING_2D_ARRAY_EXT:
830     case GL_FRAMEBUFFER_BINDING:
831 /*  case GL_DRAW_FRAMEBUFFER_BINDING_EXT:*/
832     case GL_RENDERBUFFER_BINDING:
833 /*  case GL_RENDERBUFFER_BINDING_EXT:*/
834     case GL_READ_FRAMEBUFFER_BINDING:
835 /*  case GL_READ_FRAMEBUFFER_BINDING_EXT:*/
836     case GL_MAX_COLOR_ATTACHMENTS:
837 /*  case GL_MAX_COLOR_ATTACHMENTS_EXT:*/
838     case GL_MAX_SAMPLES:
839 /*  case GL_MAX_SAMPLES_EXT:*/
840     case GL_MAX_SERVER_WAIT_TIMEOUT:
841     case GL_RASTER_POSITION_UNCLIPPED_IBM:
842         return 1;
843     case GL_SMOOTH_POINT_SIZE_RANGE:
844     case GL_LINE_WIDTH_RANGE:
845     case GL_POLYGON_MODE:
846     case GL_DEPTH_RANGE:
847     case GL_MAX_VIEWPORT_DIMS:
848     case GL_MAP1_GRID_DOMAIN:
849     case GL_MAP2_GRID_SEGMENTS:
850     case GL_ALIASED_POINT_SIZE_RANGE:
851     case GL_ALIASED_LINE_WIDTH_RANGE:
852     case GL_DEPTH_BOUNDS_EXT:
853         return 2;
854     case GL_CURRENT_NORMAL:
855     case GL_POINT_DISTANCE_ATTENUATION:
856         return 3;
857     case GL_CURRENT_COLOR:
858     case GL_CURRENT_TEXTURE_COORDS:
859     case GL_CURRENT_RASTER_COLOR:
860     case GL_CURRENT_RASTER_TEXTURE_COORDS:
861     case GL_CURRENT_RASTER_POSITION:
862     case GL_LIGHT_MODEL_AMBIENT:
863     case GL_FOG_COLOR:
864     case GL_ACCUM_CLEAR_VALUE:
865     case GL_VIEWPORT:
866     case GL_SCISSOR_BOX:
867     case GL_COLOR_CLEAR_VALUE:
868     case GL_COLOR_WRITEMASK:
869     case GL_MAP2_GRID_DOMAIN:
870     case GL_BLEND_COLOR:
871 /*  case GL_BLEND_COLOR_EXT:*/
872     case GL_CURRENT_SECONDARY_COLOR:
873         return 4;
874     case GL_MODELVIEW_MATRIX:
875     case GL_PROJECTION_MATRIX:
876     case GL_TEXTURE_MATRIX:
877     case GL_MODELVIEW0_ARB:
878     case GL_COLOR_MATRIX:
879     case GL_MODELVIEW1_ARB:
880     case GL_CURRENT_MATRIX_ARB:
881     case GL_MODELVIEW2_ARB:
882     case GL_MODELVIEW3_ARB:
883     case GL_MODELVIEW4_ARB:
884     case GL_MODELVIEW5_ARB:
885     case GL_MODELVIEW6_ARB:
886     case GL_MODELVIEW7_ARB:
887     case GL_MODELVIEW8_ARB:
888     case GL_MODELVIEW9_ARB:
889     case GL_MODELVIEW10_ARB:
890     case GL_MODELVIEW11_ARB:
891     case GL_MODELVIEW12_ARB:
892     case GL_MODELVIEW13_ARB:
893     case GL_MODELVIEW14_ARB:
894     case GL_MODELVIEW15_ARB:
895     case GL_MODELVIEW16_ARB:
896     case GL_MODELVIEW17_ARB:
897     case GL_MODELVIEW18_ARB:
898     case GL_MODELVIEW19_ARB:
899     case GL_MODELVIEW20_ARB:
900     case GL_MODELVIEW21_ARB:
901     case GL_MODELVIEW22_ARB:
902     case GL_MODELVIEW23_ARB:
903     case GL_MODELVIEW24_ARB:
904     case GL_MODELVIEW25_ARB:
905     case GL_MODELVIEW26_ARB:
906     case GL_MODELVIEW27_ARB:
907     case GL_MODELVIEW28_ARB:
908     case GL_MODELVIEW29_ARB:
909     case GL_MODELVIEW30_ARB:
910     case GL_MODELVIEW31_ARB:
911     case GL_TRANSPOSE_CURRENT_MATRIX_ARB:
912         return 16;
913 #if 0
914     case GL_FOG_COORDINATE_SOURCE:
915     case GL_COMPRESSED_TEXTURE_FORMATS:
916     case GL_MIN_PROGRAM_TEXEL_OFFSET_EXT:
917     case GL_MAX_PROGRAM_TEXEL_OFFSET_EXT:
918     case GL_RGBA_INTEGER_MODE_EXT:
919         return __glGetBooleanv_variable_size(pname);
920 #endif
921     case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
922     case GL_MAX_VERTEX_UNIFORM_COMPONENTS:
923     case GL_MAX_VARYING_FLOATS:
924     case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS:
925     case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
926     case GL_MAX_GEOMETRY_UNIFORM_COMPONENTS:
927     case GL_MAX_GEOMETRY_OUTPUT_VERTICES:
928     case GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS:
929         return 1;
930     default:
931         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
932         return 1;
933     }
934 }
935
936 #define __glGetDoublev_size __glGetBooleanv_size
937
938 #define __glGetFloatv_size __glGetBooleanv_size
939
940 #define __glGetIntegerv_size __glGetBooleanv_size
941
942 #define __glGetLightfv_size __glLightfv_size
943
944 #define __glGetLightiv_size __glLightfv_size
945
946 #define __glGetMaterialfv_size __glMaterialfv_size
947
948 #define __glGetMaterialiv_size __glMaterialfv_size
949
950 #define __glGetTexEnvfv_size __glTexEnvfv_size
951
952 #define __glGetTexEnviv_size __glTexEnvfv_size
953
954 #define __glGetTexGendv_size __glTexGendv_size
955
956 #define __glGetTexGenfv_size __glTexGendv_size
957
958 #define __glGetTexGeniv_size __glTexGendv_size
959
960 static inline size_t
961 __glGetTexParameterfv_size(GLenum pname)
962 {
963     switch (pname) {
964     case GL_TEXTURE_MAG_FILTER:
965     case GL_TEXTURE_MIN_FILTER:
966     case GL_TEXTURE_WRAP_S:
967     case GL_TEXTURE_WRAP_T:
968     case GL_TEXTURE_PRIORITY:
969     case GL_TEXTURE_RESIDENT:
970     case GL_TEXTURE_WRAP_R:
971     case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB:
972 /*  case GL_SHADOW_AMBIENT_SGIX:*/
973     case GL_TEXTURE_MIN_LOD:
974     case GL_TEXTURE_MAX_LOD:
975     case GL_TEXTURE_BASE_LEVEL:
976     case GL_TEXTURE_MAX_LEVEL:
977     case GL_TEXTURE_CLIPMAP_FRAME_SGIX:
978     case GL_TEXTURE_LOD_BIAS_S_SGIX:
979     case GL_TEXTURE_LOD_BIAS_T_SGIX:
980     case GL_TEXTURE_LOD_BIAS_R_SGIX:
981     case GL_GENERATE_MIPMAP:
982 /*  case GL_GENERATE_MIPMAP_SGIS:*/
983     case GL_TEXTURE_COMPARE_SGIX:
984     case GL_TEXTURE_COMPARE_OPERATOR_SGIX:
985     case GL_TEXTURE_MAX_CLAMP_S_SGIX:
986     case GL_TEXTURE_MAX_CLAMP_T_SGIX:
987     case GL_TEXTURE_MAX_CLAMP_R_SGIX:
988     case GL_TEXTURE_MAX_ANISOTROPY_EXT:
989     case GL_TEXTURE_LOD_BIAS:
990 /*  case GL_TEXTURE_LOD_BIAS_EXT:*/
991     case GL_TEXTURE_RANGE_LENGTH_APPLE:
992     case GL_TEXTURE_STORAGE_HINT_APPLE:
993     case GL_DEPTH_TEXTURE_MODE:
994 /*  case GL_DEPTH_TEXTURE_MODE_ARB:*/
995     case GL_TEXTURE_COMPARE_MODE:
996 /*  case GL_TEXTURE_COMPARE_MODE_ARB:*/
997     case GL_TEXTURE_COMPARE_FUNC:
998 /*  case GL_TEXTURE_COMPARE_FUNC_ARB:*/
999     case GL_TEXTURE_UNSIGNED_REMAP_MODE_NV:
1000         return 1;
1001     case GL_TEXTURE_CLIPMAP_CENTER_SGIX:
1002     case GL_TEXTURE_CLIPMAP_OFFSET_SGIX:
1003         return 2;
1004     case GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX:
1005         return 3;
1006     case GL_TEXTURE_BORDER_COLOR:
1007     case GL_POST_TEXTURE_FILTER_BIAS_SGIX:
1008     case GL_POST_TEXTURE_FILTER_SCALE_SGIX:
1009         return 4;
1010     default:
1011         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1012         return 1;
1013     }
1014 }
1015
1016 #define __glGetTexParameteriv_size __glGetTexParameterfv_size
1017
1018 static inline size_t
1019 __glGetTexLevelParameterfv_size(GLenum pname)
1020 {
1021     switch (pname) {
1022     case GL_TEXTURE_WIDTH:
1023     case GL_TEXTURE_HEIGHT:
1024     case GL_TEXTURE_COMPONENTS:
1025     case GL_TEXTURE_BORDER:
1026     case GL_TEXTURE_RED_SIZE:
1027 /*  case GL_TEXTURE_RED_SIZE_EXT:*/
1028     case GL_TEXTURE_GREEN_SIZE:
1029 /*  case GL_TEXTURE_GREEN_SIZE_EXT:*/
1030     case GL_TEXTURE_BLUE_SIZE:
1031 /*  case GL_TEXTURE_BLUE_SIZE_EXT:*/
1032     case GL_TEXTURE_ALPHA_SIZE:
1033 /*  case GL_TEXTURE_ALPHA_SIZE_EXT:*/
1034     case GL_TEXTURE_LUMINANCE_SIZE:
1035 /*  case GL_TEXTURE_LUMINANCE_SIZE_EXT:*/
1036     case GL_TEXTURE_INTENSITY_SIZE:
1037 /*  case GL_TEXTURE_INTENSITY_SIZE_EXT:*/
1038     case GL_TEXTURE_DEPTH:
1039     case GL_TEXTURE_INDEX_SIZE_EXT:
1040     case GL_TEXTURE_COMPRESSED_IMAGE_SIZE:
1041 /*  case GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB:*/
1042     case GL_TEXTURE_COMPRESSED:
1043 /*  case GL_TEXTURE_COMPRESSED_ARB:*/
1044     case GL_TEXTURE_DEPTH_SIZE:
1045 /*  case GL_TEXTURE_DEPTH_SIZE_ARB:*/
1046     case GL_TEXTURE_STENCIL_SIZE:
1047 /*  case GL_TEXTURE_STENCIL_SIZE_EXT:*/
1048         return 1;
1049     default:
1050         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1051         return 1;
1052     }
1053 }
1054
1055 #define __glGetTexLevelParameteriv_size __glGetTexLevelParameterfv_size
1056
1057 static inline size_t
1058 __glColorTableParameterfv_size(GLenum pname)
1059 {
1060     switch (pname) {
1061     case GL_COLOR_TABLE_SCALE:
1062     case GL_COLOR_TABLE_BIAS:
1063         return 4;
1064     default:
1065         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1066         return 1;
1067     }
1068 }
1069
1070 #define __glColorTableParameteriv_size __glColorTableParameterfv_size
1071
1072 static inline size_t
1073 __glGetColorTableParameterfv_size(GLenum pname)
1074 {
1075     switch (pname) {
1076     case GL_COLOR_TABLE_FORMAT:
1077 /*  case GL_COLOR_TABLE_FORMAT_EXT:*/
1078     case GL_COLOR_TABLE_WIDTH:
1079 /*  case GL_COLOR_TABLE_WIDTH_EXT:*/
1080     case GL_COLOR_TABLE_RED_SIZE:
1081 /*  case GL_COLOR_TABLE_RED_SIZE_EXT:*/
1082     case GL_COLOR_TABLE_GREEN_SIZE:
1083 /*  case GL_COLOR_TABLE_GREEN_SIZE_EXT:*/
1084     case GL_COLOR_TABLE_BLUE_SIZE:
1085 /*  case GL_COLOR_TABLE_BLUE_SIZE_EXT:*/
1086     case GL_COLOR_TABLE_ALPHA_SIZE:
1087 /*  case GL_COLOR_TABLE_ALPHA_SIZE_EXT:*/
1088     case GL_COLOR_TABLE_LUMINANCE_SIZE:
1089 /*  case GL_COLOR_TABLE_LUMINANCE_SIZE_EXT:*/
1090     case GL_COLOR_TABLE_INTENSITY_SIZE:
1091 /*  case GL_COLOR_TABLE_INTENSITY_SIZE_EXT:*/
1092         return 1;
1093     case GL_COLOR_TABLE_SCALE:
1094     case GL_COLOR_TABLE_BIAS:
1095         return 4;
1096     default:
1097         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1098         return 1;
1099     }
1100 }
1101
1102 #define __glGetColorTableParameteriv_size __glGetColorTableParameterfv_size
1103
1104 static inline size_t
1105 __glConvolutionParameterfv_size(GLenum pname)
1106 {
1107     switch (pname) {
1108     case GL_CONVOLUTION_BORDER_MODE:
1109 /*  case GL_CONVOLUTION_BORDER_MODE_EXT:*/
1110         return 1;
1111     case GL_CONVOLUTION_FILTER_SCALE:
1112 /*  case GL_CONVOLUTION_FILTER_SCALE_EXT:*/
1113     case GL_CONVOLUTION_FILTER_BIAS:
1114 /*  case GL_CONVOLUTION_FILTER_BIAS_EXT:*/
1115     case GL_CONVOLUTION_BORDER_COLOR:
1116 /*  case GL_CONVOLUTION_BORDER_COLOR_HP:*/
1117         return 4;
1118     default:
1119         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1120         return 1;
1121     }
1122 }
1123
1124 #define __glConvolutionParameteriv_size __glConvolutionParameterfv_size
1125
1126 static inline size_t
1127 __glGetConvolutionParameterfv_size(GLenum pname)
1128 {
1129     switch (pname) {
1130     case GL_CONVOLUTION_BORDER_MODE:
1131 /*  case GL_CONVOLUTION_BORDER_MODE_EXT:*/
1132     case GL_CONVOLUTION_FORMAT:
1133 /*  case GL_CONVOLUTION_FORMAT_EXT:*/
1134     case GL_CONVOLUTION_WIDTH:
1135 /*  case GL_CONVOLUTION_WIDTH_EXT:*/
1136     case GL_CONVOLUTION_HEIGHT:
1137 /*  case GL_CONVOLUTION_HEIGHT_EXT:*/
1138     case GL_MAX_CONVOLUTION_WIDTH:
1139 /*  case GL_MAX_CONVOLUTION_WIDTH_EXT:*/
1140     case GL_MAX_CONVOLUTION_HEIGHT:
1141 /*  case GL_MAX_CONVOLUTION_HEIGHT_EXT:*/
1142         return 1;
1143     case GL_CONVOLUTION_FILTER_SCALE:
1144 /*  case GL_CONVOLUTION_FILTER_SCALE_EXT:*/
1145     case GL_CONVOLUTION_FILTER_BIAS:
1146 /*  case GL_CONVOLUTION_FILTER_BIAS_EXT:*/
1147     case GL_CONVOLUTION_BORDER_COLOR:
1148 /*  case GL_CONVOLUTION_BORDER_COLOR_HP:*/
1149         return 4;
1150     default:
1151         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1152         return 1;
1153     }
1154 }
1155
1156 #define __glGetConvolutionParameteriv_size __glGetConvolutionParameterfv_size
1157
1158 static inline size_t
1159 __glGetHistogramParameterfv_size(GLenum pname)
1160 {
1161     switch (pname) {
1162     case GL_HISTOGRAM_WIDTH:
1163     case GL_HISTOGRAM_FORMAT:
1164     case GL_HISTOGRAM_RED_SIZE:
1165     case GL_HISTOGRAM_GREEN_SIZE:
1166     case GL_HISTOGRAM_BLUE_SIZE:
1167     case GL_HISTOGRAM_ALPHA_SIZE:
1168     case GL_HISTOGRAM_LUMINANCE_SIZE:
1169     case GL_HISTOGRAM_SINK:
1170         return 1;
1171     default:
1172         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1173         return 1;
1174     }
1175 }
1176
1177 #define __glGetHistogramParameteriv_size __glGetHistogramParameterfv_size
1178
1179 static inline size_t
1180 __glGetMinmaxParameterfv_size(GLenum pname)
1181 {
1182     switch (pname) {
1183     case GL_MINMAX_FORMAT:
1184     case GL_MINMAX_SINK:
1185         return 1;
1186     default:
1187         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1188         return 1;
1189     }
1190 }
1191
1192 #define __glGetMinmaxParameteriv_size __glGetMinmaxParameterfv_size
1193
1194 static inline size_t
1195 __glGetProgramivARB_size(GLenum pname)
1196 {
1197     switch (pname) {
1198     case GL_PROGRAM_LENGTH_ARB:
1199     case GL_PROGRAM_BINDING_ARB:
1200     case GL_PROGRAM_ALU_INSTRUCTIONS_ARB:
1201     case GL_PROGRAM_TEX_INSTRUCTIONS_ARB:
1202     case GL_PROGRAM_TEX_INDIRECTIONS_ARB:
1203     case GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB:
1204     case GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB:
1205     case GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB:
1206     case GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB:
1207     case GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB:
1208     case GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB:
1209     case GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB:
1210     case GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB:
1211     case GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB:
1212     case GL_PROGRAM_FORMAT_ARB:
1213     case GL_PROGRAM_INSTRUCTIONS_ARB:
1214     case GL_MAX_PROGRAM_INSTRUCTIONS_ARB:
1215     case GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB:
1216     case GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB:
1217     case GL_PROGRAM_TEMPORARIES_ARB:
1218     case GL_MAX_PROGRAM_TEMPORARIES_ARB:
1219     case GL_PROGRAM_NATIVE_TEMPORARIES_ARB:
1220     case GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB:
1221     case GL_PROGRAM_PARAMETERS_ARB:
1222     case GL_MAX_PROGRAM_PARAMETERS_ARB:
1223     case GL_PROGRAM_NATIVE_PARAMETERS_ARB:
1224     case GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB:
1225     case GL_PROGRAM_ATTRIBS_ARB:
1226     case GL_MAX_PROGRAM_ATTRIBS_ARB:
1227     case GL_PROGRAM_NATIVE_ATTRIBS_ARB:
1228     case GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB:
1229     case GL_PROGRAM_ADDRESS_REGISTERS_ARB:
1230     case GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB:
1231     case GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB:
1232     case GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB:
1233     case GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB:
1234     case GL_MAX_PROGRAM_ENV_PARAMETERS_ARB:
1235     case GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB:
1236     case GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV:
1237     case GL_MAX_PROGRAM_CALL_DEPTH_NV:
1238     case GL_MAX_PROGRAM_IF_DEPTH_NV:
1239     case GL_MAX_PROGRAM_LOOP_DEPTH_NV:
1240     case GL_MAX_PROGRAM_LOOP_COUNT_NV:
1241         return 1;
1242     default:
1243         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1244         return 1;
1245     }
1246 }
1247
1248 static inline size_t
1249 __glGetVertexAttribdvARB_size(GLenum pname)
1250 {
1251     switch (pname) {
1252     case GL_VERTEX_PROGRAM_ARB:
1253     case GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB:
1254     case GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB:
1255     case GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB:
1256     case GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB:
1257     case GL_CURRENT_VERTEX_ATTRIB_ARB:
1258     case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB:
1259         return 1;
1260     default:
1261         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1262         return 1;
1263     }
1264 }
1265
1266 #define __glGetVertexAttribfvARB_size __glGetVertexAttribdvARB_size
1267
1268 #define __glGetVertexAttribivARB_size __glGetVertexAttribdvARB_size
1269
1270 static inline size_t
1271 __glGetQueryObjectivARB_size(GLenum pname)
1272 {
1273     switch (pname) {
1274     case GL_QUERY_RESULT_ARB:
1275     case GL_QUERY_RESULT_AVAILABLE_ARB:
1276         return 1;
1277     default:
1278         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1279         return 1;
1280     }
1281 }
1282
1283 #define __glGetQueryObjectuivARB_size __glGetQueryObjectivARB_size
1284
1285 static inline size_t
1286 __glGetQueryivARB_size(GLenum pname)
1287 {
1288     switch (pname) {
1289     case GL_QUERY_COUNTER_BITS_ARB:
1290     case GL_CURRENT_QUERY_ARB:
1291         return 1;
1292     default:
1293         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1294         return 1;
1295     }
1296 }
1297
1298 static inline size_t
1299 __glPointParameterfvEXT_size(GLenum pname)
1300 {
1301     switch (pname) {
1302     case GL_POINT_SIZE_MIN:
1303 /*  case GL_POINT_SIZE_MIN_ARB:*/
1304 /*  case GL_POINT_SIZE_MIN_SGIS:*/
1305     case GL_POINT_SIZE_MAX:
1306 /*  case GL_POINT_SIZE_MAX_ARB:*/
1307 /*  case GL_POINT_SIZE_MAX_SGIS:*/
1308     case GL_POINT_FADE_THRESHOLD_SIZE:
1309 /*  case GL_POINT_FADE_THRESHOLD_SIZE_ARB:*/
1310 /*  case GL_POINT_FADE_THRESHOLD_SIZE_SGIS:*/
1311     case GL_POINT_SPRITE_R_MODE_NV:
1312     case GL_POINT_SPRITE_COORD_ORIGIN:
1313         return 1;
1314     case GL_POINT_DISTANCE_ATTENUATION:
1315 /*  case GL_POINT_DISTANCE_ATTENUATION_ARB:*/
1316 /*  case GL_POINT_DISTANCE_ATTENUATION_SGIS:*/
1317         return 3;
1318     default:
1319         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1320         return 1;
1321     }
1322 }
1323
1324 #define __glPointParameterfv_size __glPointParameterfvEXT_size
1325 #define __glPointParameteriv_size __glPointParameterfvEXT_size
1326 #define __glPointParameterfvARB_size __glPointParameterfvEXT_size
1327 #define __glPointParameterivNV_size __glPointParameterfvEXT_size
1328
1329 static inline size_t
1330 __glGetProgramivNV_size(GLenum pname)
1331 {
1332     switch (pname) {
1333     case GL_PROGRAM_LENGTH_NV:
1334     case GL_PROGRAM_TARGET_NV:
1335     case GL_PROGRAM_RESIDENT_NV:
1336         return 1;
1337     default:
1338         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1339         return 1;
1340     }
1341 }
1342
1343 static inline size_t
1344 __glGetVertexAttribdvNV_size(GLenum pname)
1345 {
1346     switch (pname) {
1347     case GL_ATTRIB_ARRAY_SIZE_NV:
1348     case GL_ATTRIB_ARRAY_STRIDE_NV:
1349     case GL_ATTRIB_ARRAY_TYPE_NV:
1350     case GL_CURRENT_ATTRIB_NV:
1351         return 1;
1352     default:
1353         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1354         return 1;
1355     }
1356 }
1357
1358 #define __glGetVertexAttribfvNV_size __glGetVertexAttribdvNV_size
1359
1360 #define __glGetVertexAttribivNV_size __glGetVertexAttribdvNV_size
1361
1362 static inline size_t
1363 __glGetFramebufferAttachmentParameterivEXT_size(GLenum pname)
1364 {
1365     switch (pname) {
1366     case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT:
1367     case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT:
1368     case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT:
1369     case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT:
1370     case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT:
1371         return 1;
1372     default:
1373         OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);
1374         return 1;
1375     }
1376 }
1377
1378 #define __glGetFramebufferAttachmentParameteriv_size __glGetFramebufferAttachmentParameterivEXT_size
1379
1380 static inline size_t
1381 __glTexImage3D_size(GLenum format, GLenum type, GLsizei width, GLsizei height, GLsizei depth, GLint border) {
1382     size_t num_channels;
1383     switch (format) {
1384     case GL_COLOR_INDEX:
1385     case GL_RED:
1386     case GL_GREEN:
1387     case GL_BLUE:
1388     case GL_ALPHA:
1389     case GL_INTENSITY:
1390     case GL_DEPTH_COMPONENT:
1391     case GL_STENCIL_INDEX:
1392         num_channels = 1;
1393         break;
1394     case GL_LUMINANCE_ALPHA:
1395         num_channels = 2;
1396         break;
1397     case GL_RGB:
1398     case GL_BGR:
1399         num_channels = 3;
1400         break;
1401     case GL_RGBA:
1402     case GL_BGRA:
1403         num_channels = 4;
1404         break;
1405     default:
1406         OS::DebugMessage("warning: %s: unexpected GLenum 0x%04X\n", __FUNCTION__, format);
1407         num_channels = 0;
1408         break;
1409     }
1410
1411     size_t bits_per_pixel;
1412     switch (type) {
1413     case GL_BITMAP:
1414         bits_per_pixel = 1;
1415         break;
1416     case GL_BYTE:
1417     case GL_UNSIGNED_BYTE:
1418         bits_per_pixel = 8 * num_channels;
1419         break;
1420     case GL_SHORT:
1421     case GL_UNSIGNED_SHORT:
1422         bits_per_pixel = 16 * num_channels;
1423         break;
1424     case GL_INT:
1425     case GL_UNSIGNED_INT:
1426     case GL_FLOAT:
1427         bits_per_pixel = 32 * num_channels;
1428         break;
1429     case GL_UNSIGNED_BYTE_3_3_2:
1430     case GL_UNSIGNED_BYTE_2_3_3_REV:
1431     case GL_UNSIGNED_SHORT_5_6_5:
1432     case GL_UNSIGNED_SHORT_5_6_5_REV:
1433         bits_per_pixel = 8;
1434         break;
1435     case GL_UNSIGNED_SHORT_4_4_4_4:
1436     case GL_UNSIGNED_SHORT_4_4_4_4_REV:
1437     case GL_UNSIGNED_SHORT_5_5_5_1:
1438     case GL_UNSIGNED_SHORT_1_5_5_5_REV:
1439         bits_per_pixel = 16;
1440         break;
1441     case GL_UNSIGNED_INT_8_8_8_8:
1442     case GL_UNSIGNED_INT_8_8_8_8_REV:
1443     case GL_UNSIGNED_INT_10_10_10_2:
1444     case GL_UNSIGNED_INT_2_10_10_10_REV:
1445         bits_per_pixel = 32;
1446         break;
1447     default:
1448         OS::DebugMessage("warning: %s: unexpected GLenum 0x%04X\n", __FUNCTION__, type);
1449         bits_per_pixel = 0;
1450         break;
1451     }
1452
1453     /* FIXME: consider glPixelStore settings */
1454
1455     size_t row_stride = (width*bits_per_pixel + 7)/8;
1456
1457     size_t slice_stride = height*row_stride;
1458
1459     return depth*slice_stride;
1460 }
1461
1462 #define __glTexImage2D_size(format, type, width, height, border) __glTexImage3D_size(format, type, width, height, 1, border)
1463 #define __glTexImage1D_size(format, type, width, border)         __glTexImage3D_size(format, type, width, 1, 1, border)
1464
1465 #define __glTexSubImage3D_size(format, type, width, height, depth) __glTexImage3D_size(format, type, width, height, depth, 0)
1466 #define __glTexSubImage2D_size(format, type, width, height)        __glTexImage2D_size(format, type, width, height, 0)
1467 #define __glTexSubImage1D_size(format, type, width)                __glTexImage1D_size(format, type, width, 0)
1468
1469 #define __glTexImage3DEXT_size __glTexImage3D_size
1470 #define __glTexImage2DEXT_size __glTexImage2D_size
1471 #define __glTexImage1DEXT_size __glTexImage1D_size
1472 #define __glTexSubImage3DEXT_size __glTexSubImage3D_size
1473 #define __glTexSubImage2DEXT_size __glTexSubImage2D_size
1474 #define __glTexSubImage1DEXT_size __glTexSubImage1D_size
1475
1476 #define __glDrawPixels_size(format, type, width, height) __glTexImage2D_size(format, type, width, height, 0)
1477
1478 #define __glBitmap_size(width, height) __glTexImage2D_size(GL_COLOR_INDEX, GL_BITMAP, width, height, 0)
1479 #define __glPolygonStipple_size() __glBitmap_size(32, 32)
1480
1481 #endif /* _GL_HELPERS_HPP_ */