我想用元素索引填充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
,还是违反规范?
答案 0 :(得分:3)
缓冲对象绝不与特定目标直接关联。绑定缓冲区以进行修改时,可以将其绑定到any valid buffer target。您可以将其绑定到GL_COPY_READ_BUFFER
,只需在其上调用glBufferSubData
即可。您也可以使用GL_ARRAY_BUFFER
,但在这种情况下,最好使用无害的绑定点。