在为我正在处理的 iPhone/iPad 的一个小项目做一些测试时,我观察到在使用带有 GL_LINES 的 glDrawElements 绘制线框时会出现很大的 CPU 性能损失。
这是场景:
- 一个有 640 个顶点的模型(4 个浮点数表示位置,3 个浮点数表示法线,没有对齐问题……全部在 4 个字节边界上)
- 3840 个索引(无符号短)
- 顶点和索引都使用 VBO(无 VAO)
- 上面使用带有 GL_TRIANGLES 的 glDrawElements 绘制的模型工作正常
然后:
- 相同的模型有 640 个顶点
- 2560 个索引
- VBO 没有 VAO
- 使用带有 GL_LINES 的 glDrawElements 绘制会触发对 gleRunVertexSubmitARM 的连续调用,CPU 使用率飙升...
在这两种情况下,模型看起来都符合预期,并且没有 glErrors...
似乎问题与设备有关。我在 iPhone 3GS 和 iPhone 4 上体验它,而不是在 iPad 2 或模拟器上体验。在 iPad 2 帧时间 CPU = 1 毫秒并且没有调用 gleRunVertexSubmitARM,在 iPhone 4 帧时间 CPU = 12 毫秒并且连续调用 gleRunVertexSubmitARM。
谁能解释这种行为或指出我可能犯的错误?
任何见解都受到高度赞赏。提前致谢,
弗朗切斯科