OpenGL EGL结构简介

  1. 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屏蔽了图形后端的具体类型。

  2. EGL是一套API接口(35个)

  3. OpenGL ES 是一个平台无关的图形库,在它能够工作之前,需要与一个实际的窗口系统关联起来,这与 OpenGL是一样的,不一样的是,这部分工作是有标准的,这个标准就是EGL。在 OpenGL时代,在不同的平台上有不同的机制以关联窗口系统,在window上是wgl,在X-Window是xgl,在Apple OS 上是agl等。而EGL的工作方式和部分属于都接近于xgl, OpenGL ES 的初始化过程如下:

     Display --> Config --> Surface --> Context <-- OpenGL Command <-- APP
    
  4. OpenGL ES 本质上是一个图形渲染管线的状态机,而EGL则是用于监控这些状态以及维护 FrameBuffer 和其他渲染 surface 的外部层。OpenGL ES 图形管线的状态被存储于EGL管理的一个 Context 中,FrameBuffers和其他绘制 Surfaces 通过EGL API创建、管理和销毁,EGL同时也控制和提供了对设备显示和可能的设备渲染配置的访问。

  5. 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。

  6. 同步渲染
    在一个窗口中可能不只使用了一种渲染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简介相关推荐

  1. OpenGL ES EGL 简介

    目录 一.EGL 简介 二.EGL 跨平台之 ANGLE 1.ANGLE 支持跨平台 2.ANGLE 支持渲染器 3.ANGLE 下载地址 三.EGL 坐标系 四.EGL 绘图步骤 五.猜你喜欢 零基 ...

  2. 1、OPenGL ES - 简介、iOS中GLKit简单应用

    OPenGL ES -  简介.iOS中GLKit简单应用 一.OPenGL ES 1.简介: OpenGL ES 是以手持和嵌入式为目标的高级的3D图形应用程序编程接口(API),OpenGL ES ...

  3. OpenGL 库 简介

    OpenGL 库 简介 OpenGL库函数的命名方式为:<库前缀><根命令><可选的参数个数><可选的参数类型>. 库前缀有gl.glu.aux.glu ...

  4. OpenGL EGL GPU工作流程理解(十四)

    基本概念 1.OpenGL ES :OpenGL是一套绘图函数的标准,OpenGL|ES是OpenGL中针对嵌入式系统的一套函数子集. 2.EGL:通俗上讲,OpenGL是一个操作GPU的API,它通 ...

  5. OpenGL ES 简介

    目录 一.前言 1.WebGL 2.OpenCV 3.Direct3D 4.OpenGL 5.OpenGL ES 和 OpenGL 二.OpenGL ES 跨平台 1.OpenGL ES 2.Meta ...

  6. OpenGL API简介

    转自http://blog.csdn.net/menguio/article/details/6112733 OpenGL API 简介 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数 ...

  7. 【OpenGL ES】OpenGL ES简介

    [参考-khronos]https://www.khronos.org/opengles/ 1.简介 OpenGL ES(OpenGL for Embeded System)是OpenGL(Open ...

  8. Android之WindowManager+OpenGL+EGL绘制(十七)

    1.概述: WindowManager:Android窗口系统 OpenGL(与硬件无关):通过法命令给GPU完成绘制工作. EGL(与硬件相关):是窗口系统(SDL)和OpenGL媒介 framew ...

  9. Linux之SDL2+OpenGL+EGL绘制(十六)

    1.概述  SDL:窗口系统(基于X11或WayLand协议) OpenGL(与硬件无关):通过法命令给GPU完成绘制工作. EGL(与硬件相关):是窗口系统(SDL)和OpenGL媒介 # emac ...

  10. OpenGL ES简介(一)

    摘要: 概述 在聊Android的View渲染流程中,通常会有一个比较核心的步骤:通过OpeGL ES接口调用GPU接口通知GPU绘制图形.其完整的流程:UI对象---->CPU处理为多维图形, ...

最新文章

  1. 解决Error: Cannot find module 'node-sass'问题
  2. 获取分辨率函数是什么_深度学习应用“Zero Shot”超分辨率重构图像
  3. loadrunner 场景设计-负载生成器管理
  4. [BRF+] 测试ruleset
  5. 最长等差数列_最长等差数列分析
  6. 兼容FF,IE的纯CSS下拉菜单
  7. 【UOJ575】光伏元件【网络流建图】【上下界网络流】【费用流】
  8. tableViewCell的操作
  9. IDEA全文搜索排除无用的文件夹
  10. 『实用』判断一个噩梦客户的7个预警信号
  11. 中nextint函数_Kotlin中的作用域方法(Scope Function)
  12. 计算机ppt板块正文文本动画在哪,《计算机应用基础》统考辅导第章PowerPoint电子演示文稿.ppt...
  13. php视图,PHP的Yii框架中View视图的使用进阶
  14. Cisco思科常用指令
  15. 【Win10 + Ubuntu 16.04/18.04双系统 + 双硬盘/单硬盘 安装】传统意义双系统
  16. C++ 递归求数组的平均数
  17. [golang] go中如何监听一组channels
  18. 什么是操作系统(OS)?都有哪些常见的分类?
  19. 指令能被计算机硬件理解并执行,计算机
  20. CANoe入门基础教程(一)

热门文章

  1. 分子生物学中常用数据库
  2. script for kettle send mail contect
  3. 【Javafx】关于属性绑定需要在动画设置之后
  4. 速来围观!看小伙是如何用python可视化各城市拥堵情况的
  5. [矩阵论]欧氏空间的线性变换是正交变换的充要条件是,它对于标准正交基的矩阵是正交矩阵
  6. 徒手撸平台——基于Springboot+layui实现接口自动化平台
  7. blast在linux上的用法
  8. 光伏龙头们掀起垂直一体化狂潮
  9. android获取app使用时间,android如何获取系统里各个应用的使用时间
  10. 一个很不错的H5动画网站