http://hi.baidu.com/leo_xxx/item/b01b1fc29abff355ac00ef5c

基本概念

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_SIZE

color buffer 的颜色深度(bpp)

EGL_RED/GREEN/BLUE/ALPHA_SIZE之和

EGL_SURFACE_TYPE

Surface类型,可选值为:

  • EGL_WINDOW_BIT
  • EGL_PIXMAP_BIT
  • EGL_PBUFFER_BIT

EGL_DEPTH_SIZEdepth buffer中Z的位数EGL_SAMPLE_BUFFERSmultisample buffer个数,0或1EGL_SAMPLESnumber of samples per pixelEGL_STENCIL_SIZEstencil buffer个数

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函数的错误代码

EGL 1.0 学习笔记的更多相关文章

  1. DirectX 总结和DirectX 9.0 学习笔记

    转自:http://www.cnblogs.com/graphics/archive/2009/11/25/1583682.html DirectX 总结 DDS DirectXDraw Surfac ...

  2. 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

    不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.superviso ...

  3. vue2.0学习笔记之路由(二)路由嵌套+动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. vue2.0学习笔记之路由(二)路由嵌套

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. hdcms v5.7.0学习笔记

    hdcms v5.7.0学习笔记 https://note.youdao.com/ynoteshare1/index.html?id=c404d63ac910eb15a440452f73d6a6db& ...

  6. dhtmlxgrid v3.0学习笔记

    dhtmlxgrid v3.0学习笔记 分类: dhtmlx JavaScript2012-01-31 15:41 1744人阅读 评论(0) 收藏 举报 stylesheetdatecalendar ...

  7. OAuth 2.0学习笔记

    文章目录 OAuth的作用就是让"客户端"安全可控地获取"用户"的授权,与"服务商提供商"进行互动. OAuth在"客户端&quo ...

  8. 一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建

    作为.neter,看到.net core 2.0的正式发布,心里是有点小激动的,迫不及待的体验了一把,发现速度确实是快了很多,其中也遇到一些小问题,所以整理了一些学习笔记: 阅读目录 环境说明 安装C ...

  9. RxJava2.0学习笔记2 2018年7月3日 周二

    摘记: 1.map -- 转换  有些服务端的接口设计,会在返回的数据外层包裹一些额外信息,这些信息对于调试很有用,但本地显示是用不到的.使用 map() 可以把外层的格式剥掉,只留下本地会用到的核心 ...

随机推荐

  1. js 闭包实例

    var db = (function() { // 创建一个隐藏的object, 这个object持有一些数据 // 从外部是不能访问这个object的 var data = {}; // 创建一个函 ...

  2. PHP 开发者该知道的 5 个 Composer 小技巧

    From: https://segmentfault.com/a/1190000000355928 Composer是新一代的PHP依赖管理工具.其介绍和基本用法可以看这篇<Composer P ...

  3. PHP usort 使用用户自定义的比较函数对数组中的值进行排序

    From: http://www.php100.com/cover/php/2395.html usort (PHP 4, PHP 5) usort — 使用用户自定义的比较函数对数组中的值进行排序 ...

  4. mysql使用sql语句查询数据库所有表注释已经表字段注释

    场景: 1. 要查询数据库 "mammothcode" 下所有表名以及表注释 /* 查询数据库 ‘mammothcode’ 所有表注释 */ SELECT TABLE_NAME,T ...

  5. datatable编辑一行数据的方法

    let d =t.row($(e).parents("tr")).data(); 上面的是获取一行数据的方法,如果是更改一行数据,则传入根之前数据结构相同的对象或者数组即可: t. ...

  6. VC++6.0远程调试(亲试成功)

    0 前言 VS2008及以上远程调试上篇已经讲过,这里再讲下VC++6.0开发环境下的远程调试能力,仅需下面4步即可,更方便的就接着后面的5-6步. 因为目标程序需要在有采集卡等相关硬件支持下的工控机 ...

  7. [原]unity3d刀光剑影(二)

    本篇研究 暴走武侠 效果.直接贴代码 Shader "Cg shader with single texture" { Properties { _MainTex ("T ...

  8. [scala] scala 函数 (⑦)

    1.scala 函数定义 2.scala 高阶函数 3.匿名函数 4.柯里化 import scala.math._ /** * @author xwolf * @date 2017-04-24 9: ...

  9. 解决app频繁更新方案

    目前由于我们项目的特定场景,app的主要问题在于如何做到可以频繁更新而不需要频繁发布,尤其是ios,发布app store的周期基本上是2周左右,虽然可以通过企业号解决,但是后期的打包,分发给用户仍较 ...

  10. flexbox父盒子flex-wrap属性

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...