在 iO6/iPad3 上渲染大型模型(大约 130K 顶点)时,我得到了一些令人惊讶的结果。
以下是背景资料:
- 130k verts,非交错(我知道不好),分 5 批使用 glDrawElements 绘制
- 顶点是位置(3 个浮点数)、正常(3 个字节)、颜色(4 个字节),在 GL_STATIC_DRAW VBO 中。
- 顶点状态在帧开始时使用 VAO 设置。
- glClear 在帧开始时调用。
- 应用程序正在使用 GLKViewController 来处理 GL 框架。
结果,Xcode profile view 报告:
- 大约 3 帧/秒。
- GPU 利用率约为 7%。Tiler 为 2%,Renderer 为 5%。
- CPU 时间是每帧 360 毫秒,GPU 是 25。Youch!
使用仪器进行的进一步分析报告了一个名为 glRunVertexSubmitARM(从 glDrawElements 调用)的内部 GL 函数将花费大部分时间。这里发生了什么?我的输入数据是否如此糟糕以至于 GL 每一帧都花时间将其转换成一个不错的格式?