Android 深入系统完全讲解(23)
Posted 程序员入门进阶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 深入系统完全讲解(23)相关的知识,希望对你有一定的参考价值。
OpenGL 和 OpenGLES 简介
OpenGL(Open Graphics Library)意为开放图形库,是一个跨平台的图形 API,用于指定 3D 图
形处理硬件中的软硬件编程接口。OpenGL 一般用于图形工作站,PC 端使用。由于性能和可
移植性等各方面原因,在移动端使用起来相对比较麻烦。为此,Khronos 公司就为 OpenGL
提供一个子集,OpenGL ES(OpenGL for Embedded System)。OpenGL ES 是免费的跨平台且功
能完善的 2D/3D 图形库接口 API,是 OpenGL 的一个子集。
使用 OpenGLES 可以直接用 GPU 进行运算,专门来处理图像,会加速整体的性能,这是它存
在的意义。
在 android 里面,GLSurfaceView 承载这个任务。GLSurfaceView 在 SurfaceView 的上面,将
Surface 用 EGL 进行处理,完成了可以使用 OpenGLES 绘制,关联到对应的 Surface。使用 GLSurfaceView
下来我们讲解下,如何使用它。
1 在 AndroidManifest.xml 中设置版本,
关
然后在主界面里面:
glSurfaceView = (GLSurfaceView) findViewById(R.id.glSurfaceView);
//GLContext 设置 OpenGLES2.0
glSurfaceView.setEGLContextClientVersion(2);
// 在 setRenderer 之前,可以调用以下方法进行 EGL 设置
// glSurfaceView.setEGLConfigChooser(true);//颜色,深度,模板等等设置
// glSurfaceView.setEGLWindowSurfaceFactory(new GLSurfaceView.EGLWindowSurfaceFactory() //窗口设置
// @Override
// public EGLSurface createWindowSurface(EGL10 egl10, EGLDisplay eglDisplay, EGLConfig eglConfig, Object o)
// return null;
//
//
// @Override
// public void destroySurface(EGL10 egl10, EGLDisplay eglDisplay, EGLSurface eglSurface)
//
//
// );
glSurfaceView.setRenderer(new TriangleRender());
/* 渲 染 方 式 , RENDERMODE_WHEN_DIRTY 表 示 被 动 渲 染 , 只 有 在 调 用
requestRender 或者 onResume 等方法时才会进行渲染。RENDERMODE_CONTINUOUSLY 表
示持续渲染*/
glSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
两种渲染方式,持续渲染是在需要高速显示的情况下才需要,默认直接选择只有脏了才需要。
这里我们主要的任务,就是设置一个渲染器。
public class BackgroundRender extends BaseRenderer implements GLSurfaceView.Renderer
private String TAG = BackgroundRender.class.getSimpleName();
@Override
public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig)
//surface 被创建后需要做的处理
//Set the background frame color
GLES20.glClearColor(0.0f,0.0f,0.0f,1.0f);
@Override
public void onSurfaceChanged(GL10 gl10, int width, int height)
// 渲染窗口大小发生改变或者屏幕方法发生变化时候回调
GLES20.glViewport(0,0,width,height);
@Override
public void onDrawFrame(GL10 gl10)
//执行渲染工作
//Redraw background color
GLES20.glClearColor(GLES20.GL_COLOR_BUFFER_BIT,0f,0f,0f); 这里是完成每一帧
的渲染动作
在实际的使用过程中,会遇见所谓的 OpenGL 编程语言,牵扯到顶点渲染和着色渲染,这块
属于专门的 OpenGLES 的知识,在做 GPU 特效的时候,可以去研究。
这里推荐一个库 GPUImage ,是一个安卓的图片处理特效库,当我们后面学会了解析视频,
渲染每一帧的时候,可以给它使用特效。
以上是关于Android 深入系统完全讲解(23)的主要内容,如果未能解决你的问题,请参考以下文章