顶点缓冲区对象的最大大小(OpenGL ES 2.0)

时间:2011-09-10 02:31:44

标签: opengl-es buffer vbo vertex

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

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

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

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

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

3 个答案:

答案 0 :(得分:4)

存在最大大小,因为GPU总是会发出GL_OUT_OF_MEMORY错误。但除此之外,没有。

答案 1 :(得分:2)

见:

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

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

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

答案 2 :(得分:0)

我知道回答这个问题为时已晚。但是,我希望答案可以帮到某人!

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

对不起,Nicol Bolas也在这里提到: https://stackoverflow.com/a/7369392/4228827

干杯, 纳伊夫