Android java层封装EGL

完整代码查看# AndroidShaderDemo下的EGLActivity

之前的《Android Native层 OpenGL ES开发》是用Native方法封装EGL,这里简单说下在java层封装。EGL的使用步骤还是之前讲的那几步:
1、取得Display
2、初始化Display
3、配置EGLConfig
4、创建EGLContext
5、创建EGLSurface
其实Google的grafika里有了很好的封装,直接搬过来就行了。
grafika里的EGL封装在EglCore。
下面说下使用方法,在EGLActivity的布局里放个SurfaceView,在SurfaceView上用OpenGL画图,SurfaceView设置回调,在surfaceChanged回调方法里开启一个线程跑OpenGL命令。代码如下:

@Override
public void surfaceChanged(final SurfaceHolder holder, int format, final int width, final int height) {
    renderHandler = newHandlerThread("render");
    renderHandler.post(new Runnable() {
        @Override
        public void run() {
            initEGL();\\初始化EGL
            eglSurface = eglCore.createWindowSurface(holder.getSurface());\\创建EGLSurface
            eglCore.makeCurrent(eglSurface);\\非常重要,设置绘图目标

            eglRender = new EGLRender(EGLActivity.this);
              eglRender.onSurfaceChanged(width, height);
            eglRender.onDraw();

            eglCore.swapBuffers(eglSurface);\\别忘了这句,交换缓存
            }
        });
    }

初始化EGL代码被封装后,只用一句就行了:

    private void initEGL(){
        eglCore = new EglCore(null, EglCore.FLAG_RECORDABLE);
    }

真正画图的类是EGLRender,里面都是OpenGL命令。具体查看源码。
自定义EGL调用OpenGL的流程大概就是这样。

需要注意的是EGL和OpenGL必须在新的线程里跑,不然就会报错:

call to OpenGL ES API with no current context

你可能感兴趣的:(Android java层封装EGL)