2011-05-26 42 views

回答

1

OpenGL ES命令没有真正的最大值,但每个命令都有一些与之相关的开销。应该消除冗余状态更改,并且应该通过将几何分组按照使用一种状态的所有内容进行绘制的方式来减少昂贵的状态更改,然后再进行下一步。 Apple在其OpenGL ES Programming Guide for iOS中对此有一些建议。

但是,我很少发现OpenGL ES命令是我的应用程序中显着性能下降的原因。更大的问题往往是由于几何体的大小或者任何着色器的复杂性或其他适用于场景的效果。我分享了一些我曾经申请过的用于减小几何尺寸here的技巧,以及一个用于剖析着色器here的工具,但我自己仍然是learning the ins-and-outs of shader tuning

如果您确实在意微调您所做的OpenGL调用,那么使用的最佳性能分析工具是Xcode 4附带的新OpenGL ES分析工具。我将展示该工具的几个示例屏幕在我的回答here中,我用它来识别一些冗余设置。它会为你找到这些电话,并指出它们在你的代码中的位置。您还可以使用Time Profiler来查看在渲染帧时是否对CPU施加了更多的负载,并追踪违规代码行。

+0

我做了试图使用分析工具,但当我这样做的工具崩溃 – kd3D 2011-05-30 12:33:38

+0

时间剖析器帮助现在我有24左右的FPS,但我不想增加更多 – kd3D 2011-05-31 10:12:41

+0

@ kd3D - 我从来没有在这之前我的仪器崩溃。您是否正在使用最新稳定版本的Xcode 4,同时在目标设备上运行iOS 4.0+?这台仪器需要运行iOS 4.0。 – 2011-05-31 14:08:46

1

据我所知,glCalls的最大数量没有这样的限制。但是,肯定地说,电话的数量越多,所花的时间就越多。批处理渲染是OpenGL必须进行的主要优化之一。

+0

我正在通过批处理,但仅绘制边界卷中的那些对象如果处于边界卷中,我将单独加载每个对象 – kd3D 2011-05-26 11:52:59

+0

您可以将对象加载到不同的线程中。你可以参考这篇文章中提出的帖子:: http://stackoverflow.com/questions/1253145/how-to-use-opengl-es-on-a-separate-thread-on-iphone – 2011-05-26 12:07:50

1

而不是怀疑瓶颈,使用仪器找到它。

跟踪模板OpenGL ES分析是选择的武器。我上次使用它时,必须手动将其附加到设备上正在运行的进程(所有其他启动选项均失败)。

+0

你可以摆脱一些光在哪个仪器上使用以及如何找到瓶颈 – kd3D 2011-05-26 11:50:48

+0

@ kd3D看到我编辑的答案 – Till 2011-05-26 15:30:39

+0

它表明,这个仪器不允许附加到任何过程,每次我直接启动它与仪器游戏它崩溃仪器 – kd3D 2011-05-27 04:59:07

相关问题