填充元素数组缓冲区而不修改VAO(4.1)

时间:2017-07-13 23:43:32

标签: opengl

我想用元素索引填充VBO,然后将其绑定到VAO上的GL_ELEMENT_ARRAY_BUFFER插槽。

明显(但错误的)代码是:

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementArrayBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, ...);

但是会改变当前的VAO,或者如果没有VAO绑定可能会导致错误。我不想这样做,我只想填充缓冲区,然后在稍后使用它

如果这是OpenGL 4.5(osx不支持),那么解决方案就是使用glNamedBufferData,而不是将其绑定到以后。

有合理的解决方法吗?

我可以使用GL_ARRAY_BUFFER插槽填充缓冲区,然后将其绑定到GL_ELEMENT_ARRAY_BUFFER,还是违反规范?

1 个答案:

答案 0 :(得分:3)

缓冲对象绝不与特定目标直接关联。绑定缓冲区以进行修改时,可以将其绑定到any valid buffer target。您可以将其绑定到GL_COPY_READ_BUFFER,只需在其上调用glBufferSubData即可。您也可以使用GL_ARRAY_BUFFER,但在这种情况下,最好使用无害的绑定点。