我想用元素索引填充 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
,但对于这种情况,最好使用无害的绑定点。