OpenGL 学习笔记

一. OpenGL,OpenGL ES,EGL区别
(1)概念区别
OpenGL:开源的,与平台无关的,用来渲染2D,3D图像的接口。
OpenGL ES:OpenGL在嵌入式设备(手机,PC等)上的实现,主要分为软件实现和硬件实现:
1.硬件实现,主要是为了和GPU这个硬件进行打交道的。所以各个硬件厂商会提供相关的实现;
2.软件实现,android也提供了一套OpenGL ES的软件实现,就是说不用GPU了,完全用软件实现画图的相关功能。
EGL:用来连接OpenGL ES和底层native window system的接口,当于Opengl ES和Android之间的桥梁。

(2)Android中的内存区别
在Android中通过adb shell dumpsys meminfo +pkg Dump出来的内存信息中,Graphic mem= GL mtrack+EGL mtrack,GL mtrack和EGL mtrack
GL mtrack 的含义: 驱动上报的GL内存使用情况,主要有GL texture,gl command buffer ,固定的全局驱动RAM开销的总和。
EGL mtrack的含义: gralloc 分配的内存,主要是窗口系统,所有 SurfaceView/TextureView和其他所有有gralloc分配的GraphicBuffer内存总和

二.OpenGL在Android中的应用
APP可以通过可以通过两种方式与OpenGL关联起来:
1.通过Android自身view框架与OpenGL关联,这种是下层surfaceflinger进行layer合成时用到。一般非游戏APP和被动更新的游戏APP(静态类)都是采用这种方式。
2.APP层通过自定义GLSurfaceView/Surfaceview直接与OpenGL关联,一般用于需要主动更新的游戏APP。

三.OpenGL中的帧缓冲区
OpenGL的一般渲染流程

image.png

(1)帧缓冲区对象的作用
帧缓冲区是为了解决某些需要纹理渲染的APP,需要将纹理区域从系统帧缓存区域复制到纹理缓存区域带来的性能消耗问题。帧缓冲区对象允许应用程序直接渲染到纹理,避免进行复制操作。

(2)帧缓冲区和渲染缓冲区对象区别


image.png

渲染缓冲区是由应用程序分配的2D图像缓冲区,可以用于存储颜色,深度和模板值,可作为帧缓冲区对象中颜色,深度,模板的附着,但是不能作为GL纹理。
帧缓冲区是一组颜色,深度,模板的纹理或者渲染目标。包含颜色/深度/模板的2D图像可以连接到帧缓冲区对象中对应的颜色/深度/模板附着点。这些附着点包括不同的渲染缓冲区对象,渲染缓冲区可看做为帧缓冲区的重要组成。

你可能感兴趣的:(OpenGL 学习笔记)