EGL介绍与简单GLSurfaceView实现思路

EGL

来自网上

  • EGLDisplay: 系统显示ID或者句柄, 是对显示设备的抽象, 可以理解为前端显示窗口(Front Display)
  • EGLContext: OpenGL ES图形图形上下文, 代表OpenGL状态机, OpenGL指令的执行环境
  • EGLSurface: 系统窗口或FrameBuffer(包含Color Buffer, Stencil Buffer, Depth Buffer)句柄, 可以理解为后端渲染目标窗口(Back Surface)
  • EGLConfig: 创建EGLContextEGLSurface所需的配置。一般我们会在这配置EGLSurface Color Buffer里RGBA各个颜色所占的位数、Stencil Buffer和Depth Buffer的位数, 以及指定能绘制到Surface的渲染api(OpenGL ES, OpenGLVG等)

EGL的基本用法

  1. 获得app或者显示屏的display
  2. 初始化display
  3. 创建surface
  4. 创建context, 并与display关联起来, 这个context会保存OpenGL的状态
  5. context#makeCurrent(), 后续的OpenGL操作将影响当前context的状态
  6. 使用OpenGL渲染
  7. 调用flush或者swap buffers, EGL告诉系统或者window system展示渲染好的surface
  • EGL Commands EGL Commands来自网络

  • 如何选择surface, surface实际是FrameBuffer, 即渲染的地方

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

参考