搭建EGL环境(小白太难了)

1,555 阅读1分钟

记录下一段整崩溃的Open GL环境,有心往音视频方向发展,之前心血来潮想用谷歌的CameraX框架来做一个相机app。于是悲剧开始了。

本以为慢慢会写shader了,也基本慢慢知道openGL的渲染管线坐标变换了,就可以愉快的开始了。CameraX相机数据的回调是SurfaceTexture,我们要把这个纹理传递给openGL,所以这个纹理是属于外部纹理,于是这种情况下sdk自带的GLSurfaceView歇菜,只能被逼着自己开一个线程创建 egl环境。反正我哭了,记录下步骤:

  1. 获取 EGL Display 对象:eglGetDisplay()
  2. 初始化与 EGLDisplay 之间的连接:eglInitialize()
  3. 获取 EGLConfig 对象:eglChooseConfig()
  4. 创建 EGLContext 实例:eglCreateContext()
  5. 创建 EGLSurface 实例:eglCreateWindowSurface()
  6. 连接 EGLContext 和 EGLSurface:eglMakeCurrent()
  7. 使用 OpenGL ES API 绘制图形:gl_*()
  8. 切换 front buffer 和 back buffer 送显:eglSwapBuffer()
  9. 断开并释放与 EGLSurface 关联的 EGLContext 对象:eglRelease()
  10. 删除 EGLSurface 对象
  11. 删除 EGLContext 对象
  12. 终止与 EGLDisplay 之间的连接

总结:EGL 是 OpenGL ES 渲染 API 和本地窗口系统(native platform window system)之间的一个中间接口层,它主要由系统制造商实现。

为了让OpenGL ES能够绘制在当前设备上,我们需要EGL作为OpenGL ES与设备的桥梁


额外收获:终于知道一点 Activity. windowManger. defaultDisplay 是啥意思了