https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glVertexAttribPointer.xhtml
名称
glVertexAttribPointer ---- 定义通用的顶点 attribute
数组数据。
原型
void glVertexAttribPointer( GLuint index,
GLint size,
GLenum type,
GLboolean normalized,
GLsizei stride,
const void * pointer);
void glVertexAttribIPointer(GLuint index,
GLint size,
GLenum type,
GLsizei stride,
const void * pointer);
void glVertexAttribLPointer(GLuint index,
GLint size,
GLenum type,
GLsizei stride,
const void * pointer);
参数
index
指定需要被修改的 通用顶点 attribute
属性的索引。
size
指定每个通用顶点 attribute
属性的 分量数量。必须是 1,2,3,4。或是 调用 glVertexAttribPointer
函数的话,可以使用符号常量 GL_BGRA
,初始化值为 4。
type
指定数组中每个 分量的数据类型。符号常量 GL_BYTE
, GL_UNSIGNED_BYTE
, GL_SHORT
, GL_UNSIGNED_SHORT
, GL_INT
, 和 GL_UNSIGNED_INT
在函数 glVertexAttribPointer 和 glVertexAttribIPointer 都是可接受的。而GL_HALF_FLOAT
, GL_FLOAT
, GL_DOUBLE
, GL_FIXED
, GL_INT_2_10_10_10_REV
, GL_UNSIGNED_INT_2_10_10_10_REV
and GL_UNSIGNED_INT_10F_11F_11F_REV
是在 glVertexAttribPointer 函数可接受的。GL_DOUBLE
在 glVertexAttribLPointer 也是可接受的。初始化值为 GL_FLOAT
。
normalized
对于 glVertexAttribPointer 函数,指定是否 fixed-point(定点)数据的数值需要归一化(GL_TRUE
),或是直接当做 fixed-point 数值来访问(GL_FALSE
)。
stride
指定通用的顶点 attribute
属性的字节偏移。如果 stride
为0,通用顶点 attribute
将被认为是紧密在数组中排列的。初始值为 0.
pointers
在数据类型为 GL_ARRAY_BUFFER
的储存缓存目标,指定第一个数组中通用顶点 attribute
的第一个分量的偏移
描述
glVertexAttribPointer ,glVertexAttribIPointer ,和 glVertexAttribLPointer 指定渲染时的通用顶点 attribute 属性数组的 index 位置定位与数据格式。size 指定每个顶点 attribute
分量的数量,必须为 1,2,3,4或是 GL_BGRA
。 type 指定每个分量的数据类型,和 stride 指定一个 attribute
的字节长度,允许 vertices 顶点与 attribute 属性打包在一个单独的数组或是分开的数组。
对于 glVertexAttribPointer 函数,如果 normalized 设置为 GL_TRUE
,代表储存的整型数值格式都会映射在[-1,1](有符号值)或是[0,1](无符号值)的值,当它们访问是转为 floating point(浮点)。否则,数值将被直接转换为没有归一化的浮点型。
对于 glVertexAttribIPointer 函数,仅有整数型的 GL_BYTE
, GL_UNSIGNED_BYTE
, GL_SHORT
, GL_UNSIGNED_SHORT
, GL_INT
, GL_UNSIGNED_INT
是可接受的。数值都会一直当做整型数值。
glVertexAttribLPointer 指定通用顶点 attribute
数组中的变量都定义为 64位双精度的分量。type 必须为 GL_DOUBLE
。index,size 和 stride 与 glVertexAttribPointer 和 glVertexAttribIPointer 一样。
如果 pointer 为非空,一个非0的缓存对象命名必须绑定 GL_ARRAY_BUFFER
目标(查看 glBindBuffer),否则将生成一个错误。pointer 被当作是储存数据缓存对象的字节偏移。
启用 与 禁用 通用顶点 attribute
数组,调用 glEnableVertexAttribArray 和 glDisableVertexAttribArray,参数使用 index。如果启用了,通用顶点 attribute
数组可用于 glDrawArrays, glMultiDrawArrays, glDrawElements, glMultiDrawElements, 或是 glDrawRangeElements 的调用。
注意
禁用时,每个通用顶点 attribute
数组都是初始化过的,且无法调用 glDrawElements, glDrawRangeElements, glDrawArrays, glMultiDrawArrays, or glMultiDrawElements。
GL_UNSIGNED_INT_10F_11F_11F_REV
仅在 GL 版本 4.4 或以上的才有效。
错误
如果 index 参数大于或等于 GL_MAX_VERTEX_ATTRIBS
,则生成 GL_INVALID_VALUE
错误。
如果 size 参数不是1,2,3,4或是对于 glVertexAttribPointer 函数而是用的 GL_BGRA
,则生成 GL_INVALID_VALUE
错误。
如果 type 参数是个无效值,则生成 GL_INVALID_ENUM
错误。
如果 stride 参数是负数,则生成 GL_INVALID_VALUE
错误。
如果 size 参数是是 GL_BGRA
,且 type 不是 GL_UNSIGNED_BYTE
,GL_INT_2_10_10_10_REV
或是 GL_UNSIGNED_INT_2_10_10_10_REV
,则生成 GL_INVALID_OPERATION
错误。
如果 type 参数是 GL_INT_2_10_10_10_REV
或是 GL_UNSIGNED_INT_2_10_10_10_REV
,且 size 参数不是 4 或 GL_BGRA
,则生成 GL_INVALID_OPERATION
错误。
如果 type 为 GL_UNSIGNED_INT_10F_11F_11F_REV
且,size 参数不是 3,则生成 GL_INVALID_OPERATION
错误。
如果 size 是 GL_BGRA
且 normalized 是 GL_FALSE
,则调用 glVertexAttribPointer 函数时生成 GL_INVALID_OPERATION
错误。
如果 0 值绑定到 GL_ARRAY_BUFFER
类型的缓存对象,且 pointer 参数不为 NULL
,则生成 GL_INVALID_OPERATION
错误。