EGL介绍与简单GLSurfaceView实现思路
EGL

EGLDisplay: 系统显示ID或者句柄, 是对显示设备的抽象, 可以理解为前端显示窗口(Front Display)EGLContext: OpenGL ES图形图形上下文, 代表OpenGL状态机, OpenGL指令的执行环境EGLSurface: 系统窗口或FrameBuffer(包含Color Buffer, Stencil Buffer, Depth Buffer)句柄, 可以理解为后端渲染目标窗口(Back Surface)EGLConfig: 创建EGLContext和EGLSurface所需的配置。一般我们会在这配置EGLSurfaceColor Buffer里RGBA各个颜色所占的位数、Stencil Buffer和Depth Buffer的位数, 以及指定能绘制到Surface的渲染api(OpenGL ES, OpenGLVG等)
EGL的基本用法
- 获得app或者显示屏的
display - 初始化
display - 创建
surface - 创建
context, 并与display关联起来, 这个context会保存OpenGL的状态 - 将
context#makeCurrent(), 后续的OpenGL操作将影响当前context的状态 - 使用OpenGL渲染
- 调用
flush或者swap buffers, EGL告诉系统或者window system展示渲染好的surface
-
EGL Commands

-
如何选择
surface,surface实际是FrameBuffer, 即渲染的地方- 上屏渲染: EGL window, 使用
eglCreateWindowSurface创建。在Android中eglCreateWindowSurface接口所需参数之一EGLNativeWindow, 一般建议用SurfaceTexture(可以从SurfaceView或者TextureView获得) - 离屏渲染: EGL Pbuffers(Pixel buffer). 使用
eglCreatePbufferSurface创建。另外可用pixmap, 但缺点是绘制的图保存在内存, 且跨平台支持差。Pbuffersurface绘制的图保存在显存中, 推荐使用
- 上屏渲染: EGL window, 使用