完整代码查看# 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
网友评论