mesa: implement _mesa_GenVertexArrays() for GL_ARB_vertex_array_object

This also involves adding a gl_array_object::VBOonly field.  For the
ARB extension, all arrays in the object must reside in a VBO.  This flag
keeps track of that requirement.
This commit is contained in:
Brian Paul
2009-06-19 18:17:25 -06:00
parent b8000c874e
commit 9342e6f5a9
3 changed files with 32 additions and 4 deletions
+29 -4
View File
@@ -485,14 +485,14 @@ _mesa_DeleteVertexArraysAPPLE(GLsizei n, const GLuint *ids)
/**
* Generate a set of unique array object IDs and store them in \c arrays.
*
* Helper for _mesa_GenVertexArrays[APPLE]() functions below.
* \param n Number of IDs to generate.
* \param arrays Array of \c n locations to store the IDs.
* \param vboOnly Will arrays have to reside in VBOs?
*/
void GLAPIENTRY
_mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *arrays)
static void
gen_vertex_arrays(GLcontext *ctx, GLsizei n, GLuint *arrays, GLboolean vboOnly)
{
GET_CURRENT_CONTEXT(ctx);
GLuint first;
GLint i;
ASSERT_OUTSIDE_BEGIN_END(ctx);
@@ -518,12 +518,37 @@ _mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *arrays)
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenVertexArraysAPPLE");
return;
}
obj->VBOonly = vboOnly;
save_array_object(ctx, obj);
arrays[i] = first + i;
}
}
/**
* ARB version of glGenVertexArrays()
* All arrays will be required to live in VBOs.
*/
void GLAPIENTRY
_mesa_GenVertexArrays(GLsizei n, GLuint *arrays)
{
GET_CURRENT_CONTEXT(ctx);
gen_vertex_arrays(ctx, n, arrays, GL_TRUE);
}
/**
* APPLE version of glGenVertexArraysAPPLE()
* Arrays may live in VBOs or ordinary memory.
*/
void GLAPIENTRY
_mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *arrays)
{
GET_CURRENT_CONTEXT(ctx);
gen_vertex_arrays(ctx, n, arrays, GL_FALSE);
}
/**
* Determine if ID is the name of an array object.
*
+2
View File
@@ -74,6 +74,8 @@ void GLAPIENTRY _mesa_BindVertexArrayAPPLE( GLuint id );
void GLAPIENTRY _mesa_DeleteVertexArraysAPPLE(GLsizei n, const GLuint *ids);
void GLAPIENTRY _mesa_GenVertexArrays(GLsizei n, GLuint *arrays);
void GLAPIENTRY _mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *buffer);
GLboolean GLAPIENTRY _mesa_IsVertexArrayAPPLE( GLuint id );
+1
View File
@@ -1563,6 +1563,7 @@ struct gl_array_object
GLint RefCount;
_glthread_Mutex Mutex;
GLboolean VBOonly; /**< require all arrays to live in VBOs? */
/** Conventional vertex arrays */
/*@{*/