首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GL_CURRENT_VERTEX_ATTRIB - doc澄清

GL_CURRENT_VERTEX_ATTRIB - doc澄清
EN

Stack Overflow用户
提问于 2020-09-01 13:32:46
回答 1查看 106关注 0票数 2

OpenGL 4文档说:

GL_CURRENT_VERTEX_ATTRIB params返回四个值,它们表示索引指定的泛型顶点属性的当前值。泛型顶点属性0是唯一的,因为它没有当前状态,所以如果索引为0,就会产生错误。所有其他泛型顶点属性的初始值为(0,0,0,1)。

在实践中,“如果索引为0将产生错误”是什么意思?

让我们假设我有一个顶点着色器,其布局如下:

代码语言:javascript
复制
layout (location = 0) in vec3 pos;

我想设置一个泛型(常量)顶点属性。我是否可以使用索引为0的glVertexAttrib3f?

代码语言:javascript
复制
glVertexAttrib3f(0, 1, 0, 0);

稍后,我想以这样的方式检查当前顶点属性:

代码语言:javascript
复制
glGetVertexAttribfv(0, GL_CURRENT_VERTEX_ATTRIB, data);

是对的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-01 15:01:21

文档中的文本相对于核心OpenGL 3.2或更高版本是不正确的。在OpenGL的核心配置文件中,属性0具有状态,可以查询该状态。

在高达4.5 (以及3.0之前的所有GL版本)的兼容性配置文件中,属性0没有状态。4.5更改兼容性配置文件以提供属性0状态。实际上,规范具体地将此更改称为:

这是为了增强与核心配置文件和OpenGL ES的互操作性而更改兼容配置文件的行为。

前面已经说过,您真的应该假装泛型属性值不存在。由于它们很少被使用,它们的性能特性是未知的。而且它们的值是短暂的;如果您设置了一个值,呈现了某个东西,然后呈现了一个对该属性使用数组的值,那么您以前设置的值将不会被保留,需要您再次设置它。这与大多数OpenGL状态完全不同。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63688776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档