holdingarea/libGLESv1/src/glesGet.cpp
branchbug235_bringup_0
changeset 24 a3f46bb01be2
parent 20 d2d6724aef32
--- 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 <GLES/glext.h>
-#include "GLESContext.h"
-#include "GLESDesktopGL.h"
-
-// UINT_MAX
-#include <limits.h>
-
-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<GLESArrayFlag>(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<GLint*>(params)[j] = *reinterpret_cast<GLint*>(&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<GLint*>(params)[j] = *reinterpret_cast<GLint*>(&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<GLint*>(params)[j] = *reinterpret_cast<GLint*>(&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<GLint*>(params)[j] = static_cast<GLint>((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<GLboolean*>(params)[j] = b[j];
-                break;
-            case GLES_TYPE_INTEGER:
-            case GLES_TYPE_ENUM:
-                static_cast<GLboolean*>(params)[j] = i[j] ? GL_TRUE : GL_FALSE;
-                break;
-            case GLES_TYPE_DOUBLE:
-                static_cast<GLboolean*>(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<GLint*>(params)[j] = b[j];
-                break;
-            case GLES_TYPE_INTEGER:
-            case GLES_TYPE_ENUM:
-                static_cast<GLint*>(params)[j] = i[j];
-                break;
-            case GLES_TYPE_DOUBLE:
-                static_cast<GLint*>(params)[j] = static_cast<GLint>(d[j]);
-                break;
-            default:
-                GLES_ASSERT(false);
-            }
-            break;
-
-        case GLES_TYPE_FLOAT:
-            switch(srcType)
-            {
-            case GLES_TYPE_BOOLEAN:
-                static_cast<GLfloat*>(params)[j] = b[j];
-                break;
-            case GLES_TYPE_INTEGER:
-            case GLES_TYPE_ENUM:
-                static_cast<GLfloat*>(params)[j] = static_cast<GLfloat>(i[j]);
-                break;
-            case GLES_TYPE_DOUBLE:
-                static_cast<GLfloat*>(params)[j] = static_cast<GLfloat>(d[j]);
-                break;
-            default:
-                GLES_ASSERT(false);
-            }
-            break;
-
-        case GLES_TYPE_FIXED:
-            switch(srcType)
-            {
-            case GLES_TYPE_BOOLEAN:
-                static_cast<GLfixed*>(params)[j] = F_TO_X(b[j] ? 1.f : 0.f);
-                break;
-            case GLES_TYPE_INTEGER:
-                static_cast<GLfixed*>(params)[j] = I_TO_X(i[j]);
-                break;
-            case GLES_TYPE_ENUM:
-                static_cast<GLfixed*>(params)[j] = i[j];
-                break;
-            case GLES_TYPE_DOUBLE:
-                static_cast<GLfixed*>(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 <GLES/glext.h>
+#include "GLESContext.h"
+#include "GLESDesktopGL.h"
+
+// UINT_MAX
+#include <limits.h>
+
+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<GLESArrayFlag>(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<GLint*>(params)[j] = *reinterpret_cast<GLint*>(&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<GLint*>(params)[j] = *reinterpret_cast<GLint*>(&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<GLint*>(params)[j] = *reinterpret_cast<GLint*>(&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<GLint*>(params)[j] = static_cast<GLint>((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<GLboolean*>(params)[j] = b[j];
+                break;
+            case GLES_TYPE_INTEGER:
+            case GLES_TYPE_ENUM:
+                static_cast<GLboolean*>(params)[j] = i[j] ? GL_TRUE : GL_FALSE;
+                break;
+            case GLES_TYPE_DOUBLE:
+                static_cast<GLboolean*>(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<GLint*>(params)[j] = b[j];
+                break;
+            case GLES_TYPE_INTEGER:
+            case GLES_TYPE_ENUM:
+                static_cast<GLint*>(params)[j] = i[j];
+                break;
+            case GLES_TYPE_DOUBLE:
+                static_cast<GLint*>(params)[j] = static_cast<GLint>(d[j]);
+                break;
+            default:
+                GLES_ASSERT(false);
+            }
+            break;
+
+        case GLES_TYPE_FLOAT:
+            switch(srcType)
+            {
+            case GLES_TYPE_BOOLEAN:
+                static_cast<GLfloat*>(params)[j] = b[j];
+                break;
+            case GLES_TYPE_INTEGER:
+            case GLES_TYPE_ENUM:
+                static_cast<GLfloat*>(params)[j] = static_cast<GLfloat>(i[j]);
+                break;
+            case GLES_TYPE_DOUBLE:
+                static_cast<GLfloat*>(params)[j] = static_cast<GLfloat>(d[j]);
+                break;
+            default:
+                GLES_ASSERT(false);
+            }
+            break;
+
+        case GLES_TYPE_FIXED:
+            switch(srcType)
+            {
+            case GLES_TYPE_BOOLEAN:
+                static_cast<GLfixed*>(params)[j] = F_TO_X(b[j] ? 1.f : 0.f);
+                break;
+            case GLES_TYPE_INTEGER:
+                static_cast<GLfixed*>(params)[j] = I_TO_X(i[j]);
+                break;
+            case GLES_TYPE_ENUM:
+                static_cast<GLfixed*>(params)[j] = i[j];
+                break;
+            case GLES_TYPE_DOUBLE:
+                static_cast<GLfixed*>(params)[j] = D_TO_X(d[j]);
+                break;
+            default:
+                GLES_ASSERT(false);
+            }
+            break;
+
+        default:
+            GLES_ASSERT(false);
+        }
+    }
+
+    return true;
+}