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