【问题标题】:How does glBufferData know which VBO to work on?glBufferData 如何知道要处理哪个 VBO?
【发布时间】:2013-01-05 13:21:32
【问题描述】:

这是用于填充 VBO 的 glBufferData 的正式声明:

void glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);

然而,令人困惑的是,您可以拥有多个 VBO,但此函数不需要特定 VBO 的句柄,那么它如何知道您打算使用哪个 VBO?

target 参数可以是GL_ARRAY_BUFFERGL_ELEMENT_ARRAY_BUFFER,但我的理解是您可以拥有多个这些参数。

类似的glBufferSubData 方法也是如此,该方法旨在随后在 VBO 上调用——它如何知道要处理哪个 VBO?

【问题讨论】:

  • 这不是真正的重复,而是回答一个,回答另一个
  • 如果它不是真的重复,它不应该投票关闭作为重复。您也不能假设提问者看到两个不同问题之间的直接关系。你是个严厉的人,对 2 个合理的问题投了反对票。
  • 看来OpenGL 4.5版引入了glNamedBufferData

标签: opengl opengl-es opengl-es-2.0


【解决方案1】:

这是一个common pattern in OpenGL,用于将对象绑定到目标并通过发出不带句柄的函数调用对其执行操作。这同样适用于纹理。

【讨论】:

    【解决方案2】:

    使用缓冲区对象的 OpenGL 操作会使用已被最近一次调用所用目标上的 glBindBuffer 绑定的缓冲区。

    【讨论】:

      【解决方案3】:

      glBindBuffer 是一个将给定缓冲区公开为绑定的函数。这样一个glBufferData 然后通过当前绑定的缓冲区对象通过副作用访问它。

      【讨论】:

        猜你喜欢
        • 2015-05-21
        • 1970-01-01
        • 1970-01-01
        • 2021-10-04
        • 1970-01-01
        • 1970-01-01
        • 2018-05-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多