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