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



我想用元素索引填充 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,还是违反规范?

缓冲区对象与特定目标没有直接关联。绑定缓冲区以进行修改时,可以将其绑定到任何有效的缓冲区目标。您可以将其绑定到GL_COPY_READ_BUFFER只是为了调用glBufferSubData。您也可以使用GL_ARRAY_BUFFER,但对于这种情况,最好使用无害的绑定点。

最新更新