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用点绘制的方式绘制圆点,并对圆点进行抗锯齿优化。
本规范是本人根据《OpenGL ES Profile Specification 2.0.24 (Difference Specification) (April 1, 2009) (Annotated)》进行学习时翻译的,我今天把它提取出来,仅供大家学习使用,帮助想学习OpenGL ES 2.0这一国内...
OPENGL ES 3.0编程指南
opengles 3.0游戏开发上 的所有案例 opengles 3.0游戏开发上 的所有案例 opengles 3.0游戏开发上 的所有案例
超棒的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 ...
由资深Android开发专家根据OpenGLES2.0版本撰写,不仅系统地讲解了OpenGLES的核心概念、技术,以及Android的图形机制,还通过大量案例讲解了在Android上进行OpenGLES开发的方法和技巧。 《OpenGL ES应用开发实践...
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
该案例代码为Android 平台OpenGL ES实现举例,有两个作用: ...2、使用 OpenGLES 生成与使用Mipmap纹理,构建远处模糊,近处清晰的效果。 具体案例文章讲解请见: https://xiaxl.blog.csdn.net/article/details/8873106
OpenGL ES 3.0.2 规范pdf文档
几本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 ...
Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt...
OpenGL ES 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。
opengl es 未来不仅仅会用于游戏,也是总的确实,3D UI 提供更好的体验。
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 ...
创建支持OpenGL ES2.0的嵌入式QT
OPENGL ES 3.0编程指南 原书第2版 清晰中文版.pdf openGL学习最佳文档,适合初学者
OpenGL ES应用开发实践 指南 iOS卷中文版一本;适合有mac开发环境的学习OpenGL ES;适合有iOS开发者的学习OpenGL ES!!
基于opengl es 的显示gif的例子
OpenGL ES 2.0编程指南,是官方正式文档。详细讲述了OpenGL ES 2.0版本中所有API的细节和使用描述,另外还有一些简单的sample.