OpenGL ES系列---使用与GLSurfaceView源码分析

系列 内核版本
OpenGL OpenGL ES - 示例及GLSurfaceView源码分析

1、OpenGL ES?

总结:一个嵌入式的(2D/3D)图形处理库。

2、Android OpenGL ES(2.0)使用:

对于class而言,Extends用于(单)继承一个类(class),而implements用于实现一个接口(interface)。

2.1、继承GLSurfaceView

public class WlGLSurfaceView extends GLSurfaceView{

    @创建Render对象
    private WlGlRender wlGlRender;

    public WlGLSurfaceView(Context context) {
        this(context, null);
    }

    public WlGLSurfaceView(Context context, AttributeSet attrs) {
        super(context, attrs);
        @实例化Render
        wlGlRender = new WlGlRender();
        setRenderer(wlGlRender);
    }
}

2.2、实现接口


public class WlGlRender implements GLSurfaceView.Renderer{

    public WlGlRender()
    {}
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    }
    @窗口
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        GLES20.glViewport(0, 0, width, height);
    }

    @颜色
    public void onDrawFrame(GL10 gl) {
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
        GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
    }

2.3、编写glsl脚本

3、GLSurfaceView源码分析

构成 内容
GLThread OpenGL ES的运行线程
EglHelper 负责创建EGL环境
GLSurfaceView 负责提供Surface和状态改变

重点:
GLThreadOpenGL ES的运行线程。包含创建EGL环境、调用GLRenderonSurfaceCreatedonSurfaceChangedonDrawFrame方法以及生命周期的管理。

GLSurfaceView.java程序中的setRenderer(Renderer renderer)函数
new GLThread

 static class GLThread extends Thread {
        GLThread(WeakReference<GLSurfaceView> glSurfaceViewWeakRef) {
 ...
  @Override
        public void run() {
            setName("GLThread " + getId());
            if (LOG_THREADS) {
                Log.i("GLThread", "starting tid=" + getId());
            }

            try {
                guardedRun();
...

重点guardedRun
创建EGL环境

  private void guardedRun() throws InterruptedException {
            mEglHelper = new EglHelper(mGLSurfaceViewWeakRef);
            mHaveEglContext = false;

4、GLSurfaceView流程图

在这里插入图片描述

发布了247 篇原创文章 · 获赞 93 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_33487044/article/details/89930260
今日推荐