我正在设计一个用于快速原型GPU渲染的小型OpenGL抽象层。现在,我正在设计对象模型,用于将缓冲区对象与着色器渲染代码分离。
其目标是使更改(数据和着色代码)变得非常容易,因此我试图减少两者之间显式耦合的数量。
在我的道路上,现在有一件事是有点儿刺痛的,那就是瓦奥。例如,如果我的顶点数据如下所示:
vbo = 1,1,1,1
然后,这些数据实际上可以处理这两个着色器顶点声明:
in float x;
in float y;或
in vec2 position;问题是VAO绑定需要不同。我的结论是,VAO信息与着色器代码的关联比实际对象数据更紧密。
此外,您实际上可以从着色器代码中直接“推断”VAO规范(也就是说,VAO是一种语义,语义是在着色器代码中指定的)。
所以我想,与其将VAO存储在数据对象中,我实际上可以自动推断它并将其存储在着色器对象中。然后每次我画的时候,我从数据对象绑定VBO,从着色器绑定VAO。这样,我可以有相同的VBO工作在不同的着色器。
这很疯狂吗?这从根本上说有什么明显的坏处吗?
发布于 2016-04-06 20:46:18
在最近版本的GL中,通过顶点Attrib绑定和程序接口查询扩展,您所谈到的一般解耦已经成为可能。
实现此功能所需的工作量是值得注意的,但自通用顶点属性(ARB VP1)出现以来,在任何版本的GL中,您肯定不会陷入僵化的顶点数据规范中。由于您已经标记了这个GL4,您可能会发现上面提到的两个核心扩展(这两个扩展都是GL4.3中的核心)很有用。
https://stackoverflow.com/questions/36458958
复制相似问题