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