首页 > 其他分享 >OpenGL ES EAGLContext 和 EGLContext

OpenGL ES EAGLContext 和 EGLContext

时间:2022-11-13 08:47:17浏览次数:64  
标签:EAGLContext OpenGL Windows EGL ES EGLContext

目录

零基础 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 编程

一.前言

在讲解 EAGLContext 和 EGLContext 之前,我们需要先说明一下 OpenGL 和 OpenGL ES 的关系

1.OpenGL

OpenGL(全写 Open Graphics Library)是个定义了一个跨编程语言、跨平台的应用程序接口(API)的规格,它用于生成二维、三维图像。OpenGL 广泛用于 PC 平台(windows、Linux、Unix、Mac OS X);

2.OpenGL ES

早先定义 OpenGL ES 是 OpenGL 的嵌入式设备版本,用于移动端平台(Android、iOS),但由于嵌入式设备要求的是高性能,所以一些其它纯追求高性能的设备也开始用这种 API 方式;

OpenGL ES 是 OpenGL 的子集,区别在于 OpenGL ES 删减了 OpenGL 一切低效能的操作方式,有高性能的决不留低效能的,即只求效能不求兼容性。(即:OpenGL ES 能实现的,OpenGL 也能实现;OpenGL 部分 API,OpenGL ES 不支持)

OpenGL ES 是个与硬件无关的软件接口,可以在不同的平台如 Windows、Unix、Linux、MacOS、IOS、Android 之间进行移植。因此,支持 OpenGL ES 的软件具有很好的移植性,可以获得非常广泛的应用。

3.平台差异

OpenGL 和 OpenGL ES 在不同平台上有不同的机制以关联窗口系统

1. OpenGL 在 Windows 上是 WGL ,在 Linux 上是 GLX ,在 Apple OS 上是 AGL ;

2. OpenGL ES 在 Windows / Android 上是 EGL,在 IOS 中是 EAGL;

二. EAGLContext 和 EGLContext 简介

1.EGLContext

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

EGLContext 创建 OpenGL ES 上下文:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:OpenGL ES OpenGL ES EAGLContext 和 EGLContext
//@Time:2022/08/04 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/


//创建上下文
EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 3, EGL_NONE };
EGLContext  context = eglCreateContext ( display , config , EGL_NO_CONTEXT, contextAttribs );

//绑定上下文
eglMakeCurrent ( display , surface , surface , context )

2.EAGLContext

**IOS 平台为 OpenGL 提供的实现是 EAGL,**OpenGL ES 系统与本地窗口(UIKit)桥接由 EAGL 上下文系统实现。

IOS EAGLContext 创建 OpenGL ES 上下文:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:OpenGL ES OpenGL ES EAGLContext 和 EGLContext
//@Time:2022/08/04 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/


EAGLContext *_context;
 _context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

三. EGL 绘制流程简介

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

EGL OpenGL ES 绘制可以参考以下代码:

  1. Windows OpenGL ES 调节亮度 Demo
  2. Windows OpenGL ES 调节曝光 Demo
  3. Windows OpenGL ES 调节对比度 Demo
  4. Windows OpenGL ES 调节饱和度 Demo
  5. Windows OpenGL ES 调节伽马线 Demo

四. EAGL 绘制

IOS EAGL OpenGL ES 绘制可以参考以下代码

  1. GPUImageBrightnessFilter //亮度
  2. GPUImageExposureFilter //曝光
  3. GPUImageContrastFilter //对比度
  4. GPUImageSaturationFilter //饱和度
  5. GPUImageGammaFilter //伽马线
  6. GPUImageColorInvertFilter //反色
  7. GPUImageSepiaFilter //褐色(怀旧)
  8. GPUImageLevelsFilter //色阶
  9. GPUImageGrayscaleFilter //灰度

五.猜你喜欢

  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 简介
  8. OpenGL ES EGL 名词解释
  9. OpenGL ES EGL eglGetDisplay
  10. OpenGL ES EGL eglInitialize
  11. OpenGL ES EGL eglGetConfigs
  12. OpenGL ES EGL eglChooseConfig
  13. OpenGL ES EGL eglGetError
  14. OpenGL ES EGL eglCreateContext
  15. OpenGL ES EGL eglCreateWindowSurface
  16. OpenGL ES EGL eglCreatePbufferSurface
  17. OpenGL ES EGL eglMakeCurrent
  18. OpenGL ES EGL eglSwapBuffer
  19. OpenGL ES EGL eglDestroySurface
  20. OpenGL ES EGL eglDestroyContext
  21. OpenGL ES EGL eglQueryContext
  22. OpenGL ES EAGLContext 和 EGLContext

本文由博客 - 猿说编程 猿说编程 发布!

标签:EAGLContext,OpenGL,Windows,EGL,ES,EGLContext
From: https://www.cnblogs.com/shuopython/p/16885382.html

相关文章

  • 利用TemplatesImpl攻击Shiro
    前言前边已经学习了CC1,CC6,CC3,其中1和3收到JDK8U71限制的的,C6是通杀高版本的,但是通过TemplatesImpl构造的利用链,理论上可以执行任意Java代码,这是一种非常通用的代码执行......
  • grant之后要跟着flush privileges吗?
    grant之后要跟着flushprivileges吗?grant语句会同时修改数据表和内存,判断权限使用的是内存数据。规范地使用grant和revoke语句,不需要随后加上flushprivileges语句的。f......
  • 实验7:基于REST API的SDN北向应用实践
    一、实验目的1.能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;2.能够编写程序调用RyuRESTAPI实现特定网络功能。二、实验环境1.下载虚拟机软件OracleVisual......
  • AtCoder Beginner Contest 277 D Takahashi's Solitaire
    Takahashi'sSolitaire双指针&&尺取先排个序,然后把数组扩展到\(2\timesn\),为了处理循环的情况然后双指针跑一下,限定\(r\)扩展的条件为:当前数字等于前一个或者......
  • AtCoder Beginner Contest 277 F Sorting a Matrix
    SortingaMatrix拓扑序首先可以明确无论怎么交换行列,原本在同一行或者同一列的元素,还是会处于同一行或者同一列条件一每行每行地看,如果能满足从小到大的条件,说明第......
  • AtCoder Beginner Contest 277 E Crystal Switches
    CrystalSwitches分层图+\(01bfs\)按钮的操作就是走分层图的边因此就构建两张图,然后将特殊点加一个双向边\(01bfs\)跑一下就行#include<iostream>#include<cstd......
  • Javascript(笔记32) - ES6特性 - let
    Javascript(笔记32)-ES6ECMA EuropeanComputerManufactureresAssociation,中文名:欧洲计算机制造商协会,目标是评估、开发和认可电信和计算机标准。1994年后改名为 ECM......
  • K8s 生产最佳实践-限制 NameSpace 资源用量
    前言想象一下这个场景:多个系统运行在同一套K8s集群上,有重要系统,也有不太重要的系统。但是某一天,某个不重要的系统突然占用了该K8s集群的所有资源,导致该集群上的其他系......
  • #yyds干货盘点#ES6 Class 的继承
    类的继承​​extends​​简介Class可以通过​​extends​​关键字实现继承,让子类继承父类的属性和方法。extends的写法比ES5的原型链继承,要清晰和方便很多。classPoint......
  • ESXi 5.5 升级到ESXi 6.5VIB冲突问题:CONFLICTING_VIBS ERROR
    公司虚拟化平台一直是vsphere5.5版本,由于版本太老了,7.0版本的vcenter无法纳管,所以进行升级。ESXI5.5不能直接升级到7.0,只能升级到6.5版本。升级方式采用优盘进行,具体步骤略......