您当前的位置: 首页 >  Jave.Lin

OpenGL API - glVertexAttribPointer

Jave.Lin 发布时间:2020-06-05 21:26:35 ,浏览量:4

文章目录
  • 名称
  • 原型
  • 参数
  • 描述
  • 注意
  • 错误
在这里插入图片描述

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 在函数 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_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 参数不是 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 错误。

关注
打赏
1688896170
查看更多评论

Jave.Lin

暂无认证

  • 4浏览

    0关注

    546博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.1014s