目录

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

零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础

零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效

零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 转场

零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 函数

零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES GPUImage 使用

零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES GLSL 编程

一.EGL 简介

EGL 是渲染 API(如 OpenGL ES)和原生窗口系统之间的接口。通常来说,OpenGL 是一个操作 GPU 的 API,它通过驱动向 GPU 发送相关指令,控制图形渲染管线状态机的运行状态,但是当涉及到与本地窗口系统进行交互时,就需要这么一个中间层,因此 EGL 被设计出来,作为 OpenGL 和原生窗口系统之间的桥梁,且它与平台无关的。

在不同平台上有不同的机制以关联窗口系统,在 Windows 上是 WGL ,在 Linux 上是 GLX ,在 Apple OS 上是 AGL 等。

EGL 则是平台上 WGL / GLX / AGL 的等价物。EGL 假设 OS 会提供窗口系统,但 EGL 与平台无关,并不局限于任何特定的窗口系统,所有用到本地窗口系统的地方都用屏蔽指针来处理,这就是易于移植的关键。

二.EGL 跨平台之ANGLE

EGL API 是独立于 OpenGL ES 各版本标准的独立的一套 API,其主要作用是为 OpenGL ES 指令 创建 Context 、绘制目标 Surface 、配置 FrameBuffer 属性、Swap 提交绘制结果 等。

ANGLE 是一个 google 发起的开源项目, 用在 chromium 项目里面,作为底层的图形渲染引擎的一部分。ANGLE 的目标是通过将 OpenGL ES API 调用转换为该平台可用的硬件支持的 API 之一,从而允许多个操作系统的用户无缝运行 WebGL 和其他 OpenGL ES 内容。换句话说,angle 就是把 opengl es 翻译成其他的语言,譬如说 D3D9 / OpenGL ES / Vulkan 等等。

1.ANGLE 支持跨平台

2.ANGLE支持渲染器

ANGLE 支持 Windows / Mac / Linux / Android / Ios ;

ANGLE 目前提供从 OpenGL ES 2.0、3.0 和 3.1 到 Vulkan、桌面 OpenGL、OpenGL ES、Direct3D 9 和 Direct3D 11 的转换;

未来的计划包括 ES 3.2,转换到 Metal 和 MacOS、Chrome OS 和 Fuchsia 支持;

关于**ANGLE 编译后面会有详细讲解,留意文章目录《OpenGL ES 基础》;**

3.ANGLE下载地址

google angle 下载地址:https://github.com/google/angle

三.EGL 坐标系

EGL 坐标系和 OpenGL ES 坐标系统一致,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uCuafFjE-1663667287049)(https://www.codersrc.com/wp-content/uploads/2022/08/78805a221a988e7-2.png “OpenGL ES EGL 简介-猿说编程”)]

很多人有一个误解:认为 OpenGL ES 纹理原点在左上角,因为如果绘制时纹理坐标设在左下角,绘制的图像就是上下倒立;而纹理坐标设制在左上角显示正常

原因:图像默认的原点在左上角,而 OpenGL ES 纹理读取数据或者 FBO 读取数据时都是以左下角开始,所以图像才会出现上下倒立的现象;

在文章《OpenGL ES 名词解释(二)》中也有对坐标系有详细讲解;

四.EGL 绘图步骤

  1. 获取 EGL Display 对象:eglGetDisplay()
  2. 初始化与 EGLDisplay 之间的连接:eglInitialize()
  3. 获取 EGLConfig 对象:eglChooseConfig()
  4. 创建 EGLContext 实例:eglCreateContext()
  5. 创建 EGLSurface 实例:eglCreateWindowSurface()
  6. 连接 EGLContext 和 EGLSurface:eglMakeCurrent()
  7. 使用 OpenGL ES API 绘制图形:gl_*()
  8. 切换 front buffer 和 back buffer 送显:eglSwapBuffer()
  9. 断开并释放与 EGLSurface 关联的 EGLContext 对象:eglRelease()
  10. 删除 EGLSurface 对象
  11. 删除 EGLContext 对象
  12. 终止与 EGLDisplay 之间的连接

关于 **EGL API** **后面会有详细讲解,留意文章目录《OpenGL ES 基础》;**

五.猜你喜欢

  1. OpenGL ES 简介
  2. OpenGL ES 版本介绍
  3. OpenGL ES 2.0 和 3.0 区别
  4. OpenGL ES 名词解释(一)
  5. OpenGL ES 名词解释(二)
  6. OpenGL ES GLSL 着色器使用过程
  7. OpenGL ES EGL 简介

OpenGL ES EGL 简介相关推荐

  1. OpenGL ES EGL eglDestroyContext

    目录 一. EGL 前言 二. EGL 绘制流程简介 三.eglDestroyContext 函数简介 四.eglDestroyContext 使用 四.猜你喜欢 零基础 OpenGL ES 学习路线 ...

  2. OpenGL ES EGL eglCreatePbufferSurface

    目录 一. EGL 前言 二. EGL 绘制流程简介 三.eglCreatePbufferSurface 函数简介 1.eglCreatePbufferSurface 简介 2.eglCreatePb ...

  3. OpenGL ES EGL eglQueryContext

    目录 一. EGL 前言 二. EGL 绘制流程简介 三.eglQueryContext 函数简介 四.eglQueryContext 使用 四.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : ...

  4. OpenGL ES EGL eglDestroySurface

    目录 一. EGL 前言 二. EGL 绘制流程简介 三.eglDestroySurface 函数简介 四.eglDestroySurface 使用 四.猜你喜欢 零基础 OpenGL ES 学习路线 ...

  5. OpenGL ES EGL eglSwapBuffer

    目录 一. EGL 前言 二. EGL 绘制流程简介 三.eglSwapBuffer 函数简介 四.关于多个 EGLContext 五.共享 EGLContext 六.猜你喜欢 零基础 OpenGL ...

  6. OpenGL ES EGL TLS(线程局部存储) G3D

    1. 什么是EGL EGL是用来管理绘图表面的(Drawing surfaces),并且提供了如下的机制 (1) 与本地窗口系统进行通信 (2) 查找绘图表面可用的类型和配置信息 (3) 创建绘图表面 ...

  7. OpenGL ES glut glew glfw glad freeglut

    目录 一.简介 1.freeglut 2.glew 3.glut 4.glfw 5.glad 二.分类 1.窗口管理 2.函数加载 三.组合使用 1.freeglut + glew 2.glfw + ...

  8. OpenGL ES glfw 下载和使用

    目录 一.glfw 简介 二.glfw 下载 三.glfw 编译 四.glfw 使用 1.OpenGL glfw + glad 效果演示 2.OpenGL glfw + glad <源码下载&g ...

  9. OpenGL ES freeglut 下载和使用

    目录 一.freeglut 简介 二.freeglut 下载 五.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基 ...

最新文章

  1. ASP.NET 使用 System.Web.Script.Serialization 解析 JSON (转)
  2. 从实例到数理来解析感知机学习算法(PLA)
  3. 红外倒车雷达原理图_汽车里的毫米波雷达你知多少?
  4. 我的Markdown的利器——Markdown Here、有道云笔记、iPic
  5. 基于51单片机的八位流水灯(三种形式)
  6. Win8:Setting
  7. 一张图搞懂美国大数据产业(上)
  8. oracle数据库中标识列,Oracle数据库标识列
  9. PT100温度采集电路设计
  10. linux怎样删除链接文件,在 Linux 中怎样移除(删除)符号链接
  11. mybatis 标签中prefix,suffix,prefixOverrides,suffixOverrides作用
  12. 量化指标公式源码_五行量化副图指标 源码 通达信
  13. 一步步自定义视频播放器——TextureView+MediaPlayer自定义视频播放器
  14. linux嵌入式系统开发心得,嵌入式学习牛人心得
  15. 【CS231n】十五、深度学习的高效算法和硬件设计
  16. 为何浙江富人多(一点启示)
  17. java最新面试题及答案2020 阿里(十六)
  18. 60帧的丝般顺畅 - QQ飞车手游优化点滴
  19. 黑马程序员_乱码问题
  20. DeepLab系列学习

热门文章

  1. 一篇读懂,关于30多岁程序员转行的困惑与方向
  2. Cydia 源地址大合集
  3. 计算机维修员周记300字,计算机实习周记300字.doc
  4. 用Dual-Thrust策略回测CTA
  5. 树莓派4B安装ubuntu18.04 Wifi热点开启
  6. 操作系统学习笔记——北京大学陈向群老师课后及习题答案(1)
  7. Using insecure protocols with repositories, without explicit opt-in, is unsupported.解决方案
  8. Python 判断能否被整除
  9. Shortest Path
  10. Shortest Path(翻译)