2012 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 void `glVertexAttribLFormat` 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`, `glVertexAttribIFormat` and `glVertexAttribLFormat` 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`, `GL_HALF_FLOAT`, and `GL_DOUBLE` indicate types `GLbyte`, `GLshort`, `GLint`, `GLfixed`, `GLfloat`, `GLhalf`, and `GLdouble`, respectively; the values `GL_UNSIGNED_BYTE`, `GL_UNSIGNED_SHORT`, and `GL_UNSIGNED_INT` indicate types `GLubyte`, `GLushort`, and `GLuint`, respectively; and 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`.

`glVertexAttribLFormat` is used to specify layout for data associated with a generic attribute variable declared as 64-bit double precision components. For `glVertexAttribLFormat`, type must be `GL_DOUBLE`. In contrast to `glVertexAttribFormat`, which will cause data declared as `GL_DOUBLE` to be converted to 32-bit representation, `glVertexAttribLFormat` causes such data to be left in its natural, 64-bit representation.

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, `glVertexAttribIFormat` should be used to describe vertex attribute layout for integer vertex attribute and `glVertexAttribLFormat` should be used to describe the layout for 64-bit 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_INVAILD_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`.

## See Also

glBindVertexBuffer, glVertexAttribBinding, glVertexAttribPointer, glVertexBindingDivisor, glVertexAttribPointer.

## Copyright

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