12

绑定到 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 的结果,我没有看到任何错误。但是,我的网格没有正确显示。似乎只有第一个网格被正确绘制。我实现这个的方式有什么可疑的吗?我不想让这个问题太久,所以如果您需要回答这个问题的任何额外信息,请告诉我。如果理论上没有什么似乎是错误的,那么也许我只是在实施它时犯了一个错误。

4

3 回答 3

5

有一个最大尺寸,从某种意义上说,GPU 总是可以发出 GL_OUT_OF_MEMORY 错误。但除此之外,没有。

于 2011-09-10T03:20:09.653 回答
2

看到这个:

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

使用较小的数据类型有一些自然限制,例如使用短裤作为索引显然 ~65000。

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

于 2011-09-29T05:51:17.747 回答
2

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

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

抱歉,正如 Nicol Bolas 在这里提到的: https ://stackoverflow.com/a/7369392/4228827

干杯,奈夫

于 2016-01-10T15:34:25.993 回答