Cri*_*iss 5 language-agnostic opengl
我在理解VAO和绑定到的缓冲区之间的关联时遇到了问题GL_ELEMENT_ARRAY_BUFFER(我们称其为EBO)。我知道它是VAO状态的一部分,但与glVertexAttribPointer调用一起使用的缓冲区有所不同(那些缓冲区只是被VAO记住,因为属性存储不需要绑定它们-如果我理解正确的话)。
在此讨论中,它要求:  
与GL_ARRAY_BUFFER不同,VAO存储GL_ELEMENT_ARRAY_BUFFER的当前绑定。调用glBindBuffer(GL_ELEMENT_ARRAY_BUFFER)将对指定缓冲区的引用存储在当前绑定的VAO中。glDrawElements()等从当前绑定的VAO中存储的缓冲区中获取顶点索引。因此,在VAO之间切换会在元素数组之间切换。
但是我是否需要glBindBuffer(GL_ELEMENT_ARRAY_BUFFER)在VAO的绑定和解除绑定之间进行调用以确保它会“保存”在其状态中,或者在创建VAO时VAO只会获取当前绑定的EBO?
同样,上面引述的答案对我来说也不清楚,即VAO是否只是“知道”(作为属性存储缓冲区)glDrawElements必须从哪个缓冲区索引()中获取,还是当VAO绑定时VAO绑定了正确的EBO?  
编辑:我的第一个问题已在此处回答,但是我相信第二个问题已由@ Rabbid76回答。
\n\n\n我需要
\nglBindBuffer(GL_ELEMENT_ARRAY_BUFFER)在VAO的绑定和解除绑定之间调用吗?
OpenGL规范(第 10.3 章 VERTEX ARRAYS)明确指出:
\n\n\n\n\n顶点数组对象是通过将 GenVertexArrays 返回的名称与命令
\nvoid BindVertexArray( uint array );arrayis 顶点数组对象名称绑定来创建的。
生成的顶点数组对象是一个新的状态向量,包含所有状态并具有表 23.3 和 23.4 中列出的相同初始值。
\nBindVertexArray还可以用于绑定现有的顶点数组对象。\n 如果绑定成功,则不会更改绑定的顶点数组\n 对象的状态,并且任何先前的绑定都会被破坏。
表 23.3 和 23.4 包含ELEMENT_ARRAY_BUFFER_BINDING。
\n\n这意味着,必须GL_ELEMENT_ARRAY_BUFFER在绑定顶点数组对象之后glBindVertexArray才能绑定 ( )。
\n对象的“名称”GL_ELEMENT_ARRAY_BUFFER存储在顶点数组对象状态向量中。
如果顶点数组对象已被解除绑定并再次绑定,则GL_ELEMENT_ARRAY_BUFFER也已知并再次绑定。
注意,glBufferData为缓冲区对象创建一个新的数据存储。glBufferData删除任何现有数据存储,并设置缓冲区对象\xe2\x80\x99s 状态变量的值。这意味着,数据将与缓冲区对象关联,直到关联新数据为止。- 请参阅Khronos 参考页glBufferData和OpenGL 4.6 API 兼容性配置文件规范;6.1 创建并绑定缓冲区对象
| 归档时间: | 
 | 
| 查看次数: | 1730 次 | 
| 最近记录: |