【发布时间】:2020-09-01 23:01:21
【问题描述】:
GL_CURRENT_VERTEX_ATTRIB
params 返回四个值,代表当前值 由索引指定的通用顶点属性。通用顶点属性 0 是唯一的,因为它没有当前状态,因此会出现错误 如果 index 为 0,则生成。所有其他泛型的初始值 顶点属性为 (0,0,0,1)。
“如果索引为0会产生错误”在实践中是什么意思?
假设我有一个具有以下布局的顶点着色器:
layout (location = 0) in vec3 pos;
我想设置一个通用(常量)顶点属性。 我可以使用索引等于 0 的 glVertexAttrib3f 吗?
glVertexAttrib3f(0, 1, 0, 0);
稍后我想以这种方式检查当前顶点属性:
glGetVertexAttribfv(0, GL_CURRENT_VERTEX_ATTRIB, data);
对吗?
【问题讨论】:
-
"[...] Generic vertex attribute 0 is unique [...]" - 你能说明你在规范中找到这句话的地方吗? (最新:OpenGL 4.6 API Compatibility Profile Specification)
-
@BDL ...但这不是规范。我在规范中找不到这部分。 (10.5 顶点数组和顶点数组对象查询)
-
@Rabbid76:我在规范中也找不到它。奇怪的是它在文档中被提及。
-
"我想设置一个通用(常量)顶点属性。" 这不是你应该想要做的事情。最好假装这些 API 不存在。
-
作为一个小说明:参考页面中该语句的来源可以在GL 2.0 spec(第259页)中找到:“查询
CURRENT VERTEX ATTRIB返回通用属性的当前值索引。在这种情况下,如果索引为零,则会生成错误INVALID OPERATION,因为没有通用属性零的当前值。”属性索引 0 的特殊处理在 2.x 和 4.x 之间多次修改。众所周知,参考页面在 sublte 更新方面非常糟糕。
标签: opengl