1. 常用优化工具
2. 常用优化方案
OpenGL ES优化的主要工作是在图形管道中找到影响性能的bottleneck,其bottleneck一般表现在以下几方面:
• 在应用程序代码中,如冲突检测
• GPU与主内存间的数据传输
• 在VP(Vertex Processor)中的顶点处理
• 在FP(Fragment Processor)中的片断处理
可通过DS-5 Streamline来定位性能瓶颈(Locate bottleneck)。为了获取更好的性能,可从以下具体功能着手优化:
2.1 纹理(Texture)
高分辨率的纹理占用大量的内存,它是Mali GPU上的主要负荷,可从以下几方面进行优化:
• 除非必要,尽量不要使用大纹理
• 总是打开纹理映射(mipmapping),有时可能降低了渲染质量
• 如果可能,排序三角形,当按render的次序render时,使其有相互覆盖的三角形放在一起
• 压缩纹理,可减少内存占用、传输带宽,Mali-400 MP GPU支持ETC纹理压缩(每个像素占4bits,且不支持alpha通道),GPU硬件可解压ETC纹理,缺点是将降低图像质量
2.2 抗锯齿(Anti-aliasing)
• GPU支持4x Full Scene Anti-Aliasing (FSAA),其性能损失微不足道;当创建context和rendering surface时,可通过选择EGL配置(EGL_SAMPLES=4)来激活4x FSAA
• Mali GPU还支持16x FSAA,其性能将下降到4x FSAA的1/4
2.3 画图模式(Draw Mode)
对于大的网格,一个顶点被包含在多个三角形中,这样的顶点被处理的次数依赖调用的画图函数:
• glDrawElements:每个顶点仅被处理一次,效率更高。
• glDrawArrays:每个顶点数据在每一个使用它的三角形中被传输和处理一次
按使用的次序存储顶点数据,可以改善顶点Cache效果,并且减少了从RAM到顶点Cache传输的数据量。
2.4 顶点缓冲对象(Vertex Buffer Objects)
• 使用顶点数组(Vertex Array)存储的顶点数据位于客户端内存(即主内存),当调用glDrawArrays或glDrawElements时,将把这些顶点数据从客户端内存copy到图形内存。
• Vertex Buffer Objects允许Ope