确定发送到VBO的数据限制?

时间:2012-07-02 03:51:49

标签: c++ opengl-es powervr-sgx

我正在为Playbook编写一个3D应用程序,它有一个PowerVR SGX 540.我注意到如果我通过opengl在VBO中填充了足够的数据,我可能会导致设备崩溃(不仅仅是应用程序,而是整个设备,需要硬重启)。为了引起崩溃,我发送了一个包含~300k三角形和~150k顶点的模型的数据。我也为顶点发送了普通数据。

我发现如果我发送的数据较少,则不会出现问题(尝试使用半个三角形和顶点的另一个模型)。此外,如果我使用顶点数组(虽然它非常慢),问题不会发生。

我想知道:

  • 我看到的是移动硬件的常见结果吗?也就是说,是一个具有150k顶点和法线矫枉过正的300k三模型?

  • 我可以在测试一堆不同的型号之外检查我有多少可用于VBO的内存(从崩溃中恢复设备需要五分钟)?

  • 还有其他可能导致此问题吗?我提供了一些其他信息:

我正在使用Qt作为我的GUI,并在将它绘制到GUI之前将3D场景绘制到FBO(我没有检查是否通过创建EGL窗口重新创建所有这些而没有UI,并且绘制到重新创建问题 - 这需要一段时间)。

为了验证我不是很难使用OpenGL,我尝试使用原始的OpenGL调用来处理所有的3D内容,并使用OpenSceneGraph完成所有操作。两种方法都以完全相同的方式失败(VBO使用较少的数据,顶点数组工作,增加的VBO数据导致崩溃)。

该程序在我的桌面上运行正常。不幸的是,我没有任何其他可以测试我的应用程序的移动设备。

1 个答案:

答案 0 :(得分:0)

OpenGL ES仅支持无符号短(16位)作为索引的数据类型,因此如果您使用索引数组,则超过该限制。