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