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