我正在为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数据导致崩溃)。
该程序在我的桌面上运行正常。不幸的是,我没有任何其他可以测试我的应用程序的移动设备。
答案 0 :(得分:0)
OpenGL ES仅支持无符号短(16位)作为索引的数据类型,因此如果您使用索引数组,则超过该限制。