2012-2014
Khronos Group
glVertexAttribFormat
3G

# glVertexAttribFormat

specify the organization of vertex arrays

## C Specification

                    void glVertexAttribFormat
                    GLuint attribindex
                    GLint size
                    GLenum type
                    GLboolean normalized
                    GLuint relativeoffset

                    void glVertexAttribIFormat
                    GLuint attribindex
                    GLint size
                    GLenum type
                    GLuint relativeoffset

## Parameters

`attribindex`

  The generic vertex attribute array being described.

`size`

  The number of values per vertex that are stored in the array.

`type`

  The type of the data stored in the array.

`normalized`

  The distance between elements within the buffer.

`relativeoffset`

  The distance between elements within the buffer.

## Description

`glVertexAttribFormat` and `glVertexAttribIFormat` specify the organization of data in vertex arrays. `attribindex` specifies the index of the generic vertex attribute array whose data layout is being described, and must be less than the value of `GL_MAX_VERTEX_ATTRIBS`.

`size` determines the number of components per vertex are allocated to the specifed attribute and must be 1, 2, 3 or 4. `type` indicates the type of the data. If `type` is one of `GL_BYTE`, `GL_SHORT`, `GL_INT`, `GL_FIXED`, `GL_FLOAT` and `GL_HALF_FLOAT` indicate types `GLbyte`, `GLshort`, `GLint`, `GLfixed`, `GLfloat`, and `GLhalf` respectively; the values `GL_UNSIGNED_BYTE`, `GL_UNSIGNED_SHORT`, and `GL_UNSIGNED_INT` indicate types `GLubyte`, `GLushort`, and `GLuint`, respectively; the values `GL_INT_2_10_10_10_REV` and `GL_UNSIGNED_INT_2_10_10_10_REV` indicating respectively four signed or unsigned elements packed into a single `GLuint`.

For `glVertexAttribFormat`, if `normalized` is `GL_TRUE`, then integer data is normalized to the range [-1, 1] or [0, 1] if it is signed or unsigned, respectively. If `noramlized` is `GL_FALSE` then integer data is directly converted to floating point.

`relativeoffset` is the offset, measured in basic machine units of the first element relative to the start of the vertex buffer binding this attribute fetches from.

`glVertexAttribFormat` should be used to describe vertex attribute layout for floating-point vertex attributes and `glVertexAttribIFormat` should be used to describe vertex attribute layout for integer vertex attributes. Data for an array specified by `glVertexAttribIFormat` will always be left as integer values; such data are referred to as pure integers.

## Errors

`GL_INVALID_VALUE` is generated if `attribindex` is greater than or equal to the value of `GL_MAX_VERTEX_ATTRIBS`.

`GL_INVALID_VALUE` is generated if `size` is not one of the accepted values.

`GL_INVALID_VALUE` is generated if `relativeoffset` is greater than the value of `GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET`.

`GL_INVALID_ENUM` is generated if `type` is not one of the accepted tokens.

`GL_INVALID_OPERATION` is generated if no vertex array object is bound.

## Associated Gets

glGet with arguments `GL_MAX_VERTEX_ATTRIB_BINDINGS`, or `GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET`.

glGetVertexAttrib with argument `GL_VERTEX_ATTRIB_RELATIVE_OFFSET`.

## API Version Support

`glVertexAttribFormat`
`glVertexAttribIFormat`

## See Also

glBindVertexBuffer, glVertexAttribBinding, glVertexAttribPointer, glVertexBindingDivisor, glVertexAttribPointer.

## Copyright

Copyright 2012-2014 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/.