- What? openGl是什么?openGl ES又是什么?
官方对OpenGl的描述为:
OpenGL(Open Graphics Library开发图形接口)是一个跨平台的图形API,用于指定3D图形处理硬件中的标准软件接口。
OpenGl的前身是SGI公司为其图形工作站开发的IRIS GL,后来因为IRIS GL的移植性不好,所以在其基础上,开发出了OpenGl。OpenGl一般用于在图形工作站,PC端使用,由于性能各方面原因,在移动端使用OpenGl基本带不动。为此,Khronos公司就为OpenGl提供了一个子集,OpenGl ES(OpenGl for Embedded System)
什么是OpenGl ES呢?
OpenGl ES是免费的跨平台的功能完善的2D/3D图形库接口的API,是OpenGL的一个子集。
移动端使用到的基本上都是OpenGl ES,当然Android开发下还专门为OpenGl提供了android.opengl包,并且提供了GlSurfaceView,GLU,GlUtils等工具类。
OpenGL的作用
刚才我们谈到图像处理,在做图像处理我们不是可以用Canvas来绘制吗,怎么还要用OpenGL那么陌生的东西来搞?为什么要用OpenGL,肯定有它的好处。
OpenGL的好处:手机上做图像处理有很多方式,但是目前为止最高效的方法是有效地使用图形处理单元,或者叫 GPU;GPU 可以集中来处理好一件事情,就是并行地做浮点运算。事实上,图像处理和渲染就是在将要渲染到窗口上的像素上做许许多多的浮点运算。也就是说用GPU来分担CPU的工作,提高工作效率。
GL版本分布
OpenGL ES版本 | Android版本 | 描述 |
---|---|---|
OpenGL ES1.0 | Android 1.0+ | OpenGL ES 1.x是针对固定硬件管线的,Android 1.0和更高的版本支持这个API规范。 |
OpenGL ES2.0 | Android 2.2(API 8)+ | OpenGL ES 2.x是针对可编程硬件管线的,不兼容OpenGL ES 1.x,Android 2.2(API 8)和更高的版本支持这个API规范。 |
OpenGL ES3.0 | Android 4.3(API 18)+ | 向下兼容OpenGL ES 2.x,Android 4.3(API 18)及更高的版本支持这个API规范。 |
OpenGL ES3.1 | Android 5.0 (API 21)+ | 向下兼容OpenGL ES3.0/2.0,Android 5.0(API 21)和更高的版本支持这个API规范 |
开始使用
Android 4.3之后,Google开始支持ES 3.0。指定Render方式,GLSurfaceView支持两种render方式,”CONTINUOUSLY“是指连续绘制,“WHEN_DIRTY”是由用户调用requestRenderer()绘制。值得注意的是,GLSurfaceView的绘制(renderer)是在单独的线程里执行的,因此即使选择连续绘制,并不会阻塞应用的主线程。最后,还必须设置GLSurfaceView的renderer。程序在renderer中处理GLSurfaceView的回调,包括GLSurfaceView创建成功,尺寸变化,以及最最重要的绘制(onDrawFrame())
链接:https://www.jianshu.com/p/79511ef8ac95