diff options
-rw-r--r-- | src/mesa/main/varray.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c index 963775edad6..cc9321a8327 100644 --- a/src/mesa/main/varray.c +++ b/src/mesa/main/varray.c @@ -625,6 +625,38 @@ update_array(struct gl_context *ctx, effectiveStride); } + +/* Helper function for all EXT_direct_state_access glVertexArray* functions */ +static bool +_lookup_vao_and_vbo_dsa(struct gl_context *ctx, + GLuint vaobj, GLuint buffer, + GLintptr offset, + struct gl_vertex_array_object** vao, + struct gl_buffer_object** vbo, + const char* caller) +{ + *vao = _mesa_lookup_vao_err(ctx, vaobj, true, caller); + if (!(*vao)) + return false; + + if (buffer != 0) { + *vbo = _mesa_lookup_bufferobj(ctx, buffer); + if (!_mesa_handle_bind_buffer_gen(ctx, buffer, vbo, caller)) + return false; + + if (offset < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, + "%s(negative offset with non-0 buffer)", caller); + return false; + } + } else { + *vbo = ctx->Shared->NullBufferObj; + } + + return true; +} + + void GLAPIENTRY _mesa_VertexPointer_no_error(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) |