--- src/mesa/main/varray.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/mesa/main/varray.h | 3 +++ 2 files changed, 56 insertions(+)
diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c index 0f38270..cf21770 100644 --- a/src/mesa/main/varray.c +++ b/src/mesa/main/varray.c @@ -1681,6 +1681,59 @@ _mesa_VertexBindingDivisor(GLuint bindingIndex, GLuint divisor) /** + * See GL_ARB_multi_bind spec + */ + +void GLAPIENTRY +_mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers, + const GLintptr *offsets, const GLsizei *strides) +{ + GET_CURRENT_CONTEXT(ctx); + int i = 0; + + if (first + count > ctx->Const.MaxVertexAttribBindings) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBindVertexBuffers(first+count=%u > " + "GL_MAX_VERTEX_ATTRIB_BINDINGS)", + first+count); + return; + } + + for(i = 0 ; i < count ; i++) { + GLuint buffer; + GLintptr offset; + GLsizei stride; + struct gl_buffer_object *bufferObj; + + if(buffers == NULL) + buffer = 0; + else { + buffer = buffers[i]; + offset = offsets[i]; + stride = strides[i]; + } + + if(buffer != 0) { + bufferObj = _mesa_lookup_bufferobj(ctx, buffer); + if(bufferObj) { + if(!offset < 0 || !stride < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glBindVertexBuffers" + "(offsets[%i] < 0 || stride[%i] < 0)", i, i); + } + else + _mesa_BindVertexBuffer(first+i, buffer, offset, stride); + } + else + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBindVertexBuffer(buffer[i] is not valid)", i); + } + else + _mesa_BindVertexBuffer(first + i, 0, 0, 16); + } +} + + +/** * Copy one client vertex array to another. */ void diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h index bc820ed..5411a9c 100644 --- a/src/mesa/main/varray.h +++ b/src/mesa/main/varray.h @@ -308,6 +308,9 @@ _mesa_VertexAttribBinding(GLuint attribIndex, GLuint bindingIndex); extern void GLAPIENTRY _mesa_VertexBindingDivisor(GLuint bindingIndex, GLuint divisor); +extern void GLAPIENTRY +_mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers, + const GLintptr *offsets, const GLsizei *strides); extern void _mesa_copy_client_array(struct gl_context *ctx, -- 1.8.5.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev