简介
前面几篇文章通过 GLSurfaceView 进行 opengles 的渲染,使用简单。但是不够灵活,一个 opengl 只能渲染一个 GLSurfaceView,一旦 GLSurfaceView 销毁,对应的 opengl 也会销毁。
使用 EGL 可以避免上述缺点。
EGL 时渲染 API 和平台原生窗口系统之间的接口,主要任务是:
查询并初始化设备的可用显示器。
创建渲染表面。
创建渲染上下文。
EGL 使用流程
EGL 使用主要步骤很清晰,每个步骤都有相应的方法进行操作。
与窗口系统通信,获取显示器:eglGetDisplay
初始化EGL:eglInitialize
根据需要,让EGL 选择合适的配置:eglChooseConfig
创建上下文:eglCreateContext
创建渲染区域:EGL窗口:eglCreateWindowSurface
指定当前上下文:eglMakeCurrent
加载着色器、连接程序、绑定数据到属性进行渲染(使用的数据、着色器之类的和前几篇文章一样)
private void createEGL(){
//获取显示设备
eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
if (eglDisplay == EGL_NO_DISPLAY){
throw new RuntimeException("egl error:" + eglGetError());
}
//初始化EGL
int[] version = new int[2];
if (!eglInitialize(eglDisplay, version,0,version,1)){
throw new RuntimeException("egl error:" + eglGetError());
}
//EGL选择配置
int[] configAttribList = {
EGL_BUFFER_SIZE, 32,
EGL_ALPHA_SIZE, 8,
EGL_BLUE_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_RED_SIZE, 8,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_