搭建EGL环境(小白太难了)
记录下一段整崩溃的Open GL环境,有心往音视频方向发展,之前心血来潮想用谷歌的CameraX框架来做一个相机app。于是悲剧开始了。
本以为慢慢会写shader了,也基本慢慢知道openGL的渲染管线坐标变换了,就可以愉快的开始了。CameraX相机数据的回调是SurfaceTexture,我们要把这个纹理传递给openGL,所以这个纹理是属于外部纹理,于是这种情况下sdk自带的GLSurfaceView歇菜,只能被逼着自己开一个线程创建 egl环境。反正我哭了,记录下步骤:
- 获取 EGL Display 对象:eglGetDisplay()
- 初始化与 EGLDisplay 之间的连接:eglInitialize()
- 获取 EGLConfig 对象:eglChooseConfig()
- 创建 EGLContext 实例:eglCreateContext()
- 创建 EGLSurface 实例:eglCreateWindowSurface()
- 连接 EGLContext 和 EGLSurface:eglMakeCurrent()
- 使用 OpenGL ES API 绘制图形:gl_*()
- 切换 front buffer 和 back buffer 送显:eglSwapBuffer()
- 断开并释放与 EGLSurface 关联的 EGLContext 对象:eglRelease()
- 删除 EGLSurface 对象
- 删除 EGLContext 对象
- 终止与 EGLDisplay 之间的连接
总结:EGL 是 OpenGL ES 渲染 API 和本地窗口系统(native platform window system)之间的一个中间接口层,它主要由系统制造商实现。
为了让OpenGL ES能够绘制在当前设备上,我们需要EGL作为OpenGL ES与设备的桥梁。
额外收获:终于知道一点 Activity. windowManger. defaultDisplay 是啥意思了