【问题标题】:Max size for Vertex Buffer Objects (OpenGL ES 2.0)顶点缓冲区对象的最大大小 (OpenGL ES 2.0)
【发布时间】:2011-11-14 05:12:02
【问题描述】:

绑定到 GL_ARRAY_BUFFER 或 GL_ELEMENT_ARRAY_BUFFER 的顶点缓冲区对象是否有最大大小???

最初,我正在绘制一个由 16 个子网格组成的网格。对于每个子网格,我创建了一个顶点缓冲区,在渲染阶段,我调用了 glDrawElements。 这在 iOS 模拟器上运行良好,但是当我尝试渲染到我的设备时,屏幕不断闪烁并且网格不显示。

然后我做了一些阅读,发现您不应该在渲染阶段调用 glDrawElements 太多次。 我试图将所有子网格合并到一个顶点缓冲区中。 绑定到 GL_ARRAY_BUFFER 的缓冲区包含 3969 个顶点,其中每个顶点包含 20 个浮点数。所以这个缓冲区的大小是 317520 字节。 绑定到 GL_ELEMENT_ARRAY_BUFFER 的索引是 16425 短裤。因此这个缓冲区的大小是 32850 字节。

在 OpenGL wiki 上,它说“根据一个 nVidia 文档,1MB 到 4MB 是一个不错的大小”,用于顶点缓冲区对象。

绑定每个缓冲区对象并调用glDrawElements后,我打印出glGetError的结果,我没有看到任何错误。 但是,我的网格没有正确显示。似乎只有第一个网格被正确绘制。我实现这个的方式有什么可疑的吗?我不想让这个问题太久,所以如果您需要回答这个问题的任何额外信息,请告诉我。如果理论上没有什么看起来不对的地方,也许我只是在实现它时犯了一个错误。

【问题讨论】:

    标签: opengl-es buffer vbo vertex


    【解决方案1】:

    我知道现在回答这个问题为时已晚。但是,我希望答案对某人有所帮助!

    基于 OpenG 图形系统规范(版本 4.5(核心配置文件)- 2015 年 5 月 28 日),它指出: “除了顶点数组的大小之外,可以指定的顶点数量没有限制。”请参阅第 322 页。

    对不起,正如尼可波拉斯在这里提到的: https://stackoverflow.com/a/7369392/4228827

    干杯, 天真

    【讨论】:

    • OpenGL 4.5 规范与 OpenGL ES 2.0 有什么关系?
    • 其实OpenGL ES是基于OpenGL 2.0的图形系统,为什么要引用它。但我同意,我应该参考 OpenGL ES 规范!感谢您的评论。
    【解决方案2】:

    看这个:

    http://www.sunsetlakesoftware.com/2008/08/05/lessons-molecules-opengl-es

    使用较小的数据类型存在一些自然限制,例如使用 short 作为索引显然是 ~65000。

    但更重要的是,链接中有一些额外的帮助,这是一个非常好的教程,并且包含一些轶事证据表明短路到自然功能限制的工作。

    【讨论】:

      【解决方案3】:

      有一个最大尺寸,即 GPU 总是可以发出 GL_OUT_OF_MEMORY 错误。但除此之外,没有。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多