OpenGL API - glVertexAttribPointer


在这里插入图片描述

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glVertexAttribPointer.xhtml

OpenGL API - 笔记汇总

名称

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 在函数 glVertexAttribPointerglVertexAttribIPointer 都是可接受的。而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_DOUBLEglVertexAttribLPointer 也是可接受的。初始化值为 GL_FLOAT
normalized
对于 glVertexAttribPointer 函数,指定是否 fixed-point(定点)数据的数值需要归一化(GL_TRUE),或是直接当做 fixed-point 数值来访问(GL_FALSE)。
stride
指定通用的顶点 attribute 属性的字节偏移。如果 stride 为0,通用顶点 attribute 将被认为是紧密在数组中排列的。初始值为 0.
pointers
在数据类型为 GL_ARRAY_BUFFER 的储存缓存目标,指定第一个数组中通用顶点 attribute 的第一个分量的偏移

描述

glVertexAttribPointerglVertexAttribIPointer ,和 glVertexAttribLPointer 指定渲染时的通用顶点 attribute 属性数组的 index 位置定位与数据格式。size 指定每个顶点 attribute 分量的数量,必须为 1,2,3,4或是 GL_BGRAtype 指定每个分量的数据类型,和 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_DOUBLEindexsizestrideglVertexAttribPointerglVertexAttribIPointer 一样。

如果 pointer 为非空,一个非0的缓存对象命名必须绑定 GL_ARRAY_BUFFER 目标(查看 glBindBuffer),否则将生成一个错误。pointer 被当作是储存数据缓存对象的字节偏移。

启用 与 禁用 通用顶点 attribute 数组,调用 glEnableVertexAttribArrayglDisableVertexAttribArray,参数使用 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_BYTEGL_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 参数不是 4GL_BGRA,则生成 GL_INVALID_OPERATION 错误。

如果 typeGL_UNSIGNED_INT_10F_11F_11F_REV 且,size 参数不是 3,则生成 GL_INVALID_OPERATION 错误。

如果 sizeGL_BGRAnormalizedGL_FALSE,则调用 glVertexAttribPointer 函数时生成 GL_INVALID_OPERATION 错误。

如果 0 值绑定到 GL_ARRAY_BUFFER 类型的缓存对象,且 pointer 参数不为 NULL,则生成 GL_INVALID_OPERATION 错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值