EGL workflow
来源:互联网 发布:linux ping不通网关 编辑:程序博客网 时间:2024/06/03 13:55
https://www.khronos.org/registry/EGL/sdk/docs/man/html/
基本概念
EGL是OpenGL ES与本地Window系统之间的桥梁。EGL创建渲染上下文(Rendering Context)和Surface,Rendering Context是OpenGL ES的状态机,Surface是OpenGL ES绘图的“画布”
Display
Display是OpenGL ES应用运行平台的物理显示器的抽象
Rendering Context
OpenGL ES状态机,由EGL创建、并与Surface关联
Rendering Context含有OpenGL ES的客户端和服务器端状态
Rendering Context存在于客户端的地址空间。每个线程在同一时刻只能使用1个Rendering Context,每个Rendering Context在同一时刻只能被1个线程使用
Surface
OpenGL ES绘图的“画布”。EGL/OpenGL ES有3种Surface:
- window - 用于屏上(onscreen)渲染
- pbuffer - 用于离屏(offscreen)渲染
- pixmap - 离屏渲染,但本地渲染API也可以访问
OpenGL支持2种渲染模式:
- back buffered - 绘图的color buffer由EGL创建和管理,绘图完成后,EGL将后台color buffer交换/拷贝到窗口上
- single buffered - 其color buffer为本地Pixmap,EGL能使用但不维护。OpenGL ES绘图后,像素直接在Surface上呈现
window和pbuffer Surface是back buffered模式,pixmap Surface是single buffered模式
Config
用于创建Surface,包含了Surface的各个buffer的创建参数
- color buffer
- depth buffer
- multisample buffer
- stencil buffer
相互之间的关系概括
要点:
- 与同一Display关联的Rendering Context和Surface,才可以相互关联
- 一个Rendering Context可以向多个Surface绘图,多个Rendering Context可以向同一个Surface绘图
- 每个Surface有其独立的buffers
EGL函数
Display相关
eglInitialize
对每一个Display,都要初始化EGL
eglTerminate
释放EGL相关资源
Config相关
Config用于创建Surface
eglChooseConfig
获取一个Display与指定属性相匹配的Config列表
eglGetConfigs
获取一个Display所支持的所有Config列表
常用Config属性有:
属性说明EGL_RED_SIZE
EGL_GREEN_SIZE
EGL_BLUE_SIZE
EGL_ALPHA_SIZE
color buffer的RGBA分量的颜色深度(位数) EGL_BUFFER_SIZEcolor buffer 的颜色深度(bpp)
EGL_RED/GREEN/BLUE/ALPHA_SIZE之和
EGL_SURFACE_TYPESurface类型,可选值为:
- EGL_WINDOW_BIT
- EGL_PIXMAP_BIT
- EGL_PBUFFER_BIT
Surface相关
eglCreateWindowSurface
创建window Surface(on-screen 渲染)
eglDestroySurface
释放Surface相关资源
Context相关
eglCreateContext
指定Display、Config,创建一个Rendering Context
多个Rendering Context可以共享数据,eglCreateContext()有一个参数为与其共享数据的另一个Context
eglDestroyContext
释放Context相关的资源
eglMakeCurrent
将Rendering Context绑定到当前线程,并且绑定Rendering Context与Surface
如果当前线程已经绑定了另一个Context,则原Context将解除绑定。因此可以以NULL或者EGL_NO_CONTEXT调用eglMakeCurrent来解除线程与当前Context之间的绑定关系
其他函数
eglSwapBuffers
将back buffer拷贝到窗口
eglGetError
获取最近一次EGL函数的错误代码
OpenGL ES的javax.microedition.khronos.opengles 包定义了平台无关的GL绘图指令,EGL(javax.microedition.khronos.egl )
则定义了控制displays ,contexts 以及surfaces 的统一的平台接口。
- Display(EGLDisplay) 是对实际显示设备的抽象。
- Surface(EGLSurface)是对用来存储图像的内存区域FrameBuffer的抽象,包括Color Buffer, Stencil Buffer ,Depth Buffer.
- Context (EGLContext) 存储OpenGL ES绘图的一些状态信息。
使用EGL的绘图的一般步骤:
- 获取EGLDisplay对象
- 初始化与EGLDisplay 之间的连接。
- 获取EGLConfig对象
- 创建EGLContext 实例
- 创建EGLSurface实例
- 连接EGLContext和EGLSurface.
- 使用GL指令绘制图形
- 断开并释放与EGLSurface关联的EGLContext对象
- 删除EGLSurface对象
- 删除EGLContext对象
- 终止与EGLDisplay之间的连接。
一般来说在Android平台上开发OpenGL ES应用,无需直接使用javax.microedition.khronos.egl 包中的类按照上述步骤来使用OpenGL ES绘制图形,在Android平台中提供了一个android.opengl 包,类GLSurfaceView提供了对Display,Surface,Context 的管理,大大简化了OpenGL ES的程序框架,对应大部分OpenGL ES开发,只需调用一个方法来设置OpenGLView用到的GLSurfaceView.Renderer。可以参见
Android OpenGL ES 简明开发教程二:构造OpenGL ES View
https://www.khronos.org/registry/EGL/sdk/docs/man/html/
- EGL workflow
- egl
- EGL
- Workflow
- Workflow
- workflow
- workflow
- workflow
- workflow
- EGL--用户手册
- EGL Configurations
- EGL interface
- EGL简介
- mesa EGL
- EGL简介
- EGL Configurations
- 关于EGL
- 初始化EGL
- Eclipse中tomcat service设置
- ue4常用方法与技巧汇总
- 离散基础 (3). 差分(微分)的理解和应用
- POJ 3984
- git,svn,github,码云之间联系区别
- EGL workflow
- C++约瑟夫环改良版
- eclipse报错:The project: XXXX which is referenced by the classpath, does not exist.
- XZ_iOS之性能优化——图片文件优化
- 2001年分区联赛普级组之四 装箱问题
- Zabbix-3.2.3实现微信(WeChat)告警
- java中this的用法(1)
- CodeForces 484D Kindergarten
- IntelliJ IDEA 14本地仓库配置