Opengl VAO如何保持缓冲区绑定?
我很难理解VAO到底是如何处理缓冲区映射的。 我所做的可以用以下伪代码描述:Opengl VAO如何保持缓冲区绑定?,opengl,vertex-buffer,Opengl,Vertex Buffer,我很难理解VAO到底是如何处理缓冲区映射的。 我所做的可以用以下伪代码描述: SetUp: BindVAO BindArrayBuffer glBufferData(GL_ARRAY_BUFFER, ExpectedMaxCount, NULL, GL_DYNAMIC_DRAW);//Allocate storage glEnableVertexAttribArray glVertexAttribPointer BindElementBuffer Allocate
SetUp:
BindVAO
BindArrayBuffer
glBufferData(GL_ARRAY_BUFFER, ExpectedMaxCount, NULL, GL_DYNAMIC_DRAW);//Allocate storage
glEnableVertexAttribArray
glVertexAttribPointer
BindElementBuffer
Allocate storage (no data yet)
UnbindVAO
UnbindArrayBuffer
UnbindElementBuffer
Draw:
SubArrayAndElementDataIfNeeded
BindVAO
DrawElements
GL\u数组\u缓冲区陷阱。GL\u ARRAY\u BUFFER
绑定只与三个函数有关:(查看模式?)。这些是查看该绑定的唯一函数。它们所做的是获取在调用这些函数时绑定的缓冲区,并将该缓冲区与当前VAO关联<代码>GL_数组_缓冲区
不是VAO状态的一部分。只有在调用这三个函数之一时,缓冲区对象才会与VAO关联。一旦您进行了该调用,您就可以绑定任何您想要的GL\u ARRAY\u BUFFER
GL\u元素\u数组\u缓冲区是VAO状态的一部分
VAO设置期间是否必须分配缓冲内存?如果在安装后调用BufferData,VAO会无效吗
从技术上讲,没有,但最好在缓冲区有存储之前不使用缓冲区。尤其是当它们是静态缓冲区时。在OpenGL中没有“设置”这样的东西。虽然必须将VAO绑定回去,但您可以自己定义何时设置。@theAmateurProgrammer:从概念上讲,您正在设置一个VAO,为什么不将其放入一个单独的函数中?当VAO的缓冲区关联(由glVertexAttrib*指针设置)被破坏时?解除绑定VAO后?或者只是绑定到另一个数组缓冲区?@id256:我不知道你的问题是什么意思。只有通过后续调用glVertexAttrib*指针
,关联才会被“破坏”。VAO的全部意义在于它保留了这种状态,这种状态是在VAO中设置的。所以,只有当你故意明确地改变它时,它才会丢失。是的,我显然应该用双引号“break”。谢谢你的解释。