EGL Specification 1.0 的研读笔记
我的“Android OpenGL ES 1.x 教程的Native实现”中有Android平台下EGL的创建、销毁的代码
EGL是OpenGL ES与本地Window系统之间的桥梁。EGL创建渲染上下文(Rendering Context)和Surface,Rendering Context是OpenGL ES的状态机,Surface是OpenGL ES绘图的“画布”
Display是OpenGL ES应用运行平台的物理显示器的抽象
OpenGL ES状态机,由EGL创建、并与Surface关联
Rendering Context含有OpenGL ES的客户端和服务器端状态
Rendering Context存在于客户端的地址空间。每个线程在同一时刻只能使用1个Rendering Context,每个Rendering Context在同一时刻只能被1个线程使用
OpenGL ES绘图的“画布”。EGL/OpenGL ES有3种Surface:
OpenGL支持2种渲染模式:
window和pbuffer Surface是back buffered模式,pixmap Surface是single buffered模式
用于创建Surface,包含了Surface的各个buffer的创建参数
要点:
对每一个Display,都要初始化EGL
释放EGL相关资源
Config用于创建Surface
获取一个Display与指定属性相匹配的Config列表
获取一个Display所支持的所有Config列表
常用Config属性有:
属性 | 说明 |
EGL_RED_SIZE EGL_GREEN_SIZE EGL_BLUE_SIZE EGL_ALPHA_SIZE |
color buffer的RGBA分量的颜色深度(位数) |
EGL_BUFFER_SIZE | color buffer 的颜色深度(bpp) EGL_RED/GREEN/BLUE/ALPHA_SIZE之和 |
EGL_SURFACE_TYPE | Surface类型,可选值为:
|
EGL_DEPTH_SIZE | depth buffer中Z的位数 |
EGL_SAMPLE_BUFFERS | multisample buffer个数,0或1 |
EGL_SAMPLES | number of samples per pixel |
EGL_STENCIL_SIZE | stencil buffer个数 |
创建window Surface(on-screen 渲染)
释放Surface相关资源
指定Display、Config,创建一个Rendering Context
多个Rendering Context可以共享数据,eglCreateContext()有一个参数为与其共享数据的另一个Context
释放Context相关的资源
将Rendering Context绑定到当前线程,并且绑定Rendering Context与Surface
如果当前线程已经绑定了另一个Context,则原Context将解除绑定。因此可以以NULL或者EGL_NO_CONTEXT调用eglMakeCurrent来解除线程与当前Context之间的绑定关系
将back buffer拷贝到窗口
获取最近一次EGL函数的错误代码