glVertexAttribFormat - OpenGL ES 3.1 Reference Pages

## Name

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`

  Specifies whether fixed-point data values should be normalized (`GL_TRUE`) or converted directly as fixed-point values (`GL_FALSE`) when they are accessed. This parameter is ignored if `type` is `GL_FIXED`.

`relativeoffset`

  An offset to the first element relative to the start of the vertex buffer binding.

## 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 `normalized` is `GL_FALSE` then integer data is directly converted to floating point.

`relativeoffset` is the byte offset 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

| OpenGL ES API Version
--- | ---
Function Name | 2.0 | 3.0 | 3.1
`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/.