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:
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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 */
|
||||
/*@{*/
|
||||
|
||||
Reference in New Issue
Block a user