## Name

glGetVertexAttrib — Return a generic vertex attribute parameter

## C Specification

`void glGetVertexAttribdv(` | GLuint index,
| GLenum pname,
| GLdouble *params`)`;

`void glGetVertexAttribfv(` | GLuint index,
| GLenum pname,
| GLfloat *params`)`;

`void glGetVertexAttribiv(` | GLuint index,
| GLenum pname,
| GLint *params`)`;

`void glGetVertexAttribIiv(` | GLuint index,
| GLenum pname,
| GLint *params`)`;

`void glGetVertexAttribIuiv(` | GLuint index,
| GLenum pname,
| GLuint *params`)`;

`void glGetVertexAttribLdv(` | GLuint index,
| GLenum pname,
| GLdouble *params`)`;

## Parameters

`index`

  Specifies the generic vertex attribute parameter to be queried.

`pname`

  Specifies the symbolic name of the vertex attribute parameter to be queried. Accepted values are `GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING`, `GL_VERTEX_ATTRIB_ARRAY_ENABLED`, `GL_VERTEX_ATTRIB_ARRAY_SIZE`, `GL_VERTEX_ATTRIB_ARRAY_STRIDE`, `GL_VERTEX_ATTRIB_ARRAY_TYPE`, `GL_VERTEX_ATTRIB_ARRAY_NORMALIZED`, `GL_VERTEX_ATTRIB_ARRAY_INTEGER`, `GL_VERTEX_ATTRIB_ARRAY_DIVISOR`, or `GL_CURRENT_VERTEX_ATTRIB`.

`params`

  Returns the requested data.

## Description

`glGetVertexAttrib` returns in `params` the value of a generic vertex attribute parameter. The generic vertex attribute to be queried is specified by `index`, and the parameter to be queried is specified by `pname`.

The accepted parameter names are as follows:

`GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING`

  `params` returns a single value, the name of the buffer object currently bound to the binding point corresponding to generic vertex attribute array `index`. If no buffer object is bound, 0 is returned. The initial value is 0.

`GL_VERTEX_ATTRIB_ARRAY_ENABLED`

  `params` returns a single value that is non-zero (true) if the vertex attribute array for `index` is enabled and 0 (false) if it is disabled. The initial value is `GL_FALSE`.

`GL_VERTEX_ATTRIB_ARRAY_SIZE`

  `params` returns a single value, the size of the vertex attribute array for `index`. The size is the number of values for each element of the vertex attribute array, and it will be 1, 2, 3, or 4. The initial value is 4.

`GL_VERTEX_ATTRIB_ARRAY_STRIDE`

  `params` returns a single value, the array stride for (number of bytes between successive elements in) the vertex attribute array for `index`. A value of 0 indicates that the array elements are stored sequentially in memory. The initial value is 0.

`GL_VERTEX_ATTRIB_ARRAY_TYPE`

  `params` returns a single value, a symbolic constant indicating the array type for the vertex attribute array for `index`. Possible values are `GL_BYTE`, `GL_UNSIGNED_BYTE`, `GL_SHORT`, `GL_UNSIGNED_SHORT`, `GL_INT`, `GL_UNSIGNED_INT`, `GL_FLOAT`, and `GL_DOUBLE`. The initial value is `GL_FLOAT`.

`GL_VERTEX_ATTRIB_ARRAY_NORMALIZED`

  `params` returns a single value that is non-zero (true) if fixed-point data types for the vertex attribute array indicated by `index` are normalized when they are converted to floating point, and 0 (false) otherwise. The initial value is `GL_FALSE`.

`GL_VERTEX_ATTRIB_ARRAY_INTEGER`

  `params` returns a single value that is non-zero (true) if fixed-point data types for the vertex attribute array indicated by `index` have integer data types, and 0 (false) otherwise. The initial value is 0 (`GL_FALSE`).

`GL_VERTEX_ATTRIB_ARRAY_DIVISOR`

  `params` returns a single value that is the frequency divisor used for instanced rendering. See glVertexAttribDivisor. The initial value is 0.

`GL_CURRENT_VERTEX_ATTRIB`

  `params` returns four values that represent the current value for the generic vertex attribute specified by index. Generic vertex attribute 0 is unique in that it has no current state, so an error will be generated if `index` is 0. The initial value for all other generic vertex attributes is (0,0,0,1).

  `glGetVertexAttribdv` and `glGetVertexAttribfv` return the current attribute values as four single-precision floating-point values; `glGetVertexAttribiv` reads them as floating-point values and converts them to four integer values; `glGetVertexAttribIiv` and `glGetVertexAttribIuiv` read and return them as signed or unsigned integer values, respectively; `glGetVertexAttribLdv` reads and returns them as four double-precision floating-point values.

All of the parameters except `GL_CURRENT_VERTEX_ATTRIB` represent state stored in the currently bound vertex array object.

## Notes

If an error is generated, no change is made to the contents of `params`.

## Errors

`GL_INVALID_OPERATION` is generated if `pname` is not `GL_CURRENT_VERTEX_ATTRIB` and there is no currently bound vertex array object.

`GL_INVALID_VALUE` is generated if `index` is greater than or equal to `GL_MAX_VERTEX_ATTRIBS`.

`GL_INVALID_ENUM` is generated if `pname` is not an accepted value.

`GL_INVALID_OPERATION` is generated if `index` is 0 and `pname` is `GL_CURRENT_VERTEX_ATTRIB`.

## Associated Gets

glGet with argument `GL_MAX_VERTEX_ATTRIBS`

glGetVertexAttribPointerv with arguments `index` and `GL_VERTEX_ATTRIB_ARRAY_POINTER`

## See Also

glBindAttribLocation, glBindBuffer, glDisableVertexAttribArray, glEnableVertexAttribArray, glVertexAttrib, glVertexAttribDivisor, glVertexAttribPointer

## Copyright

Copyright © 2003-2005 3Dlabs Inc. Ltd. Copyright © 2010 Khronos Group. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. http://opencontent.org/openpub/.