diff -r e70851cd9e5e -r a3f46bb01be2 holdingarea/libGLESv1/src/glesGet.cpp --- a/holdingarea/libGLESv1/src/glesGet.cpp Thu Sep 16 12:43:44 2010 +0100 +++ b/holdingarea/libGLESv1/src/glesGet.cpp Mon Sep 20 14:29:05 2010 +0100 @@ -1,492 +1,492 @@ -/* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and /or associated documentation files - * (the "Materials "), to deal in the Materials without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Materials, - * and to permit persons to whom the Materials are furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Materials. - * - * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR - * THE USE OR OTHER DEALINGS IN THE MATERIALS. - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: - * - */ - -#include "glesGet.h" -#include -#include "GLESContext.h" -#include "GLESDesktopGL.h" - -// UINT_MAX -#include - -bool glesGetParameter(const GLESContext& context, const GLESDesktopGL &dgl, GLenum pname, GLESGetType dstType, void* params) -{ - GLESGetType srcType; - GLboolean b[4]; - GLint i[16]; - GLdouble d[16]; - int n = 1; - - switch(pname) - { - case GL_MAX_TEXTURE_UNITS: - i[0] = context.MaxTextureUnits(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_MAX_CLIP_PLANES: - i[0] = context.MaxClipPlanes(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_MAX_LIGHTS: - i[0] = context.MaxLights(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_CLIENT_ACTIVE_TEXTURE: - i[0] = GL_TEXTURE0 + context.ClientActiveTexture(); - srcType = GLES_TYPE_ENUM; - break; - - case GL_VERTEX_ARRAY: - i[0] = context.IsArrayEnabled(GLES_VERTEX_ARRAY); - srcType = GLES_TYPE_BOOLEAN; - break; - - case GL_VERTEX_ARRAY_SIZE: - i[0] = context.VertexArray().Size(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_VERTEX_ARRAY_TYPE: - i[0] = context.VertexArray().Type(); - srcType = GLES_TYPE_ENUM; - break; - - case GL_VERTEX_ARRAY_STRIDE: - i[0] = context.VertexArray().Stride(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_NORMAL_ARRAY: - i[0] = context.IsArrayEnabled(GLES_NORMAL_ARRAY); - srcType = GLES_TYPE_BOOLEAN; - break; - - case GL_NORMAL_ARRAY_TYPE: - i[0] = context.NormalArray().Type(); - srcType = GLES_TYPE_ENUM; - break; - - case GL_NORMAL_ARRAY_STRIDE: - i[0] = context.NormalArray().Stride(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_COLOR_ARRAY: - i[0] = context.IsArrayEnabled(GLES_COLOR_ARRAY); - srcType = GLES_TYPE_BOOLEAN; - break; - - case GL_COLOR_ARRAY_SIZE: - i[0] = context.ColorArray().Size(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_COLOR_ARRAY_TYPE: - i[0] = context.ColorArray().Type(); - srcType = GLES_TYPE_ENUM; - break; - - case GL_COLOR_ARRAY_STRIDE: - i[0] = context.ColorArray().Stride(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_POINT_SIZE_ARRAY_OES: - i[0] = context.IsArrayEnabled(GLES_POINT_SIZE_ARRAY); - srcType = GLES_TYPE_BOOLEAN; - break; - - case GL_POINT_SIZE_ARRAY_TYPE_OES: - i[0] = context.PointSizeArray().Type(); - srcType = GLES_TYPE_ENUM; - break; - - case GL_POINT_SIZE_ARRAY_STRIDE_OES: - i[0] = context.PointSizeArray().Stride(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES: - i[0] = context.PointSizeArray().BufferName(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_TEXTURE_COORD_ARRAY: - i[0] = context.IsArrayEnabled(static_cast(GLES_TEXTURE_COORD_ARRAY << context.ClientActiveTexture())); - srcType = GLES_TYPE_BOOLEAN; - break; - - case GL_TEXTURE_COORD_ARRAY_SIZE: - i[0] = context.TexCoordArray().Size(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_TEXTURE_COORD_ARRAY_TYPE: - i[0] = context.TexCoordArray().Type(); - srcType = GLES_TYPE_ENUM; - break; - - case GL_TEXTURE_COORD_ARRAY_STRIDE: - i[0] = context.TexCoordArray().Stride(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_VERTEX_ARRAY_BUFFER_BINDING: - i[0] = context.VertexArray().BufferName(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_NORMAL_ARRAY_BUFFER_BINDING: - i[0] = context.NormalArray().BufferName(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_COLOR_ARRAY_BUFFER_BINDING: - i[0] = context.ColorArray().BufferName(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING: - i[0] = context.TexCoordArray().BufferName(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_ARRAY_BUFFER_BINDING: - i[0] = context.ArrayBufferBinding(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_ELEMENT_ARRAY_BUFFER_BINDING: - i[0] = context.ElementArrayBufferBinding(); - srcType = GLES_TYPE_INTEGER; - break; - - case GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES: - if(dstType != GLES_TYPE_INTEGER) - { - return false; - } - dgl.glGetDoublev(GL_MODELVIEW_MATRIX, d); - n = 16; - for(int j = 0; j < n; j++) - { - static_cast(params)[j] = *reinterpret_cast(&d[j]); - } - break; - - case GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES: - if(dstType != GLES_TYPE_INTEGER) - { - return false; - } - dgl.glGetDoublev(GL_PROJECTION_MATRIX, d); - n = 16; - for(int j = 0; j < n; j++) - { - static_cast(params)[j] = *reinterpret_cast(&d[j]); - } - break; - - case GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES: - if(dstType != GLES_TYPE_INTEGER) - { - return false; - } - dgl.glGetDoublev(GL_TEXTURE_MATRIX, d); - n = 16; - for(int j = 0; j < n; j++) - { - static_cast(params)[j] = *reinterpret_cast(&d[j]); - } - break; - - case GL_POINT_SPRITE_OES: - b[0] = dgl.glIsEnabled(GL_POINT_SPRITE); - srcType = GLES_TYPE_BOOLEAN; - break; - - case GL_NUM_COMPRESSED_TEXTURE_FORMATS: - i[0] = 10; - srcType = GLES_TYPE_INTEGER; - break; - - case GL_COMPRESSED_TEXTURE_FORMATS: - i[0] = GL_PALETTE4_RGB8_OES; - i[1] = GL_PALETTE4_RGBA8_OES; - i[2] = GL_PALETTE4_R5_G6_B5_OES; - i[3] = GL_PALETTE4_RGBA4_OES; - i[4] = GL_PALETTE4_RGB5_A1_OES; - i[5] = GL_PALETTE8_RGB8_OES; - i[6] = GL_PALETTE8_RGBA8_OES; - i[7] = GL_PALETTE8_R5_G6_B5_OES; - i[8] = GL_PALETTE8_RGBA4_OES; - i[9] = GL_PALETTE8_RGB5_A1_OES; - srcType = GLES_TYPE_ENUM; - n = 10; - break; - - case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: - i[0] = GL_RGBA; - srcType = GLES_TYPE_ENUM; - break; - - case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: - i[0] = GL_UNSIGNED_BYTE; - srcType = GLES_TYPE_ENUM; - break; - - case GL_ALIASED_POINT_SIZE_RANGE: - case GL_ALIASED_LINE_WIDTH_RANGE: - case GL_DEPTH_RANGE: - case GL_SMOOTH_LINE_WIDTH_RANGE: - case GL_SMOOTH_POINT_SIZE_RANGE: - dgl.glGetDoublev(pname, d); - srcType = GLES_TYPE_DOUBLE; - n = 2; - break; - case GL_ALPHA_TEST_FUNC: - case GL_STENCIL_FAIL: - case GL_STENCIL_FUNC: - case GL_STENCIL_PASS_DEPTH_FAIL: - case GL_STENCIL_PASS_DEPTH_PASS: - case GL_BLEND_DST: - case GL_BLEND_SRC: - case GL_LOGIC_OP_MODE: - case GL_CULL_FACE: - case GL_DEPTH_FUNC: - case GL_FOG_HINT: - case GL_FOG_MODE: - case GL_FRONT_FACE: - case GL_LINE_SMOOTH_HINT: - case GL_MATRIX_MODE: - case GL_PERSPECTIVE_CORRECTION_HINT: - case GL_POINT_SMOOTH_HINT: - case GL_SHADE_MODEL: - case GL_GENERATE_MIPMAP_HINT: - case GL_CULL_FACE_MODE: - case GL_ACTIVE_TEXTURE: - dgl.glGetIntegerv(pname, i); - srcType = GLES_TYPE_ENUM; - break; - case GL_ALPHA_BITS: - case GL_RED_BITS: - case GL_GREEN_BITS: - case GL_BLUE_BITS: - case GL_DEPTH_BITS: - case GL_STENCIL_BITS: - case GL_STENCIL_VALUE_MASK: - case GL_STENCIL_WRITEMASK: - case GL_MODELVIEW_STACK_DEPTH: - case GL_PROJECTION_STACK_DEPTH: - case GL_TEXTURE_STACK_DEPTH: - case GL_PACK_ALIGNMENT: - case GL_UNPACK_ALIGNMENT: - case GL_TEXTURE_BINDING_2D: - case GL_SUBPIXEL_BITS: - case GL_SAMPLE_BUFFERS: - case GL_SAMPLES: - case GL_BUFFER_SIZE: - case GL_STENCIL_CLEAR_VALUE: - case GL_MAX_MODELVIEW_STACK_DEPTH: - case GL_MAX_PROJECTION_STACK_DEPTH: - case GL_MAX_TEXTURE_STACK_DEPTH: - case GL_MAX_TEXTURE_SIZE: - dgl.glGetIntegerv(pname, i); - srcType = GLES_TYPE_INTEGER; - break; - case GL_ALPHA_TEST_REF: - case GL_STENCIL_REF: - case GL_DEPTH_CLEAR_VALUE: - case GL_FOG_DENSITY: - case GL_FOG_START: - case GL_FOG_END: - case GL_LINE_WIDTH: - case GL_POINT_SIZE: - case GL_POINT_SIZE_MIN: - case GL_POINT_SIZE_MAX: - case GL_POLYGON_OFFSET_FACTOR: - case GL_POLYGON_OFFSET_UNITS: - case GL_POINT_FADE_THRESHOLD_SIZE: - dgl.glGetDoublev(pname, d); - srcType = GLES_TYPE_DOUBLE; - break; - case GL_CURRENT_NORMAL: - case GL_POINT_DISTANCE_ATTENUATION: - dgl.glGetDoublev(pname, d); - srcType = GLES_TYPE_DOUBLE; - n = 3; - break; - case GL_COLOR_CLEAR_VALUE: - case GL_CURRENT_TEXTURE_COORDS: - case GL_CURRENT_COLOR: - case GL_FOG_COLOR: - case GL_LIGHT_MODEL_AMBIENT: - case GL_AMBIENT: - case GL_DIFFUSE: - case GL_SPECULAR: - case GL_EMISSION: - dgl.glGetDoublev(pname, d); - srcType = GLES_TYPE_DOUBLE; - n = 4; - break; - case GL_COLOR_WRITEMASK: - dgl.glGetBooleanv(pname, b); - srcType = GLES_TYPE_BOOLEAN; - n = 4; - break; - case GL_DEPTH_WRITEMASK: - case GL_LIGHT_MODEL_TWO_SIDE: - dgl.glGetBooleanv(pname, b); - srcType = GLES_TYPE_BOOLEAN; - break; - case GL_PROJECTION_MATRIX: - case GL_MODELVIEW_MATRIX: - case GL_TEXTURE_MATRIX: - dgl.glGetDoublev(pname, d); - srcType = GLES_TYPE_DOUBLE; - n = 16; - break; - case GL_VIEWPORT: - case GL_SCISSOR_BOX: - dgl.glGetIntegerv(pname, i); - srcType = GLES_TYPE_INTEGER; - n = 4; - break; - case GL_MAX_VIEWPORT_DIMS: - dgl.glGetIntegerv(pname, i); - srcType = GLES_TYPE_INTEGER; - n = 2; - break; - - default: - return false; - } - - // Type conversions - - // Special cases - if(dstType == GLES_TYPE_INTEGER && - (pname == GL_CURRENT_COLOR || pname == GL_ALPHA_TEST_REF || pname == GL_DEPTH_CLEAR_VALUE)) - { - for(int j = 0; j < n; j++) - { - static_cast(params)[j] = static_cast((UINT_MAX * d[j] - 1) / 2); - } - return true; - } - - for(int j = 0; j < n; j++) - { - switch(dstType) - { - case GLES_TYPE_BOOLEAN: - switch(srcType) - { - case GLES_TYPE_BOOLEAN: - static_cast(params)[j] = b[j]; - break; - case GLES_TYPE_INTEGER: - case GLES_TYPE_ENUM: - static_cast(params)[j] = i[j] ? GL_TRUE : GL_FALSE; - break; - case GLES_TYPE_DOUBLE: - static_cast(params)[j] = d[j] ? GL_TRUE : GL_FALSE; - break; - default: - GLES_ASSERT(false); - } - break; - - case GLES_TYPE_INTEGER: - switch(srcType) - { - case GLES_TYPE_BOOLEAN: - static_cast(params)[j] = b[j]; - break; - case GLES_TYPE_INTEGER: - case GLES_TYPE_ENUM: - static_cast(params)[j] = i[j]; - break; - case GLES_TYPE_DOUBLE: - static_cast(params)[j] = static_cast(d[j]); - break; - default: - GLES_ASSERT(false); - } - break; - - case GLES_TYPE_FLOAT: - switch(srcType) - { - case GLES_TYPE_BOOLEAN: - static_cast(params)[j] = b[j]; - break; - case GLES_TYPE_INTEGER: - case GLES_TYPE_ENUM: - static_cast(params)[j] = static_cast(i[j]); - break; - case GLES_TYPE_DOUBLE: - static_cast(params)[j] = static_cast(d[j]); - break; - default: - GLES_ASSERT(false); - } - break; - - case GLES_TYPE_FIXED: - switch(srcType) - { - case GLES_TYPE_BOOLEAN: - static_cast(params)[j] = F_TO_X(b[j] ? 1.f : 0.f); - break; - case GLES_TYPE_INTEGER: - static_cast(params)[j] = I_TO_X(i[j]); - break; - case GLES_TYPE_ENUM: - static_cast(params)[j] = i[j]; - break; - case GLES_TYPE_DOUBLE: - static_cast(params)[j] = D_TO_X(d[j]); - break; - default: - GLES_ASSERT(false); - } - break; - - default: - GLES_ASSERT(false); - } - } - - return true; -} +/* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and /or associated documentation files + * (the "Materials "), to deal in the Materials without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Materials, + * and to permit persons to whom the Materials are furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR + * THE USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: + * + */ + +#include "glesGet.h" +#include +#include "GLESContext.h" +#include "GLESDesktopGL.h" + +// UINT_MAX +#include + +bool glesGetParameter(const GLESContext& context, const GLESDesktopGL &dgl, GLenum pname, GLESGetType dstType, void* params) +{ + GLESGetType srcType; + GLboolean b[4]; + GLint i[16]; + GLdouble d[16]; + int n = 1; + + switch(pname) + { + case GL_MAX_TEXTURE_UNITS: + i[0] = context.MaxTextureUnits(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_MAX_CLIP_PLANES: + i[0] = context.MaxClipPlanes(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_MAX_LIGHTS: + i[0] = context.MaxLights(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_CLIENT_ACTIVE_TEXTURE: + i[0] = GL_TEXTURE0 + context.ClientActiveTexture(); + srcType = GLES_TYPE_ENUM; + break; + + case GL_VERTEX_ARRAY: + i[0] = context.IsArrayEnabled(GLES_VERTEX_ARRAY); + srcType = GLES_TYPE_BOOLEAN; + break; + + case GL_VERTEX_ARRAY_SIZE: + i[0] = context.VertexArray().Size(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_VERTEX_ARRAY_TYPE: + i[0] = context.VertexArray().Type(); + srcType = GLES_TYPE_ENUM; + break; + + case GL_VERTEX_ARRAY_STRIDE: + i[0] = context.VertexArray().Stride(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_NORMAL_ARRAY: + i[0] = context.IsArrayEnabled(GLES_NORMAL_ARRAY); + srcType = GLES_TYPE_BOOLEAN; + break; + + case GL_NORMAL_ARRAY_TYPE: + i[0] = context.NormalArray().Type(); + srcType = GLES_TYPE_ENUM; + break; + + case GL_NORMAL_ARRAY_STRIDE: + i[0] = context.NormalArray().Stride(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_COLOR_ARRAY: + i[0] = context.IsArrayEnabled(GLES_COLOR_ARRAY); + srcType = GLES_TYPE_BOOLEAN; + break; + + case GL_COLOR_ARRAY_SIZE: + i[0] = context.ColorArray().Size(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_COLOR_ARRAY_TYPE: + i[0] = context.ColorArray().Type(); + srcType = GLES_TYPE_ENUM; + break; + + case GL_COLOR_ARRAY_STRIDE: + i[0] = context.ColorArray().Stride(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_POINT_SIZE_ARRAY_OES: + i[0] = context.IsArrayEnabled(GLES_POINT_SIZE_ARRAY); + srcType = GLES_TYPE_BOOLEAN; + break; + + case GL_POINT_SIZE_ARRAY_TYPE_OES: + i[0] = context.PointSizeArray().Type(); + srcType = GLES_TYPE_ENUM; + break; + + case GL_POINT_SIZE_ARRAY_STRIDE_OES: + i[0] = context.PointSizeArray().Stride(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES: + i[0] = context.PointSizeArray().BufferName(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_TEXTURE_COORD_ARRAY: + i[0] = context.IsArrayEnabled(static_cast(GLES_TEXTURE_COORD_ARRAY << context.ClientActiveTexture())); + srcType = GLES_TYPE_BOOLEAN; + break; + + case GL_TEXTURE_COORD_ARRAY_SIZE: + i[0] = context.TexCoordArray().Size(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_TEXTURE_COORD_ARRAY_TYPE: + i[0] = context.TexCoordArray().Type(); + srcType = GLES_TYPE_ENUM; + break; + + case GL_TEXTURE_COORD_ARRAY_STRIDE: + i[0] = context.TexCoordArray().Stride(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_VERTEX_ARRAY_BUFFER_BINDING: + i[0] = context.VertexArray().BufferName(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_NORMAL_ARRAY_BUFFER_BINDING: + i[0] = context.NormalArray().BufferName(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_COLOR_ARRAY_BUFFER_BINDING: + i[0] = context.ColorArray().BufferName(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING: + i[0] = context.TexCoordArray().BufferName(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_ARRAY_BUFFER_BINDING: + i[0] = context.ArrayBufferBinding(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_ELEMENT_ARRAY_BUFFER_BINDING: + i[0] = context.ElementArrayBufferBinding(); + srcType = GLES_TYPE_INTEGER; + break; + + case GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES: + if(dstType != GLES_TYPE_INTEGER) + { + return false; + } + dgl.glGetDoublev(GL_MODELVIEW_MATRIX, d); + n = 16; + for(int j = 0; j < n; j++) + { + static_cast(params)[j] = *reinterpret_cast(&d[j]); + } + break; + + case GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES: + if(dstType != GLES_TYPE_INTEGER) + { + return false; + } + dgl.glGetDoublev(GL_PROJECTION_MATRIX, d); + n = 16; + for(int j = 0; j < n; j++) + { + static_cast(params)[j] = *reinterpret_cast(&d[j]); + } + break; + + case GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES: + if(dstType != GLES_TYPE_INTEGER) + { + return false; + } + dgl.glGetDoublev(GL_TEXTURE_MATRIX, d); + n = 16; + for(int j = 0; j < n; j++) + { + static_cast(params)[j] = *reinterpret_cast(&d[j]); + } + break; + + case GL_POINT_SPRITE_OES: + b[0] = dgl.glIsEnabled(GL_POINT_SPRITE); + srcType = GLES_TYPE_BOOLEAN; + break; + + case GL_NUM_COMPRESSED_TEXTURE_FORMATS: + i[0] = 10; + srcType = GLES_TYPE_INTEGER; + break; + + case GL_COMPRESSED_TEXTURE_FORMATS: + i[0] = GL_PALETTE4_RGB8_OES; + i[1] = GL_PALETTE4_RGBA8_OES; + i[2] = GL_PALETTE4_R5_G6_B5_OES; + i[3] = GL_PALETTE4_RGBA4_OES; + i[4] = GL_PALETTE4_RGB5_A1_OES; + i[5] = GL_PALETTE8_RGB8_OES; + i[6] = GL_PALETTE8_RGBA8_OES; + i[7] = GL_PALETTE8_R5_G6_B5_OES; + i[8] = GL_PALETTE8_RGBA4_OES; + i[9] = GL_PALETTE8_RGB5_A1_OES; + srcType = GLES_TYPE_ENUM; + n = 10; + break; + + case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: + i[0] = GL_RGBA; + srcType = GLES_TYPE_ENUM; + break; + + case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: + i[0] = GL_UNSIGNED_BYTE; + srcType = GLES_TYPE_ENUM; + break; + + case GL_ALIASED_POINT_SIZE_RANGE: + case GL_ALIASED_LINE_WIDTH_RANGE: + case GL_DEPTH_RANGE: + case GL_SMOOTH_LINE_WIDTH_RANGE: + case GL_SMOOTH_POINT_SIZE_RANGE: + dgl.glGetDoublev(pname, d); + srcType = GLES_TYPE_DOUBLE; + n = 2; + break; + case GL_ALPHA_TEST_FUNC: + case GL_STENCIL_FAIL: + case GL_STENCIL_FUNC: + case GL_STENCIL_PASS_DEPTH_FAIL: + case GL_STENCIL_PASS_DEPTH_PASS: + case GL_BLEND_DST: + case GL_BLEND_SRC: + case GL_LOGIC_OP_MODE: + case GL_CULL_FACE: + case GL_DEPTH_FUNC: + case GL_FOG_HINT: + case GL_FOG_MODE: + case GL_FRONT_FACE: + case GL_LINE_SMOOTH_HINT: + case GL_MATRIX_MODE: + case GL_PERSPECTIVE_CORRECTION_HINT: + case GL_POINT_SMOOTH_HINT: + case GL_SHADE_MODEL: + case GL_GENERATE_MIPMAP_HINT: + case GL_CULL_FACE_MODE: + case GL_ACTIVE_TEXTURE: + dgl.glGetIntegerv(pname, i); + srcType = GLES_TYPE_ENUM; + break; + case GL_ALPHA_BITS: + case GL_RED_BITS: + case GL_GREEN_BITS: + case GL_BLUE_BITS: + case GL_DEPTH_BITS: + case GL_STENCIL_BITS: + case GL_STENCIL_VALUE_MASK: + case GL_STENCIL_WRITEMASK: + case GL_MODELVIEW_STACK_DEPTH: + case GL_PROJECTION_STACK_DEPTH: + case GL_TEXTURE_STACK_DEPTH: + case GL_PACK_ALIGNMENT: + case GL_UNPACK_ALIGNMENT: + case GL_TEXTURE_BINDING_2D: + case GL_SUBPIXEL_BITS: + case GL_SAMPLE_BUFFERS: + case GL_SAMPLES: + case GL_BUFFER_SIZE: + case GL_STENCIL_CLEAR_VALUE: + case GL_MAX_MODELVIEW_STACK_DEPTH: + case GL_MAX_PROJECTION_STACK_DEPTH: + case GL_MAX_TEXTURE_STACK_DEPTH: + case GL_MAX_TEXTURE_SIZE: + dgl.glGetIntegerv(pname, i); + srcType = GLES_TYPE_INTEGER; + break; + case GL_ALPHA_TEST_REF: + case GL_STENCIL_REF: + case GL_DEPTH_CLEAR_VALUE: + case GL_FOG_DENSITY: + case GL_FOG_START: + case GL_FOG_END: + case GL_LINE_WIDTH: + case GL_POINT_SIZE: + case GL_POINT_SIZE_MIN: + case GL_POINT_SIZE_MAX: + case GL_POLYGON_OFFSET_FACTOR: + case GL_POLYGON_OFFSET_UNITS: + case GL_POINT_FADE_THRESHOLD_SIZE: + dgl.glGetDoublev(pname, d); + srcType = GLES_TYPE_DOUBLE; + break; + case GL_CURRENT_NORMAL: + case GL_POINT_DISTANCE_ATTENUATION: + dgl.glGetDoublev(pname, d); + srcType = GLES_TYPE_DOUBLE; + n = 3; + break; + case GL_COLOR_CLEAR_VALUE: + case GL_CURRENT_TEXTURE_COORDS: + case GL_CURRENT_COLOR: + case GL_FOG_COLOR: + case GL_LIGHT_MODEL_AMBIENT: + case GL_AMBIENT: + case GL_DIFFUSE: + case GL_SPECULAR: + case GL_EMISSION: + dgl.glGetDoublev(pname, d); + srcType = GLES_TYPE_DOUBLE; + n = 4; + break; + case GL_COLOR_WRITEMASK: + dgl.glGetBooleanv(pname, b); + srcType = GLES_TYPE_BOOLEAN; + n = 4; + break; + case GL_DEPTH_WRITEMASK: + case GL_LIGHT_MODEL_TWO_SIDE: + dgl.glGetBooleanv(pname, b); + srcType = GLES_TYPE_BOOLEAN; + break; + case GL_PROJECTION_MATRIX: + case GL_MODELVIEW_MATRIX: + case GL_TEXTURE_MATRIX: + dgl.glGetDoublev(pname, d); + srcType = GLES_TYPE_DOUBLE; + n = 16; + break; + case GL_VIEWPORT: + case GL_SCISSOR_BOX: + dgl.glGetIntegerv(pname, i); + srcType = GLES_TYPE_INTEGER; + n = 4; + break; + case GL_MAX_VIEWPORT_DIMS: + dgl.glGetIntegerv(pname, i); + srcType = GLES_TYPE_INTEGER; + n = 2; + break; + + default: + return false; + } + + // Type conversions + + // Special cases + if(dstType == GLES_TYPE_INTEGER && + (pname == GL_CURRENT_COLOR || pname == GL_ALPHA_TEST_REF || pname == GL_DEPTH_CLEAR_VALUE)) + { + for(int j = 0; j < n; j++) + { + static_cast(params)[j] = static_cast((UINT_MAX * d[j] - 1) / 2); + } + return true; + } + + for(int j = 0; j < n; j++) + { + switch(dstType) + { + case GLES_TYPE_BOOLEAN: + switch(srcType) + { + case GLES_TYPE_BOOLEAN: + static_cast(params)[j] = b[j]; + break; + case GLES_TYPE_INTEGER: + case GLES_TYPE_ENUM: + static_cast(params)[j] = i[j] ? GL_TRUE : GL_FALSE; + break; + case GLES_TYPE_DOUBLE: + static_cast(params)[j] = d[j] ? GL_TRUE : GL_FALSE; + break; + default: + GLES_ASSERT(false); + } + break; + + case GLES_TYPE_INTEGER: + switch(srcType) + { + case GLES_TYPE_BOOLEAN: + static_cast(params)[j] = b[j]; + break; + case GLES_TYPE_INTEGER: + case GLES_TYPE_ENUM: + static_cast(params)[j] = i[j]; + break; + case GLES_TYPE_DOUBLE: + static_cast(params)[j] = static_cast(d[j]); + break; + default: + GLES_ASSERT(false); + } + break; + + case GLES_TYPE_FLOAT: + switch(srcType) + { + case GLES_TYPE_BOOLEAN: + static_cast(params)[j] = b[j]; + break; + case GLES_TYPE_INTEGER: + case GLES_TYPE_ENUM: + static_cast(params)[j] = static_cast(i[j]); + break; + case GLES_TYPE_DOUBLE: + static_cast(params)[j] = static_cast(d[j]); + break; + default: + GLES_ASSERT(false); + } + break; + + case GLES_TYPE_FIXED: + switch(srcType) + { + case GLES_TYPE_BOOLEAN: + static_cast(params)[j] = F_TO_X(b[j] ? 1.f : 0.f); + break; + case GLES_TYPE_INTEGER: + static_cast(params)[j] = I_TO_X(i[j]); + break; + case GLES_TYPE_ENUM: + static_cast(params)[j] = i[j]; + break; + case GLES_TYPE_DOUBLE: + static_cast(params)[j] = D_TO_X(d[j]); + break; + default: + GLES_ASSERT(false); + } + break; + + default: + GLES_ASSERT(false); + } + } + + return true; +}