OpenGL EGL简介
OpenGL EGL结构简介
EGL,它是图形渲染API(如OpenGL ES)与本地平台窗口系统的一层接口,保证了OpenGL ES的平台无关性。EGL(The Khronos Platform Graphics Interface)提供了一种方法用于通过客户端API和本地窗口系统进行渲染,客户端API包括用于嵌入式系统的3D渲染器OpenGL ES、用于桌面系统的OpenGL(OpenGL ES的超集)、2D矢量图形渲染器OpenVG。本地窗口系统包括Windows、X。EGL 是 OpenGL 的一部分,是OpenGL接口与图形后端间的中间层,为OpenGL屏蔽了图形后端的具体类型。
EGL是一套API接口(35个)
OpenGL ES 是一个平台无关的图形库,在它能够工作之前,需要与一个实际的窗口系统关联起来,这与 OpenGL是一样的,不一样的是,这部分工作是有标准的,这个标准就是EGL。在 OpenGL时代,在不同的平台上有不同的机制以关联窗口系统,在window上是wgl,在X-Window是xgl,在Apple OS 上是agl等。而EGL的工作方式和部分属于都接近于xgl, OpenGL ES 的初始化过程如下:
Display --> Config --> Surface --> Context <-- OpenGL Command <-- APP
OpenGL ES 本质上是一个图形渲染管线的状态机,而EGL则是用于监控这些状态以及维护 FrameBuffer 和其他渲染 surface 的外部层。OpenGL ES 图形管线的状态被存储于EGL管理的一个 Context 中,FrameBuffers和其他绘制 Surfaces 通过EGL API创建、管理和销毁,EGL同时也控制和提供了对设备显示和可能的设备渲染配置的访问。
EGL 变量对象
. Display : 代表显示器,在有些系统上可以有多个显示器,即开发设备的物理屏幕,也就会有多个Dispaly,
每个Display在使用前都需要初始化,初始化的同时可以得到系统中使用的EGL的实现版本号。. Surface : 代表EGL窗口,是屏幕上的渲染区域,实际上就是一个 FrameBuffer。EGL支持三种类型的surface渲染,分别是:window、pixmap和pixel buffer。其中:
. window和pixmap类型的surface与本地窗口系统对应的资源息息相关;pixel buffer则是EGL资源独享的,不可通过本地窗口系统进行渲染;. pixmap和pixel buffer类型的surface都是(不看见屏幕off-screen)不可显示的,pixmap是保存在系统内存中的位图,而pixel buffer则是保存在显存中的帧; window是可显示的(on-screen);. window绑定到了NativeWindow,pixmap绑定到了NativePixmap,pbuffer没有任何本地绑定;. window是双缓冲区的,pbuffer和pixmap是单缓冲区的,window默认在back buffer渲染,通过eglSwapBuffers交换到屏幕上显示(screen buffer),也就是说把EGLSurface的颜色缓冲区post到Native Window,内部调用了渲染API的Flush命令。pbuffer在显存中分配,由EGL_HEIGHT和EGL_WIDTH指定大小,常用作纹理数据,pixmap绑定到本地的像素缓冲区,这个缓冲区以被其它API使用。. pixel buffer 常用与生成纹理贴图,如果想做到的渲染到一个纹理,那么建议使用帧缓冲区对象(FBO)代替PBuffer,因为帧缓冲区更高效,不过在某些FBO无法使用的情况下,PBuffer仍然有用;EGL的surface从本地window或pixmap扩展而来,还带有一些额外的buffer,包括color buffer、depth buffer、stencil buffer和alpha mask buffer,在EGL的Frame Buffer配置中包含这些额外buffer的部分或全部。注 : 一般来说一个屏幕上可以有多个窗口,窗口只是屏幕上的一个特定区域。
. Context : 代表图形上下文,OpenGL的管线(pipeline)从应用程序的角度看就是一个状态机,有当前的颜色、纹理坐标、变换矩阵、渲染模式等一大堆状态,这些状态作用于程序提交的顶点坐标等图元,形成帧缓冲内的像素,在OpenGL中,Context就代表这个状态机,应用程序的主要作用就是向Context提供图源、设置状态、偶尔也从 Context 中获取一些信息。
绑定客户端的渲染与EGL的surface时,需要用到EGL渲染context,context与surface的FrameBuffer配置必须是兼容的,客户端API的类型还会被第一次调用eglBindAPI而设定。通过 eglMakeCurrent()可能绑定了一个EGL渲染context到一个或多个EGL surface,这样context和surface就建立了关系,后面的客户端API渲染都使用了同样的context,直到以不同的参数来再次调用eglMakeCurrent。
. Config : 实际上指的是 FrameBuffer 的参数,(即具体surface类型的配置),为了能够在EGL的surface上使用客户端API进行渲染,必须使用应用程序需要的渲染特性来配置合适的 EGL FrameBuffer。
同步渲染
在一个窗口中可能不只使用了一种渲染API,如OpenGL、OpenGL ES和OpenVG,这就需要协调这些渲染API,涉及同步问题,在切换窗口系统原生渲染API之前可能不知道使用的是哪个客户端渲染API,为此可以调用eglWaitClient延迟客户端的执行,直到通过某个Khronos API的所有渲染完成,效果等同于glFinish和vgFinish,成功时返回EGL_TRUE,失败是返回EGL_FALSE,可能的错误为EGL_BAD_CURRENT_SURFACE。同样,如果需要保证原生窗口系统的渲染完成,则调用eglWaitNative,参数engine指定需要等待的渲染引擎,值为EGL_CORE_NATIVE_ENGINE,成功时返回EGL_TRUE,失败时返回EGL_FALSE,可能的错误为EGL_BAD_PARAMETER、EGL_BAD_CURRENT_SURFACE。还有一个相关函数eglWaitGL,用于执行GL操作完毕后才继续后面的Native渲染工作,同glFinish,返回EGL_FALSE时可能的错误为EGL_BAD_CURRENT_SURFACE。
OpenGL EGL简介相关推荐
- OpenGL ES EGL 简介
目录 一.EGL 简介 二.EGL 跨平台之 ANGLE 1.ANGLE 支持跨平台 2.ANGLE 支持渲染器 3.ANGLE 下载地址 三.EGL 坐标系 四.EGL 绘图步骤 五.猜你喜欢 零基 ...
- 1、OPenGL ES - 简介、iOS中GLKit简单应用
OPenGL ES - 简介.iOS中GLKit简单应用 一.OPenGL ES 1.简介: OpenGL ES 是以手持和嵌入式为目标的高级的3D图形应用程序编程接口(API),OpenGL ES ...
- OpenGL 库 简介
OpenGL 库 简介 OpenGL库函数的命名方式为:<库前缀><根命令><可选的参数个数><可选的参数类型>. 库前缀有gl.glu.aux.glu ...
- OpenGL EGL GPU工作流程理解(十四)
基本概念 1.OpenGL ES :OpenGL是一套绘图函数的标准,OpenGL|ES是OpenGL中针对嵌入式系统的一套函数子集. 2.EGL:通俗上讲,OpenGL是一个操作GPU的API,它通 ...
- OpenGL ES 简介
目录 一.前言 1.WebGL 2.OpenCV 3.Direct3D 4.OpenGL 5.OpenGL ES 和 OpenGL 二.OpenGL ES 跨平台 1.OpenGL ES 2.Meta ...
- OpenGL API简介
转自http://blog.csdn.net/menguio/article/details/6112733 OpenGL API 简介 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数 ...
- 【OpenGL ES】OpenGL ES简介
[参考-khronos]https://www.khronos.org/opengles/ 1.简介 OpenGL ES(OpenGL for Embeded System)是OpenGL(Open ...
- Android之WindowManager+OpenGL+EGL绘制(十七)
1.概述: WindowManager:Android窗口系统 OpenGL(与硬件无关):通过法命令给GPU完成绘制工作. EGL(与硬件相关):是窗口系统(SDL)和OpenGL媒介 framew ...
- Linux之SDL2+OpenGL+EGL绘制(十六)
1.概述 SDL:窗口系统(基于X11或WayLand协议) OpenGL(与硬件无关):通过法命令给GPU完成绘制工作. EGL(与硬件相关):是窗口系统(SDL)和OpenGL媒介 # emac ...
- OpenGL ES简介(一)
摘要: 概述 在聊Android的View渲染流程中,通常会有一个比较核心的步骤:通过OpeGL ES接口调用GPU接口通知GPU绘制图形.其完整的流程:UI对象---->CPU处理为多维图形, ...
最新文章
- 解决Error: Cannot find module 'node-sass'问题
- 获取分辨率函数是什么_深度学习应用“Zero Shot”超分辨率重构图像
- loadrunner 场景设计-负载生成器管理
- [BRF+] 测试ruleset
- 最长等差数列_最长等差数列分析
- 兼容FF,IE的纯CSS下拉菜单
- 【UOJ575】光伏元件【网络流建图】【上下界网络流】【费用流】
- tableViewCell的操作
- IDEA全文搜索排除无用的文件夹
- 『实用』判断一个噩梦客户的7个预警信号
- 中nextint函数_Kotlin中的作用域方法(Scope Function)
- 计算机ppt板块正文文本动画在哪,《计算机应用基础》统考辅导第章PowerPoint电子演示文稿.ppt...
- php视图,PHP的Yii框架中View视图的使用进阶
- Cisco思科常用指令
- 【Win10 + Ubuntu 16.04/18.04双系统 + 双硬盘/单硬盘 安装】传统意义双系统
- C++ 递归求数组的平均数
- [golang] go中如何监听一组channels
- 什么是操作系统(OS)?都有哪些常见的分类?
- 指令能被计算机硬件理解并执行,计算机
- CANoe入门基础教程(一)