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

标签 c++ opengl-es powervr-sgx

我正在为 Playbook 编写一个 3d 应用程序,它有一个 PowerVR SGX 540。我注意到如果我通过 opengl 在 VBO 中填充足够的数据,我可能会导致设备崩溃(不仅仅是应用程序,还有整个设备,需要硬重启)。为了导致崩溃,我发送了一个具有约 30 万个三角形和约 15 万个顶点的模型的数据。我也为顶点发送了正常数据。

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

我想知道:

  • 我看到的是移动硬件的常见结果吗?也就是说,具有 150k 个顶点和法线的 300k tri 模型是否过度杀伤?

  • 除了测试一堆不同的模型大小(从崩溃中恢复设备需要五分钟)之外,我能否检查我有多少内存可用于 VBO 使用?

  • 是否还有其他原因导致此问题?我提供了一些额外的信息:

我将 Qt 用于我的 GUI,并在将 3d 场景绘制到 GUI 之前将其绘制到 FBO(我还没有检查是否通过创建 EGL 窗口并绘制到重新创建问题 - 这需要一段时间)。

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

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

最佳答案

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

关于c++ - 确定发送到 VBO 的数据限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11287604/

相关文章:

java - Android:使用 OpenGL ES 显示文本

ios - 对 UIImage 应用 Sepia、RGB、GrayScale 效果

ios - 如何为 cpp 类创建 objective-c 委托(delegate)?

c++ - 在 lambda 中捕获参数包时,一些整数会丢失它们的值

c++ - 模板、多态性、抽象基类指针和运行时转换

c++ - 匿名函数, "Parse Issue: Expected Expression"

iphone - 对于某些纹理尺寸,glFramebufferTexture2D 在 iPhone 上失败

ios - pvrtextool cl 不生成标准 header

ios - PowerVR GPU 如何提供深度缓冲?

c++ - 在全局函数中获取对象地址或 NULL 的统一方法