iphone - iPhone OpenGL ES 工具中的 Tiler Utilization 统计数据意味着什么?

标签 iphone opengl-es instruments

我一直在尝试执行一些 OpenGL ES 性能优化,以尝试增加我能够在 iPhone 应用程序中渲染的每秒三角形数量,但我遇到了困难。我尝试将 OpenGL ES 数据类型从固定点转换为浮点(根据 Apple's recommendation ),交错顶点缓冲区对象,并最大限度地减少绘图状态的变化,但这些变化都没有对渲染速度产生影响。无论如何,我似乎无法在运行 3.0 操作系统的 iPhone 3G 上将我的应用程序推至每秒 320,000 个三角形以上。根据this benchmark ,使用我正在使用的平滑着色,我应该能够在该硬件上达到 687,000 个三角形/秒。

在我的测试中,当我在 Instruments 中针对正在运行的设备运行 OpenGL ES 性能工具时,我发现在渲染基准测试时,统计数据“Tiler Utilization”几乎达到 100%,但“Renderer Utilization”只达到了 100%。至约30%。这可能提供了有关显示过程中瓶颈是什么的线索,但我不知道这些值的含义,并且我没有找到任何有关它们的文档。有人对 iPhone OpenGL ES 仪器中的这个和其他统计数据代表什么有很好的描述吗?我知道iPhone 3G中的PowerVR MBX Lite是tile-based deferred renderer ,但我不确定该架构中的 Renderer 和 Tiler 之间有什么区别。

如果有任何帮助,请提供此应用程序的(BSD 许可的)源代码 is available如果您想自己下载并测试。在当前配置中,每次加载新的分子结构时,它都会启动一个小基准测试,并将三角形输出到控制台。

最佳答案

平铺器利用率和渲染器利用率百分比分别测量顶点和片段处理硬件的占空比。在 MBX 上,Tiler 利用率通常会随着发送到 GPU 的顶点数据量而变化(就顶点数量和每个顶点发送的属性大小而言),而片段利用率通常会随着 overdraw 和纹理采样而增加.

就您而言,最好的办法是减小您发送的每个顶点的大小。首先,我会尝试按颜色对原子和键进行分箱,并使用常量颜色而不是数组发送每个分箱。我还建议在适当的缩放比例下调查空头是否适合您的仓位和正常情况。在这种情况下,如果为提供足够精度而缩放的短裤无法覆盖您需要的范围,您可能还必须按位置进行分类。这些技术可能需要额外的绘制调用,但我怀疑顶点吞吐量的改进将超过额外的每次绘制调用 CPU 开销。

请注意,确保每个顶点属性从 32 位边界开始通常是有益的(在 MBX 和其他地方),这意味着如果将位置和法线切换为 Shorts,则应将它们填充到 4 个组件。 MBX 平台的特殊性也使得您希望在本例中在对 glVertexPointer 的调用中实际包含位置的 W 分量。

您还可以考虑为多边形数据(尤其是球体)采用 DOT3 等替代照明方法,但这需要特别小心,以确保您不会使渲染片段受限,或者无意中发送比以前更多的顶点数据.

关于iphone - iPhone OpenGL ES 工具中的 Tiler Utilization 统计数据意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1287811/

相关文章:

objective-c - OpenGL ES 1.1 顶点缓冲对象不工作

java - 减少 opengl es 中锯齿现象的最佳方法? (图像调整大小)

java - 在 GLSL 片段着色器中将 YUV (yCbCr420p) 转换为 RGB?

ios - CGImage导致内存泄漏

ios - 使用协调器模式时奇怪的保留周期

iphone - 来自 Facebook 页面的事件的 RSS 格式

iphone - 如何获取NSdocument目录下保存的视频

ios - 下载 iSP 托管内容卡在 SKDownloadState 等待某些用户

ios - 指向框架中泄漏的仪器——发现泄漏在其他地方(为什么?)

iphone - Xcode 4 不再显示警告在哪里?