`
v5qqcom
  • 浏览: 1276898 次
文章分类
社区版块
存档分类
最新评论

OpenGL ES draw call优化

 
阅读更多

1)glDrawArrays vs glDrawElements
glDrawArrays只能用在顶点有序,无共享顶点的情况。否则会导致顶点数很多,效率很低。一般情况都使用glDrawElements

另一个角度说,使用glDrawArrays一般是三角带,但往往一个模型要用多个三角带才能表达,这样就需要多次draw call,所以不如使用索引,一个draw call搞定。

2) batch的一些问题
最基本的,mesh全部使用GL_TRIANGLES,动态合并draw call (根据材质是否一致等条件)

比较材质可使用hash值比较,但材质可能是动态的(如顶点色动画,uv动画之类),要考虑到

draw call可以分为是否使用depth buffer,如果不使用depth buffer,即前后关系和绘制顺序有关,则遇到这种draw call就必须flush之前的batch buffer。如果使用depth buffer,则可以保留之前的batch buffer。

实际上,渲染前应该对所有的 use depth buffer draw call按照材质进行排序。

mesh如果使用GL_TRIANGLE_STRIP或GL_TRIANGLE_FAN,则需要使用退化的三角形batch

batch本身需要进行copy顶点数据的操作,如果draw call本身已经比较大,可以不batch,所以需要一个阀值判断某个draw call是否要batch。如果不batch,则可能会打断batch(即要flush当前batch buffer),但向上面所说的,如果当前的batch buffer是使用depth buffer的,而这个draw call也是使用depth buffer的,则可以不打断。

多pass材质不能被batch

除了使用材质排序优化batch,也可以使用draw call按材质分组的方法,其实这是用空间换时间。省下了排序的时间,消耗一些内存保存这些组。

3)使用混合数组优化,即arrays of structs

4) 混合数组的struct中,顶点属性的顺序按照目标设备进行优化,例如:pos,normal,color,uv。。。之类

5) 使用VBO


6) 顶点buffer中的顶点按照三角带的方式排列优化,有利于顶点缓存命中。

TBC

分享到:
评论

相关推荐

    Android OpenGl ES绘制圆点与优化圆点锯齿

    Android OpenGl ES用点绘制的方式绘制圆点,并对圆点进行抗锯齿优化。

    OpenGL ES 2.0规范(中文版)——本人自己翻译总结的

    本规范是本人根据《OpenGL ES Profile Specification 2.0.24 (Difference Specification) (April 1, 2009) (Annotated)》进行学习时翻译的,我今天把它提取出来,仅供大家学习使用,帮助想学习OpenGL ES 2.0这一国内...

    OPENGL ES 3.0编程指南

    OPENGL ES 3.0编程指南

    opengles 3.0游戏开发(上)

    opengles 3.0游戏开发上 的所有案例 opengles 3.0游戏开发上 的所有案例 opengles 3.0游戏开发上 的所有案例

    OpenGL ES Tutorial for Android.zip

    超棒的Android的OpenGL ES入门教程!由 Per-Erik Bergman写的6个教程,并附带一份OpenGL ES 1.1 Reference Pages。 内容介绍: OpenGL ES Tutorial for Android – Part I – Setting up the view OpenGL ES ...

    OpenGL ES应用开发实践指南(Android卷).pdf

    由资深Android开发专家根据OpenGLES2.0版本撰写,不仅系统地讲解了OpenGLES的核心概念、技术,以及Android的图形机制,还通过大量案例讲解了在Android上进行OpenGLES开发的方法和技巧。  《OpenGL ES应用开发实践...

    opengl es3.1头文件与reference card

    OpenGL ES Extension Header File this header is defined to contain all defined extension interfaces for OpenGL ES 2 0 and all later versions since later versions are backwards compatible with OpenGL ...

    OpenGLES.ppt

    ES2.x针对可编程管线硬件.OpenGL ES1.0是以OpenGL1.3规范为基础的,OpenGL ES1.1是以OpenGL1.5为基础 的,他们分别又支持common和common lite两种profile.OpenGL ES2.0是参照OpenGL2.0规范定义的”

    OpenGL ES 3.0 Programming Guide

    OpenGL ES 3.0 Programming Guide

    Android平台OpenGLES生成使用Mipmap纹理

    该案例代码为Android 平台OpenGL ES实现举例,有两个作用: ...2、使用 OpenGLES 生成与使用Mipmap纹理,构建远处模糊,近处清晰的效果。 具体案例文章讲解请见: https://xiaxl.blog.csdn.net/article/details/8873106

    OpenGL ES 3.0.2 spec

    OpenGL ES 3.0.2 规范pdf文档

    openglES_资料打包.rar

    几本openglES的书打包下载: OpenGL ES Game Development.2004.pdf Mobile 3D Graphics with OpenGL ES and M3G Nov.2007.pdf OpenGL_ES_Programming_Guide_v1.0.2.zip OpenGL ES 2.0 Programming Guide.pdf ...

    opengl es 入门资源

    opengl es 未来不仅仅会用于游戏,也是总的确实,3D UI 提供更好的体验。

    OpenGLES 2.0 所有平台版本

    OpenGL ES 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。

    build_qt_with_opengles.rar_OPEngl es2_opengl_opengl es2.0_opengl

    创建支持OpenGL ES2.0的嵌入式QT

    OpenGLES.zip Android官方OpenGL例子

    The example code in this class uses the OpenGL ES 2.0 APIs, which is the recommended API version to use with current Android devices. For more information about versions of OpenGL ES, see the OpenGL ...

    OpenGL ES之加载图片.zip

    OpenGL ES之加载图片:详细地配置OpenGL ES的初始化,配置视图创建的渲染缓存区,加载顶点/纹理坐标数据,加载纹理数据的逻辑

    OpenGLES应用开发实践 指南 iOS卷

    OpenGL ES应用开发实践 指南 iOS卷中文版一本;适合有mac开发环境的学习OpenGL ES;适合有iOS开发者的学习OpenGL ES!!

    基于opengl es 的显示gif的例子

    基于opengl es 的显示gif的例子

    OpenGL ES编程指南

    OpenGL ES 2.0编程指南,是官方正式文档。详细讲述了OpenGL ES 2.0版本中所有API的细节和使用描述,另外还有一些简单的sample.

Global site tag (gtag.js) - Google Analytics