Java 关于EBO如何工作的一点说明(元素数组缓冲区)
我知道EBO可以绑定到VAO,这与其他OpenGL缓冲区对象不同。我还知道,如果绑定EBO时没有绑定VAO,那么EBO将绑定到OpenGL上下文或全局状态。我的问题是,当你将EBO绑定到VAO,然后解除VAO绑定,然后再次绑定EBO时,EBO是绑定到VAO,还是绑定到全球国家,或者两者都绑定?提前感谢您的帮助。来自OpenGL规范: 缓冲区对象是通过将GenBuffers返回的名称绑定到 缓冲区目标。通过调用void[gl]BindBuffer可以实现绑定( 枚举目标,uint缓冲区);目标必须是列出的目标之一 在表中 Bindind缓冲区描述如何使用它。例如,使用target=Java 关于EBO如何工作的一点说明(元素数组缓冲区),java,opengl,lwjgl,Java,Opengl,Lwjgl,我知道EBO可以绑定到VAO,这与其他OpenGL缓冲区对象不同。我还知道,如果绑定EBO时没有绑定VAO,那么EBO将绑定到OpenGL上下文或全局状态。我的问题是,当你将EBO绑定到VAO,然后解除VAO绑定,然后再次绑定EBO时,EBO是绑定到VAO,还是绑定到全球国家,或者两者都绑定?提前感谢您的帮助。来自OpenGL规范: 缓冲区对象是通过将GenBuffers返回的名称绑定到 缓冲区目标。通过调用void[gl]BindBuffer可以实现绑定( 枚举目标,uint缓冲区);目标必须
GL\u ELEMENT\u ARRAY\u BUFFER
将缓冲区绑定为EBO
抽屉元素、DrawRangeElements和抽屉元素静态源
它们的索引来自名称绑定到[GL_]元素的缓冲区对象_
数组缓冲区
因此,使用当前绑定的[elements]缓冲区。
VAO的存储绑定。当您通过glBindVertexArray
再次“激活”VAO时,EBO将再次“自动”绑定
我知道EBO可以绑定到VAO,这与其他OpenGL缓冲区对象不同
首先是一些术语
在OpenGL中,您不会将一个对象绑定到另一个对象。将一个对象附着到另一个对象。“Bind”仅在将对象放入上下文时使用
当您调用glBindBuffer(GL\u ELEMENT\u ARRAY\u BUFFER,…)
时,您正在将缓冲区附加到当前VAO。是的,我知道函数说的是“bind”,它的行为很像一个常规的上下文绑定点,但是OpenGL函数说了很多愚蠢的事情。DSA等价物之所以被称为glVertexArrayElementBuffer
,却看不到“bind”,这是有原因的
我还知道,如果绑定EBO时没有绑定VAO,那么EBO将绑定到OpenGL上下文或全局状态
这是半真半假。在兼容性上下文中,VAO 0是默认的VAO对象。也就是说,glBindVertexArray(0)
是有效的对象。因此,如果在绑定VAO对象0的情况下调用glBindBuffer(GL\u ELEMENT\u ARRAY\u BUFFER,…)
,则将缓冲区附加到VAO 0
在核心上下文中,不存在VAO 0。因此,glBindBuffer(GL\u元素\u数组\u缓冲区,…)
将导致GL\u无效\u操作
错误
我的问题是,当你将EBO绑定到VAO,然后解除VAO绑定,然后再次绑定EBO时,EBO是绑定到VAO,还是绑定到全球国家,或者两者都绑定
缓冲区可以连接到任意数量的VAO。因此,将缓冲区附加到VAO 0的事实不会改变它附加到其他VAO的事实。我知道如何将缓冲区绑定到GL_元素_数组_缓冲区,它“成为一个EBO”。我还知道,如果在绑定“glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,bufferID)”时绑定了VAO,那么绑定会反映在VAOs状态中。我还知道,当我将EBO绑定到VAO,然后解除绑定VAO时,EBO也会解除绑定。我的问题是,如果EBO绑定到VAO,并且VAO未绑定,那么当我使用“glBindBuffer(GL\u ELEMENT\u ARRAY\u buffer,bufferID)”绑定同一个缓冲区时会发生什么。缓冲区将绑定到全局状态、VAO还是两者都绑定?@pdid:“我也知道,当我将EBO绑定到VAO,然后解除绑定VAO时,EBO也将解除绑定。”你还没有真正理解这一部分。将缓冲区对象附加到VAO时,它将附加到VAO,而不是上下文。在这种情况下,如果在未绑定VAO的情况下将缓冲区绑定到元素数组缓冲区会发生什么情况?在这种情况下,如果在未绑定VAO的情况下将缓冲区绑定到GL_元素_缓冲区会发生什么情况?请尝试在设置核心配置文件上下文(非兼容性配置文件)后,在未绑定VAO但绑定EBO的情况下绘制。你会看到的。