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