18a94683196406b83b14218d1beef66067f126a16keunyoung/*
28a94683196406b83b14218d1beef66067f126a16keunyoung* Copyright (C) 2011 The Android Open Source Project
38a94683196406b83b14218d1beef66067f126a16keunyoung*
48a94683196406b83b14218d1beef66067f126a16keunyoung* Licensed under the Apache License, Version 2.0 (the "License");
58a94683196406b83b14218d1beef66067f126a16keunyoung* you may not use this file except in compliance with the License.
68a94683196406b83b14218d1beef66067f126a16keunyoung* You may obtain a copy of the License at
78a94683196406b83b14218d1beef66067f126a16keunyoung*
88a94683196406b83b14218d1beef66067f126a16keunyoung* http://www.apache.org/licenses/LICENSE-2.0
98a94683196406b83b14218d1beef66067f126a16keunyoung*
108a94683196406b83b14218d1beef66067f126a16keunyoung* Unless required by applicable law or agreed to in writing, software
118a94683196406b83b14218d1beef66067f126a16keunyoung* distributed under the License is distributed on an "AS IS" BASIS,
128a94683196406b83b14218d1beef66067f126a16keunyoung* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138a94683196406b83b14218d1beef66067f126a16keunyoung* See the License for the specific language governing permissions and
148a94683196406b83b14218d1beef66067f126a16keunyoung* limitations under the License.
158a94683196406b83b14218d1beef66067f126a16keunyoung*/
168a94683196406b83b14218d1beef66067f126a16keunyoung#include "glUtils.h"
178a94683196406b83b14218d1beef66067f126a16keunyoung#include <string.h>
188a94683196406b83b14218d1beef66067f126a16keunyoung#include "ErrorLog.h"
198a94683196406b83b14218d1beef66067f126a16keunyoung#include <IOStream.h>
208a94683196406b83b14218d1beef66067f126a16keunyoung
218a94683196406b83b14218d1beef66067f126a16keunyoungsize_t glSizeof(GLenum type)
228a94683196406b83b14218d1beef66067f126a16keunyoung{
238a94683196406b83b14218d1beef66067f126a16keunyoung    size_t retval = 0;
248a94683196406b83b14218d1beef66067f126a16keunyoung    switch(type) {
258a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BYTE:
268a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_UNSIGNED_BYTE:
278a94683196406b83b14218d1beef66067f126a16keunyoung        retval = 1;
288a94683196406b83b14218d1beef66067f126a16keunyoung        break;
298a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SHORT:
308a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_UNSIGNED_SHORT:
318a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_HALF_FLOAT_OES:
328a94683196406b83b14218d1beef66067f126a16keunyoung        retval = 2;
338a94683196406b83b14218d1beef66067f126a16keunyoung        break;
348a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_INT:
358a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FLOAT:
368a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FIXED:
378a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BOOL:
388a94683196406b83b14218d1beef66067f126a16keunyoung        retval =  4;
398a94683196406b83b14218d1beef66067f126a16keunyoung        break;
408a94683196406b83b14218d1beef66067f126a16keunyoung#ifdef GL_DOUBLE
418a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_DOUBLE:
428a94683196406b83b14218d1beef66067f126a16keunyoung        retval = 8;
438a94683196406b83b14218d1beef66067f126a16keunyoung        break;
448a94683196406b83b14218d1beef66067f126a16keunyoung#endif
458a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FLOAT_VEC2:
468a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_INT_VEC2:
478a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BOOL_VEC2:
488a94683196406b83b14218d1beef66067f126a16keunyoung        retval = 8;
498a94683196406b83b14218d1beef66067f126a16keunyoung        break;
508a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_INT_VEC3:
518a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BOOL_VEC3:
528a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FLOAT_VEC3:
538a94683196406b83b14218d1beef66067f126a16keunyoung        retval = 12;
548a94683196406b83b14218d1beef66067f126a16keunyoung        break;
558a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FLOAT_VEC4:
568a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BOOL_VEC4:
578a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_INT_VEC4:
588a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FLOAT_MAT2:
598a94683196406b83b14218d1beef66067f126a16keunyoung        retval = 16;
608a94683196406b83b14218d1beef66067f126a16keunyoung        break;
618a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FLOAT_MAT3:
628a94683196406b83b14218d1beef66067f126a16keunyoung        retval = 36;
638a94683196406b83b14218d1beef66067f126a16keunyoung        break;
648a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FLOAT_MAT4:
658a94683196406b83b14218d1beef66067f126a16keunyoung        retval = 64;
668a94683196406b83b14218d1beef66067f126a16keunyoung        break;
678a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SAMPLER_2D:
688a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SAMPLER_CUBE:
698a94683196406b83b14218d1beef66067f126a16keunyoung        retval = 4;
708a94683196406b83b14218d1beef66067f126a16keunyoung        break;
718a94683196406b83b14218d1beef66067f126a16keunyoung    default:
728a94683196406b83b14218d1beef66067f126a16keunyoung        ERR("**** ERROR unknown type 0x%x (%s,%d)\n", type, __FUNCTION__,__LINE__);
738a94683196406b83b14218d1beef66067f126a16keunyoung    }
748a94683196406b83b14218d1beef66067f126a16keunyoung    return retval;
758a94683196406b83b14218d1beef66067f126a16keunyoung
768a94683196406b83b14218d1beef66067f126a16keunyoung}
778a94683196406b83b14218d1beef66067f126a16keunyoung
788a94683196406b83b14218d1beef66067f126a16keunyoungsize_t glUtilsParamSize(GLenum param)
798a94683196406b83b14218d1beef66067f126a16keunyoung{
808a94683196406b83b14218d1beef66067f126a16keunyoung    size_t s = 0;
818a94683196406b83b14218d1beef66067f126a16keunyoung
828a94683196406b83b14218d1beef66067f126a16keunyoung    switch(param)
838a94683196406b83b14218d1beef66067f126a16keunyoung    {
848a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_DEPTH_TEST:
858a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_DEPTH_FUNC:
868a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_DEPTH_BITS:
878a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_CLIP_PLANES:
888a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_GREEN_BITS:
898a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_MODELVIEW_STACK_DEPTH:
908a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_PROJECTION_STACK_DEPTH:
918a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_TEXTURE_STACK_DEPTH:
928a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
938a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
948a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
958a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_TEXTURE_SIZE:
968a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_GEN_MODE_OES:
978a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_ENV_MODE:
988a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FOG_MODE:
998a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FOG_DENSITY:
1008a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FOG_START:
1018a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FOG_END:
1028a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SPOT_EXPONENT:
1038a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_CONSTANT_ATTENUATION:
1048a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_LINEAR_ATTENUATION:
1058a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_QUADRATIC_ATTENUATION:
1068a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SHININESS:
1078a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_LIGHT_MODEL_TWO_SIDE:
1088a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POINT_SIZE:
1098a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POINT_SIZE_MIN:
1108a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POINT_SIZE_MAX:
1118a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POINT_FADE_THRESHOLD_SIZE:
1128a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_CULL_FACE_MODE:
1138a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FRONT_FACE:
1148a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SHADE_MODEL:
1158a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_DEPTH_WRITEMASK:
1168a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_DEPTH_CLEAR_VALUE:
1178a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_FAIL:
1188a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_PASS_DEPTH_FAIL:
1198a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_PASS_DEPTH_PASS:
1208a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_REF:
1218a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_WRITEMASK:
1228a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MATRIX_MODE:
1238a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MODELVIEW_STACK_DEPTH:
1248a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_PROJECTION_STACK_DEPTH:
1258a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_STACK_DEPTH:
1268a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_ALPHA_TEST_FUNC:
1278a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_ALPHA_TEST_REF:
1288a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_ALPHA_TEST:
1298a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BLEND_DST:
1308a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BLEND_SRC:
1318a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BLEND:
1328a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_LOGIC_OP_MODE:
1338a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SCISSOR_TEST:
1348a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_TEXTURE_UNITS:
1358a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_ACTIVE_TEXTURE:
1368a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_ALPHA_BITS:
1378a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_ARRAY_BUFFER_BINDING:
1388a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BLUE_BITS:
1398a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_CLIENT_ACTIVE_TEXTURE:
1408a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_CLIP_PLANE0:
1418a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_CLIP_PLANE1:
1428a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_CLIP_PLANE2:
1438a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_CLIP_PLANE3:
1448a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_CLIP_PLANE4:
1458a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_CLIP_PLANE5:
1468a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_COLOR_ARRAY:
1478a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_COLOR_ARRAY_BUFFER_BINDING:
1488a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_COLOR_ARRAY_SIZE:
1498a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_COLOR_ARRAY_STRIDE:
1508a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_COLOR_ARRAY_TYPE:
1518a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_COLOR_LOGIC_OP:
1528a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_COLOR_MATERIAL:
1538a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_PACK_ALIGNMENT:
1548a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_PERSPECTIVE_CORRECTION_HINT:
1558a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES:
1568a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POINT_SIZE_ARRAY_STRIDE_OES:
1578a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POINT_SIZE_ARRAY_TYPE_OES:
1588a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POINT_SMOOTH:
1598a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POINT_SMOOTH_HINT:
1608a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POINT_SPRITE_OES:
1618a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_COORD_REPLACE_OES:
1628a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_COMBINE_ALPHA:
1638a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SRC0_RGB:
1648a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SRC1_RGB:
1658a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SRC2_RGB:
1668a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_OPERAND0_RGB:
1678a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_OPERAND1_RGB:
1688a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_OPERAND2_RGB:
1698a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SRC0_ALPHA:
1708a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SRC1_ALPHA:
1718a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SRC2_ALPHA:
1728a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_OPERAND0_ALPHA:
1738a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_OPERAND1_ALPHA:
1748a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_OPERAND2_ALPHA:
1758a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RGB_SCALE:
1768a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_ALPHA_SCALE:
1778a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_COMBINE_RGB:
1788a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POLYGON_OFFSET_FACTOR:
1798a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POLYGON_OFFSET_FILL:
1808a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POLYGON_OFFSET_UNITS:
1818a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RED_BITS:
1828a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RESCALE_NORMAL:
1838a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SAMPLE_ALPHA_TO_COVERAGE:
1848a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SAMPLE_ALPHA_TO_ONE:
1858a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SAMPLE_BUFFERS:
1868a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SAMPLE_COVERAGE:
1878a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SAMPLE_COVERAGE_INVERT:
1888a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SAMPLE_COVERAGE_VALUE:
1898a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SAMPLES:
1908a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_BITS:
1918a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_CLEAR_VALUE:
1928a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_FUNC:
1938a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_TEST:
1948a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_VALUE_MASK:
1958a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_BACK_FUNC:
1968a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_BACK_VALUE_MASK:
1978a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_BACK_REF:
1988a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_BACK_FAIL:
1998a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
2008a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_BACK_PASS_DEPTH_PASS:
2018a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_STENCIL_BACK_WRITEMASK:
2028a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_2D:
2038a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_BINDING_2D:
2048a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_BINDING_CUBE_MAP:
2058a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_BINDING_EXTERNAL_OES:
2068a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_COORD_ARRAY:
2078a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
2088a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_COORD_ARRAY_SIZE:
2098a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_COORD_ARRAY_STRIDE:
2108a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_COORD_ARRAY_TYPE:
2118a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_UNPACK_ALIGNMENT:
2128a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_VERTEX_ARRAY:
2138a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_VERTEX_ARRAY_BUFFER_BINDING:
2148a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_VERTEX_ARRAY_SIZE:
2158a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_VERTEX_ARRAY_STRIDE:
2168a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_VERTEX_ARRAY_TYPE:
2178a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SPOT_CUTOFF:
2188a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_MIN_FILTER:
2198a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_MAG_FILTER:
2208a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_WRAP_S:
2218a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_WRAP_T:
2228a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_GENERATE_MIPMAP:
2238a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_GENERATE_MIPMAP_HINT:
2248a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RENDERBUFFER_WIDTH_OES:
2258a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RENDERBUFFER_HEIGHT_OES:
2268a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RENDERBUFFER_INTERNAL_FORMAT_OES:
2278a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RENDERBUFFER_RED_SIZE_OES:
2288a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RENDERBUFFER_GREEN_SIZE_OES:
2298a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RENDERBUFFER_BLUE_SIZE_OES:
2308a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RENDERBUFFER_ALPHA_SIZE_OES:
2318a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RENDERBUFFER_DEPTH_SIZE_OES:
2328a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RENDERBUFFER_STENCIL_SIZE_OES:
2338a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RENDERBUFFER_BINDING:
2348a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FRAMEBUFFER_BINDING:
2358a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES:
2368a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES:
2378a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES:
2388a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES:
2398a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FENCE_STATUS_NV:
2408a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FENCE_CONDITION_NV:
2418a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_WIDTH_QCOM:
2428a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_HEIGHT_QCOM:
2438a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_DEPTH_QCOM:
2448a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_INTERNAL_FORMAT_QCOM:
2458a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_FORMAT_QCOM:
2468a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_TYPE_QCOM:
2478a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_IMAGE_VALID_QCOM:
2488a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_NUM_LEVELS_QCOM:
2498a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_TARGET_QCOM:
2508a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_OBJECT_VALID_QCOM:
2518a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BLEND_EQUATION_RGB_OES:
2528a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BLEND_EQUATION_ALPHA_OES:
2538a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BLEND_DST_RGB_OES:
2548a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BLEND_SRC_RGB_OES:
2558a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BLEND_DST_ALPHA_OES:
2568a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BLEND_SRC_ALPHA_OES:
2578a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_LIGHTS:
2588a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SHADER_TYPE:
2598a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_DELETE_STATUS:
2608a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_COMPILE_STATUS:
2618a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_INFO_LOG_LENGTH:
2628a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SHADER_SOURCE_LENGTH:
2638a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_CURRENT_PROGRAM:
2648a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_LINK_STATUS:
2658a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_VALIDATE_STATUS:
2668a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_ATTACHED_SHADERS:
2678a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_ACTIVE_UNIFORMS:
2688a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_ACTIVE_ATTRIBUTES:
2698a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SUBPIXEL_BITS:
2708a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_CUBE_MAP_TEXTURE_SIZE:
2718a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_NUM_SHADER_BINARY_FORMATS:
2728a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SHADER_COMPILER:
2738a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_VERTEX_ATTRIBS:
2748a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_VERTEX_UNIFORM_VECTORS:
2758a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_VARYING_VECTORS:
2768a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
2778a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS:
2788a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_FRAGMENT_UNIFORM_VECTORS:
2798a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_RENDERBUFFER_SIZE:
2808a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_TEXTURE_IMAGE_UNITS:
2818a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:
2828a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
2838a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_LINE_WIDTH:
2848a94683196406b83b14218d1beef66067f126a16keunyoung        s = 1;
2858a94683196406b83b14218d1beef66067f126a16keunyoung        break;
2868a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_ALIASED_LINE_WIDTH_RANGE:
2878a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_ALIASED_POINT_SIZE_RANGE:
2888a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_DEPTH_RANGE:
2898a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MAX_VIEWPORT_DIMS:
2908a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SMOOTH_POINT_SIZE_RANGE:
2918a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SMOOTH_LINE_WIDTH_RANGE:
2928a94683196406b83b14218d1beef66067f126a16keunyoung        s= 2;
2938a94683196406b83b14218d1beef66067f126a16keunyoung        break;
2948a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SPOT_DIRECTION:
2958a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POINT_DISTANCE_ATTENUATION:
2968a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_CURRENT_NORMAL:
2978a94683196406b83b14218d1beef66067f126a16keunyoung        s =  3;
2988a94683196406b83b14218d1beef66067f126a16keunyoung        break;
2998a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_CURRENT_VERTEX_ATTRIB:
3008a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_CURRENT_TEXTURE_COORDS:
3018a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_CURRENT_COLOR:
3028a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FOG_COLOR:
3038a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_AMBIENT:
3048a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_DIFFUSE:
3058a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SPECULAR:
3068a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_EMISSION:
3078a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_POSITION:
3088a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_LIGHT_MODEL_AMBIENT:
3098a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_ENV_COLOR:
3108a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SCISSOR_BOX:
3118a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_VIEWPORT:
3128a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_CROP_RECT_OES:
3138a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_COLOR_CLEAR_VALUE:
3148a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_COLOR_WRITEMASK:
3158a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_AMBIENT_AND_DIFFUSE:
3168a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BLEND_COLOR:
3178a94683196406b83b14218d1beef66067f126a16keunyoung        s =  4;
3188a94683196406b83b14218d1beef66067f126a16keunyoung        break;
3198a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_MODELVIEW_MATRIX:
3208a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_PROJECTION_MATRIX:
3218a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_TEXTURE_MATRIX:
3228a94683196406b83b14218d1beef66067f126a16keunyoung        s = 16;
3238a94683196406b83b14218d1beef66067f126a16keunyoung    break;
3248a94683196406b83b14218d1beef66067f126a16keunyoung    default:
3258a94683196406b83b14218d1beef66067f126a16keunyoung        ERR("glUtilsParamSize: unknow param 0x%08x\n", param);
3268a94683196406b83b14218d1beef66067f126a16keunyoung        s = 1; // assume 1
3278a94683196406b83b14218d1beef66067f126a16keunyoung    }
3288a94683196406b83b14218d1beef66067f126a16keunyoung    return s;
3298a94683196406b83b14218d1beef66067f126a16keunyoung}
3308a94683196406b83b14218d1beef66067f126a16keunyoung
3318a94683196406b83b14218d1beef66067f126a16keunyoungvoid glUtilsPackPointerData(unsigned char *dst, unsigned char *src,
3328a94683196406b83b14218d1beef66067f126a16keunyoung                     int size, GLenum type, unsigned int stride,
3338a94683196406b83b14218d1beef66067f126a16keunyoung                     unsigned int datalen)
3348a94683196406b83b14218d1beef66067f126a16keunyoung{
3358a94683196406b83b14218d1beef66067f126a16keunyoung    unsigned int  vsize = size * glSizeof(type);
3368a94683196406b83b14218d1beef66067f126a16keunyoung    if (stride == 0) stride = vsize;
3378a94683196406b83b14218d1beef66067f126a16keunyoung
3388a94683196406b83b14218d1beef66067f126a16keunyoung    if (stride == vsize) {
3398a94683196406b83b14218d1beef66067f126a16keunyoung        memcpy(dst, src, datalen);
3408a94683196406b83b14218d1beef66067f126a16keunyoung    } else {
3418a94683196406b83b14218d1beef66067f126a16keunyoung        for (unsigned int i = 0; i < datalen; i += vsize) {
3428a94683196406b83b14218d1beef66067f126a16keunyoung            memcpy(dst, src, vsize);
3438a94683196406b83b14218d1beef66067f126a16keunyoung            dst += vsize;
3448a94683196406b83b14218d1beef66067f126a16keunyoung            src += stride;
3458a94683196406b83b14218d1beef66067f126a16keunyoung        }
3468a94683196406b83b14218d1beef66067f126a16keunyoung    }
3478a94683196406b83b14218d1beef66067f126a16keunyoung}
3488a94683196406b83b14218d1beef66067f126a16keunyoung
3498a94683196406b83b14218d1beef66067f126a16keunyoungvoid glUtilsWritePackPointerData(void* _stream, unsigned char *src,
3508a94683196406b83b14218d1beef66067f126a16keunyoung                                 int size, GLenum type, unsigned int stride,
3518a94683196406b83b14218d1beef66067f126a16keunyoung                                 unsigned int datalen)
3528a94683196406b83b14218d1beef66067f126a16keunyoung{
3538a94683196406b83b14218d1beef66067f126a16keunyoung    IOStream* stream = reinterpret_cast<IOStream*>(_stream);
3548a94683196406b83b14218d1beef66067f126a16keunyoung
3558a94683196406b83b14218d1beef66067f126a16keunyoung    unsigned int  vsize = size * glSizeof(type);
3568a94683196406b83b14218d1beef66067f126a16keunyoung    if (stride == 0) stride = vsize;
3578a94683196406b83b14218d1beef66067f126a16keunyoung
3588a94683196406b83b14218d1beef66067f126a16keunyoung    if (stride == vsize) {
3598a94683196406b83b14218d1beef66067f126a16keunyoung        stream->writeFully(src, datalen);
3608a94683196406b83b14218d1beef66067f126a16keunyoung    } else {
3618a94683196406b83b14218d1beef66067f126a16keunyoung        for (unsigned int i = 0; i < datalen; i += vsize) {
3628a94683196406b83b14218d1beef66067f126a16keunyoung            stream->writeFully(src, (size_t)vsize);
3638a94683196406b83b14218d1beef66067f126a16keunyoung            src += stride;
3648a94683196406b83b14218d1beef66067f126a16keunyoung        }
3658a94683196406b83b14218d1beef66067f126a16keunyoung    }
3668a94683196406b83b14218d1beef66067f126a16keunyoung}
3678a94683196406b83b14218d1beef66067f126a16keunyoung
3688a94683196406b83b14218d1beef66067f126a16keunyoungint glUtilsPixelBitSize(GLenum format, GLenum type)
3698a94683196406b83b14218d1beef66067f126a16keunyoung{
3708a94683196406b83b14218d1beef66067f126a16keunyoung    int components = 0;
3718a94683196406b83b14218d1beef66067f126a16keunyoung    int componentsize = 0;
3728a94683196406b83b14218d1beef66067f126a16keunyoung    int pixelsize = 0;
3738a94683196406b83b14218d1beef66067f126a16keunyoung    switch(type) {
3748a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_BYTE:
3758a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_UNSIGNED_BYTE:
3768a94683196406b83b14218d1beef66067f126a16keunyoung        componentsize = 8;
3778a94683196406b83b14218d1beef66067f126a16keunyoung        break;
3788a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_SHORT:
3798a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_UNSIGNED_SHORT:
3808a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_UNSIGNED_SHORT_5_6_5:
3818a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_UNSIGNED_SHORT_4_4_4_4:
3828a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_UNSIGNED_SHORT_5_5_5_1:
3838a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RGB565_OES:
3848a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RGB5_A1_OES:
3858a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_RGBA4_OES:
3868a94683196406b83b14218d1beef66067f126a16keunyoung        pixelsize = 16;
3878a94683196406b83b14218d1beef66067f126a16keunyoung        break;
3888a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_INT:
3898a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_UNSIGNED_INT:
3908a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FLOAT:
3918a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_FIXED:
3928a94683196406b83b14218d1beef66067f126a16keunyoung    case GL_UNSIGNED_INT_24_8_OES:
3938a94683196406b83b14218d1beef66067f126a16keunyoung        pixelsize = 32;
3948a94683196406b83b14218d1beef66067f126a16keunyoung        break;
3958a94683196406b83b14218d1beef66067f126a16keunyoung    default:
3968a94683196406b83b14218d1beef66067f126a16keunyoung        ERR("glUtilsPixelBitSize: unknown pixel type - assuming pixel data 0\n");
3978a94683196406b83b14218d1beef66067f126a16keunyoung        componentsize = 0;
3988a94683196406b83b14218d1beef66067f126a16keunyoung    }
3998a94683196406b83b14218d1beef66067f126a16keunyoung
4008a94683196406b83b14218d1beef66067f126a16keunyoung    if (pixelsize == 0) {
4018a94683196406b83b14218d1beef66067f126a16keunyoung        switch(format) {
4028a94683196406b83b14218d1beef66067f126a16keunyoung#if 0
4038a94683196406b83b14218d1beef66067f126a16keunyoung        case GL_RED:
4048a94683196406b83b14218d1beef66067f126a16keunyoung        case GL_GREEN:
4058a94683196406b83b14218d1beef66067f126a16keunyoung        case GL_BLUE:
4068a94683196406b83b14218d1beef66067f126a16keunyoung#endif
4078a94683196406b83b14218d1beef66067f126a16keunyoung        case GL_ALPHA:
4088a94683196406b83b14218d1beef66067f126a16keunyoung        case GL_LUMINANCE:
4098a94683196406b83b14218d1beef66067f126a16keunyoung        case GL_DEPTH_COMPONENT:
4108a94683196406b83b14218d1beef66067f126a16keunyoung        case GL_DEPTH_STENCIL_OES:
4118a94683196406b83b14218d1beef66067f126a16keunyoung            components = 1;
4128a94683196406b83b14218d1beef66067f126a16keunyoung            break;
4138a94683196406b83b14218d1beef66067f126a16keunyoung        case GL_LUMINANCE_ALPHA:
4148a94683196406b83b14218d1beef66067f126a16keunyoung            components = 2;
4158a94683196406b83b14218d1beef66067f126a16keunyoung            break;
4168a94683196406b83b14218d1beef66067f126a16keunyoung        case GL_RGB:
4178a94683196406b83b14218d1beef66067f126a16keunyoung#if 0
4188a94683196406b83b14218d1beef66067f126a16keunyoung        case GL_BGR:
4198a94683196406b83b14218d1beef66067f126a16keunyoung#endif
4208a94683196406b83b14218d1beef66067f126a16keunyoung            components = 3;
4218a94683196406b83b14218d1beef66067f126a16keunyoung            break;
4228a94683196406b83b14218d1beef66067f126a16keunyoung        case GL_RGBA:
4238a94683196406b83b14218d1beef66067f126a16keunyoung        case GL_BGRA_EXT:
4248a94683196406b83b14218d1beef66067f126a16keunyoung            components = 4;
4258a94683196406b83b14218d1beef66067f126a16keunyoung            break;
4268a94683196406b83b14218d1beef66067f126a16keunyoung        default:
4278a94683196406b83b14218d1beef66067f126a16keunyoung            ERR("glUtilsPixelBitSize: unknown pixel format...\n");
4288a94683196406b83b14218d1beef66067f126a16keunyoung            components = 0;
4298a94683196406b83b14218d1beef66067f126a16keunyoung        }
4308a94683196406b83b14218d1beef66067f126a16keunyoung        pixelsize = components * componentsize;
4318a94683196406b83b14218d1beef66067f126a16keunyoung    }
4328a94683196406b83b14218d1beef66067f126a16keunyoung
4338a94683196406b83b14218d1beef66067f126a16keunyoung    return pixelsize;
4348a94683196406b83b14218d1beef66067f126a16keunyoung}
4358a94683196406b83b14218d1beef66067f126a16keunyoung
4368a94683196406b83b14218d1beef66067f126a16keunyoung// pack a list of strings into one.
4378a94683196406b83b14218d1beef66067f126a16keunyoungvoid glUtilsPackStrings(char *ptr,  char **strings,  GLint *length, GLsizei count)
4388a94683196406b83b14218d1beef66067f126a16keunyoung{
4398a94683196406b83b14218d1beef66067f126a16keunyoung    char *p = ptr;
4408a94683196406b83b14218d1beef66067f126a16keunyoung    *p = '\0';
4418a94683196406b83b14218d1beef66067f126a16keunyoung    for (int i = 0; i < count; i++) {
4428a94683196406b83b14218d1beef66067f126a16keunyoung        int l=0;
4438a94683196406b83b14218d1beef66067f126a16keunyoung        if (strings[i]!=NULL) {
4448a94683196406b83b14218d1beef66067f126a16keunyoung            if (length == NULL || length[i] < 0) {
4458a94683196406b83b14218d1beef66067f126a16keunyoung                l = strlen(strings[i]);
4468a94683196406b83b14218d1beef66067f126a16keunyoung                strcat(p, strings[i]);
4478a94683196406b83b14218d1beef66067f126a16keunyoung            } else {
4488a94683196406b83b14218d1beef66067f126a16keunyoung                l = length[i];
4498a94683196406b83b14218d1beef66067f126a16keunyoung                strncat(p, strings[i], l);
4508a94683196406b83b14218d1beef66067f126a16keunyoung            }
4518a94683196406b83b14218d1beef66067f126a16keunyoung        }
4528a94683196406b83b14218d1beef66067f126a16keunyoung        p += l;
4538a94683196406b83b14218d1beef66067f126a16keunyoung    }
4548a94683196406b83b14218d1beef66067f126a16keunyoung}
4558a94683196406b83b14218d1beef66067f126a16keunyoung
4568a94683196406b83b14218d1beef66067f126a16keunyoung// claculate the length of a list of strings
4578a94683196406b83b14218d1beef66067f126a16keunyoungint glUtilsCalcShaderSourceLen( char **strings,  GLint *length, GLsizei count)
4588a94683196406b83b14218d1beef66067f126a16keunyoung{
4598a94683196406b83b14218d1beef66067f126a16keunyoung    int len = 0;
4608a94683196406b83b14218d1beef66067f126a16keunyoung    for (int i = 0; i < count; i++) {
4618a94683196406b83b14218d1beef66067f126a16keunyoung        int l;
4628a94683196406b83b14218d1beef66067f126a16keunyoung        if (length == NULL || length[i] < 0) {
4638a94683196406b83b14218d1beef66067f126a16keunyoung            l = strings[i]!=NULL ? strlen(strings[i]) : 0;
4648a94683196406b83b14218d1beef66067f126a16keunyoung        } else {
4658a94683196406b83b14218d1beef66067f126a16keunyoung            l = length[i];
4668a94683196406b83b14218d1beef66067f126a16keunyoung        }
4678a94683196406b83b14218d1beef66067f126a16keunyoung        len += l;
4688a94683196406b83b14218d1beef66067f126a16keunyoung    }
4698a94683196406b83b14218d1beef66067f126a16keunyoung    return len;
4708a94683196406b83b14218d1beef66067f126a16keunyoung
4718a94683196406b83b14218d1beef66067f126a16keunyoung}
472