GL_CURRENT_VERTEX_ATTRIB params返回四个值,它们表示索引指定的泛型顶点属性的当前值。泛型顶点属性0是唯一的,因为它没有当前状态,所以如果索引为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);是对的吗?
发布于 2020-09-01 15:01:21
文档中的文本相对于核心OpenGL 3.2或更高版本是不正确的。在OpenGL的核心配置文件中,属性0具有状态,可以查询该状态。
在高达4.5 (以及3.0之前的所有GL版本)的兼容性配置文件中,属性0没有状态。4.5更改兼容性配置文件以提供属性0状态。实际上,规范具体地将此更改称为:
这是为了增强与核心配置文件和OpenGL ES的互操作性而更改兼容配置文件的行为。
前面已经说过,您真的应该假装泛型属性值不存在。由于它们很少被使用,它们的性能特性是未知的。而且它们的值是短暂的;如果您设置了一个值,呈现了某个东西,然后呈现了一个对该属性使用数组的值,那么您以前设置的值将不会被保留,需要您再次设置它。这与大多数OpenGL状态完全不同。
https://stackoverflow.com/questions/63688776
复制相似问题