我自己一直在学习OpenGL,而OpenGL中的一些概念让我很困惑。
我知道VBO是缓冲区驻留在服务器端的未描述数据,VAO是VBO的描述,而Program是用于在屏幕上显示网格的着色器渲染管道。
令我困惑的是他们三者之间的关系,正如我所看到的,在创建和填充VBO之后,VAO是为程序属性规范生成的。这是否意味着每当我们绑定VAO时,我们必须提前使用某个程序?如果这不正确,请纠正我。以及关于这些OpenGL概念之间交互的一些简要介绍会很棒。
谢谢
答案 0 :(得分:2)
这意味着每当我们绑定VAO时,我们必须提前使用某个程序
VAO描述(除其他事项外)format of vertex data。作为该格式的一部分,它描述哪些数据属于哪些顶点属性。它通过分配属性“locations”来实现。
您的顶点着色器的数量为user-defined input variables。这些输入都分配了一个“位置”。
渲染时,顶点格式根据匹配的位置指定填充哪些VS输入。因此,您不必将VAO的使用限制为特定的VS.但是,您必须将VAO与兼容的程序一起使用。输入与格式位置匹配的输入。
如果您的VAO指定属性位置0,1和4将填充浮点数据,那么您与该VAO一起使用的任何VS必须与之兼容。它在技术上不必实际使用位置0,1或4,但如果确实如此,则必须使用浮点输入值。格式提供的任何未使用的位置都将被有效忽略(尽管它们几乎肯定仍会从缓冲区中读取)。
如果VAO将浮点数据放在属性0,1和4中,但VS期望属性1中的无符号整数数据,那么就会出现问题。