mesa: add vertex_array_element_buffer() helper
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 19 Jul 2017 13:43:28 +0000 (15:43 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 31 Jul 2017 11:53:40 +0000 (13:53 +0200)
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/mesa/main/arrayobj.c

index 29dd93b1c7c5f8a7226f4bb929ce5c129e036b41..89fa473ff87cf984bc825fc9a79339d60517cbc1 100644 (file)
@@ -642,41 +642,58 @@ _mesa_IsVertexArray( GLuint id )
  * This is the ARB_direct_state_access equivalent of
  * glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer).
  */
-void GLAPIENTRY
-_mesa_VertexArrayElementBuffer(GLuint vaobj, GLuint buffer)
+static ALWAYS_INLINE void
+vertex_array_element_buffer(struct gl_context *ctx, GLuint vaobj, GLuint buffer,
+                            bool no_error)
 {
-   GET_CURRENT_CONTEXT(ctx);
    struct gl_vertex_array_object *vao;
    struct gl_buffer_object *bufObj;
 
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
-   /* The GL_ARB_direct_state_access specification says:
-    *
-    *    "An INVALID_OPERATION error is generated by VertexArrayElementBuffer
-    *     if <vaobj> is not [compatibility profile: zero or] the name of an
-    *     existing vertex array object."
-    */
-   vao =_mesa_lookup_vao_err(ctx, vaobj, "glVertexArrayElementBuffer");
-   if (!vao)
-      return;
+   if (!no_error) {
+      /* The GL_ARB_direct_state_access specification says:
+       *
+       *    "An INVALID_OPERATION error is generated by
+       *     VertexArrayElementBuffer if <vaobj> is not [compatibility profile:
+       *     zero or] the name of an existing vertex array object."
+       */
+      vao =_mesa_lookup_vao_err(ctx, vaobj, "glVertexArrayElementBuffer");
+      if (!vao)
+         return;
+   } else {
+      vao = _mesa_lookup_vao(ctx, vaobj);
+   }
 
-   /* The GL_ARB_direct_state_access specification says:
-    *
-    *    "An INVALID_OPERATION error is generated if <buffer> is not zero or
-    *     the name of an existing buffer object."
-    */
-   if (buffer != 0)
-      bufObj = _mesa_lookup_bufferobj_err(ctx, buffer,
-                                          "glVertexArrayElementBuffer");
-   else
+   if (buffer != 0) {
+      if (!no_error) {
+         /* The GL_ARB_direct_state_access specification says:
+          *
+          *    "An INVALID_OPERATION error is generated if <buffer> is not zero
+          *     or the name of an existing buffer object."
+          */
+         bufObj = _mesa_lookup_bufferobj_err(ctx, buffer,
+                                             "glVertexArrayElementBuffer");
+      } else {
+         bufObj = _mesa_lookup_bufferobj(ctx, buffer);
+      }
+   } else {
       bufObj = ctx->Shared->NullBufferObj;
+   }
 
    if (bufObj)
       _mesa_reference_buffer_object(ctx, &vao->IndexBufferObj, bufObj);
 }
 
 
+void GLAPIENTRY
+_mesa_VertexArrayElementBuffer(GLuint vaobj, GLuint buffer)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   vertex_array_element_buffer(ctx, vaobj, buffer, false);
+}
+
+
 void GLAPIENTRY
 _mesa_GetVertexArrayiv(GLuint vaobj, GLenum pname, GLint *param)
 {