diff options
author | Brian Paul <[email protected]> | 2011-01-15 10:32:34 -0700 |
---|---|---|
committer | Brian Paul <[email protected]> | 2011-01-15 17:37:41 -0700 |
commit | 1d1eb9578716913f4133786b30c6e6edc69a8a0c (patch) | |
tree | 4ba7959743ab71b82b8d37b39d1759d6f7a19a54 /src/mesa/main/varray.c | |
parent | 1250e2330b913d3e90bd0b28e46bf565a827b5bf (diff) |
mesa: support for GL_ARB_instanced_arrays
Diffstat (limited to 'src/mesa/main/varray.c')
-rw-r--r-- | src/mesa/main/varray.c | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c index bcde65adc70..29d8a8827e3 100644 --- a/src/mesa/main/varray.c +++ b/src/mesa/main/varray.c @@ -534,11 +534,19 @@ get_vertex_array_attrib(struct gl_context *ctx, GLuint index, GLenum pname, if (ctx->Extensions.EXT_gpu_shader4) { return array->Integer; } - /* fall-through */ + goto error; + case GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB: + if (ctx->Extensions.ARB_instanced_arrays) { + return array->InstanceDivisor; + } + goto error; default: - _mesa_error(ctx, GL_INVALID_ENUM, "%s(pname=0x%x)", caller, pname); - return 0; + ; /* fall-through */ } + +error: + _mesa_error(ctx, GL_INVALID_ENUM, "%s(pname=0x%x)", caller, pname); + return 0; } @@ -1066,6 +1074,33 @@ _mesa_PrimitiveRestartIndex(GLuint index) /** + * See GL_ARB_instanced_arrays. + * Note that the instance divisor only applies to generic arrays, not + * the legacy vertex arrays. + */ +void GLAPIENTRY +_mesa_VertexAttribDivisor(GLuint index, GLuint divisor) +{ + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + if (!ctx->Extensions.ARB_instanced_arrays) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glVertexAttribDivisor()"); + return; + } + + if (index >= ctx->Const.VertexProgram.MaxAttribs) { + _mesa_error(ctx, GL_INVALID_ENUM, "glVertexAttribDivisor(index = %u)", + index); + return; + } + + ctx->Array.ArrayObj->VertexAttrib[index].InstanceDivisor = divisor; +} + + + +/** * Copy one client vertex array to another. */ void @@ -1082,6 +1117,7 @@ _mesa_copy_client_array(struct gl_context *ctx, dst->Enabled = src->Enabled; dst->Normalized = src->Normalized; dst->Integer = src->Integer; + dst->InstanceDivisor = src->InstanceDivisor; dst->_ElementSize = src->_ElementSize; _mesa_reference_buffer_object(ctx, &dst->BufferObj, src->BufferObj); dst->_MaxElement = src->_MaxElement; |