From: Ian Romanick <[email protected]>

v2: Add proper core-profile, GLES1, and GLES3 filtering.

Signed-off-by: Ian Romanick <[email protected]>
---
 src/mesa/main/APIspec.xml |   10 ----------
 src/mesa/main/getstring.c |   35 +++++++++++++++++++++++++++++++++--
 2 files changed, 33 insertions(+), 12 deletions(-)

diff --git a/src/mesa/main/APIspec.xml b/src/mesa/main/APIspec.xml
index cf4e5f8..6d6462c 100644
--- a/src/mesa/main/APIspec.xml
+++ b/src/mesa/main/APIspec.xml
@@ -923,16 +923,6 @@
                <param name="pname" type="GLenum"/>
                <vector name="params" type="GLvoid **" size="dynamic"/>
        </proto>
-
-       <desc name="pname">
-               <value name="GL_VERTEX_ARRAY_POINTER"/>
-               <value name="GL_NORMAL_ARRAY_POINTER"/>
-               <value name="GL_COLOR_ARRAY_POINTER"/>
-               <value name="GL_TEXTURE_COORD_ARRAY_POINTER"/>
-               <value name="GL_MATRIX_INDEX_ARRAY_POINTER_OES" 
category="OES_matrix_palette"/>
-               <value name="GL_WEIGHT_ARRAY_POINTER_OES" 
category="OES_matrix_palette"/>
-               <value name="GL_POINT_SIZE_ARRAY_POINTER_OES" 
category="OES_point_size_array"/>
-       </desc>
 </template>
 
 <template name="Normal">
diff --git a/src/mesa/main/getstring.c b/src/mesa/main/getstring.c
index c99486a..748a943 100644
--- a/src/mesa/main/getstring.c
+++ b/src/mesa/main/getstring.c
@@ -208,50 +208,81 @@ _mesa_GetPointerv( GLenum pname, GLvoid **params )
 
    switch (pname) {
       case GL_VERTEX_ARRAY_POINTER:
+         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
+            goto invalid_pname;
          *params = (GLvoid *) 
ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Ptr;
          break;
       case GL_NORMAL_ARRAY_POINTER:
+         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
+            goto invalid_pname;
          *params = (GLvoid *) 
ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Ptr;
          break;
       case GL_COLOR_ARRAY_POINTER:
+         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
+            goto invalid_pname;
          *params = (GLvoid *) 
ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Ptr;
          break;
       case GL_SECONDARY_COLOR_ARRAY_POINTER_EXT:
+         if (ctx->API != API_OPENGL)
+            goto invalid_pname;
          *params = (GLvoid *) 
ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Ptr;
          break;
       case GL_FOG_COORDINATE_ARRAY_POINTER_EXT:
+         if (ctx->API != API_OPENGL)
+            goto invalid_pname;
          *params = (GLvoid *) 
ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_FOG].Ptr;
          break;
       case GL_INDEX_ARRAY_POINTER:
+         if (ctx->API != API_OPENGL)
+            goto invalid_pname;
          *params = (GLvoid *) 
ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Ptr;
          break;
       case GL_TEXTURE_COORD_ARRAY_POINTER:
+         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
+            goto invalid_pname;
          *params = (GLvoid *) 
ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_TEX(clientUnit)].Ptr;
          break;
       case GL_EDGE_FLAG_ARRAY_POINTER:
+         if (ctx->API != API_OPENGL)
+            goto invalid_pname;
          *params = (GLvoid *) 
ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Ptr;
          break;
       case GL_FEEDBACK_BUFFER_POINTER:
+         if (ctx->API != API_OPENGL)
+            goto invalid_pname;
          *params = ctx->Feedback.Buffer;
          break;
       case GL_SELECTION_BUFFER_POINTER:
+         if (ctx->API != API_OPENGL)
+            goto invalid_pname;
          *params = ctx->Select.Buffer;
          break;
 #if FEATURE_point_size_array
       case GL_POINT_SIZE_ARRAY_POINTER_OES:
+         if (ctx->API != API_OPENGLES)
+            goto invalid_pname;
          *params = (GLvoid *) 
ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Ptr;
          break;
 #endif
       case GL_DEBUG_CALLBACK_FUNCTION_ARB:
+         if (!_mesa_is_desktop_gl(ctx))
+            goto invalid_pname;
          *params = (GLvoid *) ctx->Debug.Callback;
          break;
       case GL_DEBUG_CALLBACK_USER_PARAM_ARB:
+         if (!_mesa_is_desktop_gl(ctx))
+            goto invalid_pname;
          *params = ctx->Debug.CallbackData;
          break;
       default:
-         _mesa_error( ctx, GL_INVALID_ENUM, "glGetPointerv" );
-         return;
+         goto invalid_pname;
    }
+
+   return;
+
+invalid_pname:
+   _mesa_error( ctx, GL_INVALID_ENUM, "glGetPointerv" );
+   return;
 }
 
 
-- 
1.7.6.5

_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to