我的“Android
OpenGLES 1.x 教程的Native实现”中有Android平台下EGL的创建、销毁的代*
基本概念
EGL是OpenGL ES与本地Window系统之间的桥梁。EGL创建渲染上下文(Rendering
Context)和Su***ce,Rendering Context是OpenGL ES的状态机,Su***ce是OpenGL
ES绘图的“画布”
Display
Display是OpenGL ES应用运行平台的物理显示器的抽象
Rendering Context
OpenGL ES状态机,由EGL创建、并与Su***ce关联
Rendering Context含有OpenGL ES的客户端和服务器端状态
Rendering Context存在于客户端的地址空间。每个线程在同一时刻只能使用1个Rendering
Context,每个Rendering Context在同一时刻只能被1个线程使用
Su***ce
OpenGL ES绘图的“画布”。EGL/OpenGL ES有3种Su***ce:
window - 用于屏上(onscreen)渲染
pbuffer - 用于离屏(offscreen)渲染
pixmap - 离屏渲染,但本地渲染API也可以访问
OpenGL支持2种渲染模式:
back buffered - 绘图的color buffer由EGL创建和管理,绘图完成后,EGL将后台color
buffer交换/拷贝到窗口上
single buffered - 其color buffer为本地Pixmap,EGL能使用但不维护。OpenGL
ES绘图后,像素直接在Su***ce上呈现
window和pbuffer Su***ce是back buffered模式,pixmap Su***ce是single
buffered模式
Config
用于创建Su***ce,包含了Su***ce的各个buffer的创建参数
color buffer
depth buffer
multisample buffer
stencil buffer
相互之间的关系概括
要点:
与同一Display关联的Rendering Context和Su***ce,才可以相互关联
一个Rendering Context可以向多个Su***ce绘图,多个Rendering
Context可以向同一个Su***ce绘图
每个Su***ce有其独立的buffers
EGL函数
Display相关
eglInitialize
对每一个Display,都要初始化EGL
eglTerminate
释放EGL相关资源
Config相关
Config用于创建Su***ce
eglChooseConfig
获取一个Display与指定属性相匹配的Config列表
eglGetConfigs
获取一个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
Su***ce类型,可选值为:
EGL_WINDOW_BIT
EGL_PIXMAP_BIT
EGL_PBUFFER_BIT
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个数
Su***ce相关
eglCreateWindowSu***ce
创建window Su***ce(on-screen 渲染)
eglDestroySu***ce
释放Su***ce相关资源
Context相关
eglCreateContext
指定Display、Config,创建一个Rendering Context
多个Rendering
Context可以共享数据,eglCreateContext()有一个参数为与其共享数据的另一个Context
eglDestroyContext
释放Context相关的资源
eglMakeCurrent
将Rendering Context绑定到当前线程,并且绑定Rendering Context与Su***ce
如果当前线程已经绑定了另一个Context,则原Context将解除绑定。因此可以以NULL或者EGL_NO_CONTEXT调用eglMakeCurrent来解除线程与当前Context之间的绑定关系
其他函数
eglSwapBuffers
将back buffer拷贝到窗口
eglGetError
获取最近一次EGL函数的错误代*
希望在达内学习Android的学员学习愉快!