引言
移动应用图形渲染的速度直接关系到用户体验,因此OpenGL ES优化至关重要。本文将介绍一些提高OpenGL ES性能的技巧和方法,可以帮助开发人员更好地优化移动应用图形渲染速度。
画面输出的链路
在探讨OpenGL ES性能优化前,我们必须首先了解渲染管线(画面输出的链路,Figure.1)的各个阶段,以及各个阶段的性能瓶颈。
图1:OpenGL ES渲染管线
顺序从顶部到底部依次是:
- 应用程序,OpenGL ES配置和管理
- 顶点着色器
- 光柵化阶段
- 片元着色器
- 逐片元操作,像素填充
方法
1. 优化纹理贴图
纹理贴图(Texture Mapping)可以给渲染带来更真实的效果,同时也是开销最大的组成部分之一。
为了优化纹理贴图性能,可以采用以下方法:
- 压缩纹理贴图,可以减少纹理的大小并节省内存消耗。
- 减少纹理贴图数量,只使用必要的纹理,适当压缩纹理质量。
- 对于不需要进行透明度支持的纹理使用不支持透明度的颜色格式,比如使用RGB565格式来代替ARGB8888格式。
- 选择合适的纹理过滤方式和纹理坐标集来减少纹理采样(Sampling)次数。
下面是一个简单的OpenGL ES压缩贴图的实现方法:
glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
2. 减少重复绘图
大量的矢量绘图会显着降低帧率。因此,必须尽量减少不必要的重复绘图。
在OpenGL ES中,可以通过以下方法减少重复绘图:
- 通过分组控制绘图的时间,当某些元素不发生变化时,不必绘制整个画面。
- 可以使用Display Lists,避免多次命令渲染重复的场景。
- 避免使用多个相同的场景,难以实现更高的帧率。
3. 优化着色器
着色器(Shader)是OpenGL ES渲染流程的一个重要部分,可以通过优化着色器来加速图形渲染。
为了优化着色器性能,可以采用以下方法:
- 减少片元着色器的计算量,可以通过剔除不必要的特性,合并纹理采样,减少循环次数等方式降低操作符数量。
- 使用更高效的算法来代替一些矩阵计算,如矩阵转置。
- 通过深度剖析(Profiling)定位瓶颈方法,正确的操作方式和优化策略,可以通过定期调优动态优化OpenGL ES着色器。
4. 减少顶点数目
顶点数目是影响OpenGL ES性能的主要因素之一。但是,过多的顶点和细节可以降低帧率,因此必须保持平衡。
为了减少顶点数目,可以采用以下方法:
- 通过LOD(Level of Detail)创造可变情景,不需要繁密或模糊屏幕信息的层将自动被削减
- 采用简单的物体模型可以减少面数。
- 对于横向覆盖的多边形使用三角带(Triangle strips)来优化。
- 通过使用交错指针(Interleaved Pointer)来减少存储开销,提高指针效率。
5. 使用OpenGL ES扩展库
OpenGL ES扩展库提供了许多附加功能,具有很高的效率和广泛的应用范围,可以帮助优化OpenGL ES性能。
以下为OpenGL ES扩展库性能优化的实例代码:
//使用immediate模式,绘制4个点 glBegin(GL_POINTS); glVertex2f(50.0f, 50.0f); glVertex2f(100.0f, 100.0f); glVertex2f(200.0f, 200.0f); glVertex2f(300.0f, 300.0f); glEnd();
通过Vertex Buffer Object(VBO)实现绘图:
-- -------------------- ---- ------- --------------- -------- ---------- - --- -- -- --- ------- ---------- - -- - - ------ ------ ------- ------- ------- ------- ------- ------ -- ------ ---- --------------- ------ ----------------------------- ----- ----------------------------- ----------------- --------- ---------------- ----------------------------- ----- ----------------------------- ------------------------ -- --------- --------- -- --- ------------------------- -- ------------------ --------- ------------------------------
总结
本文介绍了提高OpenGL ES性能的各种技巧和方法,可以通过优化纹理贴图,减少重复绘图,优化着色器,减少顶点数目和使用OpenGL ES扩展库来提高应用的渲染速度,以使其达到流畅的体验。我们希望这些优化方法对您有所帮助,希望您能使用这些方法来提高移动应用的渲染速度,使用户体验更加愉悦。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64eda4eaf6b2d6eab37cc801