/** * Get a vertex (or vertex array) attribute. * \note Not compiled into display lists. * \note Called from the GL API dispatcher. */ void _mesa_GetVertexAttribivNV(GLuint index, GLenum pname, GLint *params) { GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); if (index == 0 || index >= VP_NUM_INPUT_REGS) { _mesa_error(ctx, GL_INVALID_VALUE, "glGetVertexAttribdvNV(index)"); return; } switch (pname) { case GL_ATTRIB_ARRAY_SIZE_NV: params[0] = ctx->Array.VertexAttrib[index].Size; break; case GL_ATTRIB_ARRAY_STRIDE_NV: params[0] = ctx->Array.VertexAttrib[index].Stride; break; case GL_ATTRIB_ARRAY_TYPE_NV: params[0] = ctx->Array.VertexAttrib[index].Type; break; case GL_CURRENT_ATTRIB_NV: FLUSH_CURRENT(ctx, 0); COPY_4V_CAST(params, ctx->Current.Attrib[index], GLint); break; default: _mesa_error(ctx, GL_INVALID_ENUM, "glGetVertexAttribdvNV"); return; } }
void GLAPIENTRY _mesa_GetVertexAttribivARB(GLuint index, GLenum pname, GLint *params) { GLfloat fparams[4]; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); _mesa_GetVertexAttribfvARB(index, pname, fparams); if (ctx->ErrorValue == GL_NO_ERROR) { if (pname == GL_CURRENT_VERTEX_ATTRIB_ARB) { COPY_4V_CAST(params, fparams, GLint); /* float to int */ } else { params[0] = (GLint) fparams[0]; } } }
/** * Set a program parameter register. * \note Called from the GL API dispatcher. */ void _mesa_ProgramParameter4dvNV(GLenum target, GLuint index, const GLdouble *params) { GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); if (target != GL_VERTEX_PROGRAM_NV) { _mesa_error(ctx, GL_INVALID_ENUM, "glProgramParameter4dvNV"); return; } if (index >= VP_NUM_PROG_REGS) { _mesa_error(ctx, GL_INVALID_VALUE, "glProgramParameter4dvNV"); return; } index += VP_PROG_REG_START; COPY_4V_CAST(ctx->VertexProgram.Machine.Registers[index], params, GLfloat); }