【发布时间】:2018-02-18 09:43:58
【问题描述】:
我在理解 VAO 和绑定到 GL_ELEMENT_ARRAY_BUFFER(我们称之为 EBO)的缓冲区之间的关联时遇到了问题。我知道它是 VAO 状态的一部分,但不同于与 glVertexAttribPointer 调用一起使用的缓冲区(这些缓冲区只是被 VAO 记住为属性存储而无需绑定它们 - 如果我理解正确的话)。
在this 讨论中声称:
与 GL_ARRAY_BUFFER 不同,VAO 存储 GL_ELEMENT_ARRAY_BUFFER 的当前绑定。调用 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER) 在当前绑定的 VAO 中存储对指定缓冲区的引用。 glDrawElements() 等从存储在当前绑定的 VAO 中的缓冲区中获取顶点索引。因此,在 VAO 之间切换会在元素数组之间切换。
但是我是否需要在 VAO 的绑定和解除绑定之间调用 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER) 以确保它将“保存”它的状态,或者 VAO 在创建 VAO 时只会采用当前绑定的 EBO?
我也不清楚上面引用的答案是否 VAO 只是“知道”(作为属性存储缓冲区)必须从哪些缓冲区索引 (glDrawElements) 中获取,或者 VAO 在绑定 VAO 时是否绑定了正确的 EBO?
编辑:我的第一个问题已得到here 的回答,但我相信第二个问题已由@Rabbid76 回答。
【问题讨论】: