- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法理解 VAO 和绑定(bind)到 GL_ELEMENT_ARRAY_BUFFER
的缓冲区之间的关联。 (我们称之为 EBO)。我知道它是 VAO 状态的一部分,但不同于与 glVertexAttribPointer
一起使用的缓冲区。调用(这些缓冲区被 VAO 简单地记住为属性存储,省略了绑定(bind)它们的需要 - 如果我理解正确的话)。
在 this讨论它声称:
Unlike GL_ARRAY_BUFFER, a VAO store the current binding for GL_ELEMENT_ARRAY_BUFFER. Calling glBindBuffer(GL_ELEMENT_ARRAY_BUFFER) stores a reference to the specified buffer in the currently-bound VAO. glDrawElements() etc take the vertex indices from the buffer stored in the currently-bound VAO. So switching between VAOs switches between element arrays.
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER)
吗?在绑定(bind)和取消绑定(bind) VAO 以确保它将“保存”它的状态或 VAO 将在创建 VAO 时仅采用当前绑定(bind)的 EBO?
glDrawElements
)或者 VAO 在绑定(bind) VAO 时绑定(bind)正确的 EBO?
最佳答案
如果您设置正确,则在绘制时您应该只绑定(bind) VAO。这就是重点,避免为每个几何图形重复调用 GL 驱动程序的 CPU 开销。
在初始设置期间,您应该创建和绑定(bind) VAO,然后绑定(bind)所有属性缓冲区并使用 glVertexAttribPointer 描述它们,使用 glEnableVertexAttribArray 启用它们,最后绑定(bind) GL_ELEMENT_ARRAY_BUFFER。之后,我会将 VAO 绑定(bind)为 null,这样您就不会在以下几行中意外绑定(bind)其他内容。
(注意,属性缓冲区本身的glBindBuffer并不是直接记录到VAO中的,而是在glVertexAttribPointer的调用处推断出来的。也就是说,调用glVertexAttribPointer时当前绑定(bind)到GL_ARRAY_BUFFER的东西就是VAO的顶点拉取源.)
在渲染循环期间,您应该绑定(bind)之前创建的不同 VAO。
这有点令人困惑,因为在实践中,有时绑定(bind) VAO 意味着“我想开始录制一个小宏”(在初始设置时),有时绑定(bind) VAO 意味着“我希望你播放我录制的那个宏中的所有绑定(bind)更早”(在渲染时)。它在原始 RFC 中被描述为:
The currently bound vertex array object is used for all commands
which modify vertex array state, such as VertexAttribPointer and
EnableVertexAttribArray; all commands which draw from vertex arrays,
such as DrawArrays and DrawElements; and all queries of vertex
array state.
关于opengl - VAO 和 GL_ELEMENT_ARRAY_BUFFER 关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46133849/
我目前是 OpenGL ES 2.0 领域的新手,想尽可能多地了解绑定(bind)、缓冲区、着色器等。 到目前为止,我只是想了解 GL_ELEMENT_ARRAY_BUFFER 之间的区别。和 GL_
在 OpenGL (OpenGL ES 2.0) 中,我可以为不同的 GL_ARRAY_BUFFER 缓冲区使用多个 GL_ELEMENT_ARRAY_BUFFER 吗?我正在阅读“OpenGL ES
我无法理解 VAO 和绑定(bind)到 GL_ELEMENT_ARRAY_BUFFER 的缓冲区之间的关联。 (我们称之为 EBO)。我知道它是 VAO 状态的一部分,但不同于与 glVertexA
每当我使用 GL_ELEMENT_ARRAY_BUFFER 绘制对象时,GLFW 都会在 glfwSwapBuffers(); 上引发段错误 这是有问题的代码: public Mesh( float[
我确信如果您通过 glBindBuffer() 绑定(bind)一个缓冲区,您可以安全地假设它保持绑定(bind)状态,直到目标通过另一次调用 glBindBuffer()。因此,当我发现调用 glB
当前绑定(bind)到 OpenGL 中的 GL_ELEMENT_ARRAY_BUFFER 目标的缓冲区是包含在顶点数组对象(此处为 VAO)中的状态的一部分。根据 OpenGL 4.4 核心配置文件
我有一个错误,我花了很长时间才修复。在我评论以下行之前,我一直收到 EXC_BAD_ACCESS 和对 memmove 错误的引用而没有任何进一步的描述: [自加载着色器]; glGenVertexA
我有一个初始化我的 VBO/VAO 的方法: glBindBuffer(GL_ARRAY_BUFFER, mVBO_VertexShader); glBufferDat
我是一名优秀的程序员,十分优秀!