EGL综述

2023-05-16

参考:

https://www.khronos.org/registry/EGL/specs/eglspec.1.5.pdf

 

## 什么是EGL

EGL是支持多平台、多操作系统的,比如安卓、Unix、Windows等。为了扩展性,EGL本身与平台渲染API的定义是独立的。

EGL支持OpenVG、OpenGL、OpenGL ES等多种Client API

 

### EGL的数据类型

EGLBoolean:布尔值

EGLint:整数

EGLAttrib:表示属性的整数

EGLContext:不透明的类型,由具体实现决定,通常表示一个状态机的状态

EGLImage:不透明的类型,EGLImage的handle

EGLSurface:不透明的类型,表示一个可以渲染到的面

EGLSync:不透明的类型,表示sync object的handle

EGLTime:64位uint,用于时间同步,单位是ns

 

### EGLDisplay

通常表示一个物理显示器,一般均有一个默认的display

所有的EGL对象均与一个EGLDisplay绑定

 

## Context与Surface

 

EGL的一个重要作用就是为client api提供创建rendering context,并与surface关联

EGL定义了三种EGLSurface,包括window、pbuffer(用于离屏渲染)、pixmap(另一种支持离屏渲染的surface,允许后续读取)。其中window和pixmap与平台本身的window、pixmap绑定

 

指定EGLConfig后可以创建EGLSurface,其中包括位深、以及附加buffer的参数。

Color buffer之外还有附加buffer,包括depth、multisample、stencil等。他们是和EGLSurface绑定在一起的,而不是context,比如多个context都写入同一个buffer的话,他们会共享此buffer。因此,多个window之间的渲染不会互相影响。

不同的client api的context共享同一个surface的color buffer,但是附加buffer未必对所有client api生效。

单个context可以用于任意兼容的EGLSurface。只要兼容并且地址空间要求满足,client可以使用多个不同的context渲染到同样的EGLSurface,单个context也可以渲染到多个EGLSurface。

 

### context的使用

OpenGL与OpenGL ES同时定义了client/server状态,他们的context因此包括这两部分。OpenVG不区分server/client。

Client API的调用均依赖于一个隐式的context,称为current context。

 

每个线程对每种client api最多只能有一个current context,比如OpenGL ES和OpenVG的context可以同时设为current。

一个context同时只能在一个线程中设为current。由于OpenGL与OpenGL ES同时共享很多entry point,因此有额外的限制,不能同时设为current。

 

### 渲染模式

EGL、OpenGL与OpenGL ES均支持两种渲染模式:back buffered与single buffered。

back buffered被window、pbuffer类型的surface使用。渲染时color buffer内存由EGL管理,当client完成渲染时,back buffer通过eglSwapBuffers拷贝到可以看到的窗口。其中pbuffer surface虽然有back buffer,但是不与窗口关联,因此无需拷贝。

 

single buffered只被pixmap类型的surface使用。Color buffer的内存使用系统原生的pixmap形式指定。client完成渲染时系统原生pixmap就已经包含了最终的结果。由于系统原生pixmap的限制,Pixmap surface通常不支持multisampling。

 

OpenGL、OpenVG在使用window surface时也支持single buffered模式。

 

两种模式下的surface均支持使用eglCopyBuffers拷贝到系统原生pixmap。

 

Pixmap surface支持client渲染与系统原生渲染同时运行,因为内存是由系统管理的。Pbuffer buffer不支持,因为color buffer由EGL管理。Window surface在部分情况下支持

 

### 地址空间

EGL的对象与context只能在创建时的地址空间使用,不能跨进程。大部分平台上提供跨线程支持。

context不能在另一个进程/地址空间中使用。

 

### 共享

 

OpenGL与OpenGL ES中的texutre对象不支持同步,如果绑定到多个context,用户必须自己保证多线程同步。两个context中同时读写的行为时未定义的。如果texture对象在多个context中绑定,只有全部delete之后才会delete。glBindTexture之类的命令是atomic的。

Buffer 对象与texture对象的表现是一样的。

 

### 多线程

EGL不保证多种client api之间的执行顺序。用户需要自己使用同步指令保持同步。

 

### 电源管理

当电源管理事件发生时,EGLSurface还存在,但其上所有的object都必须销毁重建

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EGL综述 的相关文章

  • EGL综述

    参考 xff1a https www khronos org registry EGL specs eglspec 1 5 pdf 什么是EGL EGL是支持多平台 多操作系统的 xff0c 比如安卓 Unix Windows等 为了扩展性
  • EGL Context 创建

    继续 EGL context 创建的分析 eglInitialize 来看 EGL10 eglInitialize 的实现 com google android gles jni EGLImpl 中 xff0c 这个方法的实现如下 xff1
  • android graphic(14)—EGL和OpenGL ES之间的关系

    OpenGL ES EGL 例子 EGL加载OpenGL ES库 涉及的库 库的加载 小结 OpenGL ES 什么是OpenGL xff1f Open Graphics Library OpenGL is a cross language
  • EGL在PC和移动端上的支持共享上下文环境情况

    PC端 xff1a 不支持共享上下文 移动端 xff1a 支持共享上下文
  • EGL综述

    参考 xff1a https www khronos org registry EGL specs eglspec 1 5 pdf 什么是EGL EGL是支持多平台 多操作系统的 xff0c 比如安卓 Unix Windows等 为了扩展性
  • OpenGL ES EGL介绍

    前面已经在android平台上使用OpenGL ES的API了解了如何创建3D图形已经使用FBO渲染到纹理进行一些其他的操作 起初我学习OpenGL ES的目的就是为了研究Android平台上录制屏幕的方案 到目前为止 基础知识已经具备了
  • Android中opengles,egl库的结构

    目录 egl opengl es的软硬件实现 需要的库 库的分工 加载模块 软件实现模块 硬件实现模块 egl opengl es的软硬件实现 需要的库 算是android中的egl库 用来加载具体的实现 软件实现或者硬件实现 system
  • android native 使用opengl es画点线面图形(纯c++)

    一 首先需要对EGL进行初始化 void Renderer initEGL const EGLint attribs EGL SURFACE TYPE EGL WINDOW BIT EGL BLUE SIZE 8 EGL GREEN SIZ
  • 如何在android ndk中使用GraphicBuffer

    我问这个问题是参考我的问题的答案如何提高android中opengl es的显示性能 我试图构建使用 GraphicBuffer 和 ndk r9d 的代码 但它说 GraphicBuffer 没有在此范围内声明 对于eglCreateIm
  • eglSwapBuffers 不稳定/缓慢

    我在使用 NDK 和 egl 命令的 Android 平板电脑上遇到渲染时间非常短的问题 我已定时致电eglSwapBuffers并且花费的时间量不定 经常超过设备帧速率 我知道它会同步刷新 但大约是 60FPS 而这里的时间远低于这个值
  • 创建窗口表面失败:EGL_BAD_MATCH?

    Android 版本是 2 2 1 设备是三星 Galaxy II 完整的崩溃日志是 java lang RuntimeException createWindowSurface failed EGL BAD MATCH at androi
  • Opengls eglCreateWindowSurface GL 错误 EGL_BAD_ALLOC

    我正进入 状态eglCreateWindowSurface GL Error EGL BAD ALLOC在三星 Galaxy S6 中安装后首次打开应用程序时 相同的代码在其他设备中运行良好 我尝试清理内存并销毁纹理并在销毁时取消初始化所有
  • Fedora 19 使用 rpmfussion 的 NVIDIA 驱动程序:libGL 错误:无法加载驱动程序:swrast

    在我的 Fedora 19 机器上运行使用 Qt 4 7 的应用程序时 我从应用程序中收到以下错误 libGL screen 0 does not appear to be DRI2 capable libGL OpenDriver try
  • 使用 GraphicBuffers 快速读取纹理

    我正在编写一些使用着色器在 Android 上运行一些 GPGPU 代码的代码 通常是一个Framebuffer使用因此计算结果存储在纹理中 输入数据通常也是纹理 为了提高性能 最好摆脱glTexImage2D and glReadPixe
  • Android使用EGL初始化openGL2.0上下文

    我想在Android上用本机代码进行离屏图像处理 所以我需要通过EGL在本机代码中创建openGL上下文 通过EGL 我们可以创建EGLSurface 我可以看到那里有三个选择 EGL WINDOW BIT EGL PIXMAP BIT E
  • 如何在 Moderngl EGL 后端启用抗锯齿功能?

    当没有抗锯齿时 此代码呈现一个彩色三角形 samples 0 但是当我打开抗锯齿功能时 samples 1 32 它无法渲染任何东西 如何使其与抗锯齿一起使用 也许我无法直接从多重采样 fbos 或纹理中读取像素 但我不知道如何解决这个问题
  • Android EGL/OpenGL ES 帧率卡顿

    TL DR 即使根本不进行任何绘制 在 Android 设备上的 OpenGL ES 渲染线程上保持 60Hz 的更新率似乎也是不可能的 神秘的峰值经常出现 在底部的代码中演示 而我为找出原因或如何导致的一切努力都导致了死胡同 在使用自定义
  • GBM 上的 EGLDisplay

    我想通过 EGL 创建 OpenGL 上下文 由于我实际上不会绘图 所以我想将 Pbuffers 与 GBM 平台结合使用 这是代码 C99 include
  • EGL 链接器错误

    我正在尝试在 Ubuntu Trusty 系统上使用 g 4 9 1 链接一个非常简单的 GLES2 和 EGL 程序 我正在使用台面库 我收到 EGL 函数的链接器错误 test cpp text 0x342 undefined refe
  • 在 Android 中选择 EGL 配置的正确方法是什么?

    我正在使用自己的 GLSurfaceView 并且一段时间以来一直在努力解决与 EGL 配置选择器相关的崩溃问题 似乎通过调用请求 RGB 565setEGLConfigChooser 5 6 5 0 16 0 应该是最受支持的 然而 使用

随机推荐

  • the server responded with a status of 404 (Not Found)

    使用ajax跳转方法时 xff0c 页面ctrl 43 shift 43 i调试报告了一个404错误 xff0c 说找不到方法 页面地址栏直接指向方法的地址跳转也是404 目标方法是新增的 xff0c 于是使用复制黏贴 xff0c 确定各处
  • select设置只读

    根据需求 xff0c 需要根据后台传来的参数 xff0c 动态设置select标签是否可以选择 xff0c 因此 xff0c 当判断某个select应当设为只读时 xff0c 使用 span class hljs variable span
  • java:程序包XXXX不存在

    使用idea导入maven项目 xff0c 编译时报错 xff1a java 程序包XXXX不存在 如图 xff1a 百度到的诸如右键libraries所在文件夹 xff0c 选择add to libraries 等方法没有作用 后来去查看
  • tomcat启动报错:java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.Lifec

    tomcat启动报错 xff1a java lang IllegalStateException ContainerBase addChild start org apache catalina Lifec 百度的结果一般都是让修改web
  • UE4 音乐的播放与停止--基于蓝图

    要实现的功能非常简单 xff1a 点击按钮 xff0c 播放音乐 这个功能非常基础 xff0c 就两步 xff1a 1 将音乐源文件拖到context文件夹中 注意 xff0c 这里的音乐文件必须是 wav格式的 2 在按钮的onclick
  • UnityEditor.BuildPlayerWindow+BuildMethodException

    unity3D安卓打包报错 xff1a UnityEditor BuildPlayerWindow 43 BuildMethodException 61 errors at UnityEditor BuildPlayerWindow 43
  • Spark常用API<Scala>

    概览 1 转换 2 动作1 Transformation 1 1一个RDD进行转换操作1 2 两个RDD的转换操作1 3对一个Pair RDD进行转化操作1 4对两个PairRDD进行转换操作2 Action 2 1对一个RDD进行行动操作
  • 关于特定网页打不开问题的解决

    如果有一些特定的网站打不开 排除被屏蔽的可能性的话 xff0c 试着把DNS设置成了自动获取ip试试看 我就这样子解决了打不开学校官网的问题
  • 渲染业务领域全景图

    最近图形学应用领域愈发广泛 xff0c 根据我的理解 xff0c 制作了一张渲染相关业务全景图 xff0c 希望对大家的职业规划有一定帮助
  • AI 入门怎么学?这份学习指南请收好!

    万事开头难 xff01 AI 入门对很多初学 AI 的同学来说是一大难题 搜集了一大堆入门资料 xff0c Python 数学 深度学习应有尽有 xff0c 但就是无从下手 xff0c 总是在第一章与放弃之间徘徊 那么 xff0c AI 应
  • FTP如何设置用户名密码

    1 新建FTP站点 xff0c 指定名称和物理路径 2 身份验证 选择 基本 xff0c 允许访问 选择 指定用户 xff0c 下面文本框中输入 本地用户和组 中现有的一个用户名即可 注意 xff1a 只能是 本地用户和组 中的用户 xff
  • Android布局 -- Navigation实现底部导航栏

    底部导航栏加页卡的切换 xff0c 很多App采用这种布局设计 xff0c 在以前的开发中 xff0c 需要自定义底部导航栏以及使用FragmentTransaction来管理Fragment的切换 xff0c 代码量较大 xff0c 而使
  • ViewModelProviders is deprecated

    原有的创建ViewModel的方法 xff1a viewModel 61 ViewModelProviders of this get ViewModel class 提示ViewModelProviders过时 改为 xff1a view
  • Android Fragment退出 返回上一个Fragment与直接退出

    例如应用底部有两个导航按钮A与B xff0c 刚进入的时候显示为第一个AFragment xff0c 点击B切换到BFragment 如果需求是在BFragment点击返回键回到AFragment xff0c 需要配置 app defaul
  • Android基础 -- 子线程可以修改UI吗?

    子线程可以修改UI吗 xff1f 为什么会产生这样的问题 xff0c 可能是因为在开发过程中遇到了 34 Only the original thread that created a view hierarchy can touch it
  • leetcode 417. 太平洋大西洋水流问题

    https leetcode cn com problems pacific atlantic water flow 思路是从海洋开始逆流 如果可以逆流到 就标记为1 然后检查两个海洋都可以逆流到的区域 DFS public List lt
  • Android模拟器检测常用方法

    在Android开发过程中 xff0c 防作弊一直是老生常谈的问题 xff0c 而模拟器的检测往往是防作弊中的重要一环 xff0c 接下来有关于模拟器的检测方法 xff0c 和大家进行一个简单的分享 1 传统的检测方法 传统的检测方法主要是
  • RecyclerView 隐藏部分分割线

    在项目中遇到复杂点的RecyclerView xff0c 可能会有隐藏部分分割线的需求 xff0c 例如item1和item3之间的分割线隐藏 xff0c item4和item5之间的分割线隐藏等 在看了文档里的ItemDecoration
  • 浅谈去中心化应用

    1 中心化应用 现在我们所使用的应用基本上都是中心化的应用 xff0c 什么是中心化应用呢 xff0c 举个栗子 xff0c 我们在天猫买东西的时候 xff0c 需要先付款给支付宝 xff0c 然后卖家发货 xff0c 我们确认收货之后 x
  • EGL综述

    参考 xff1a https www khronos org registry EGL specs eglspec 1 5 pdf 什么是EGL EGL是支持多平台 多操作系统的 xff0c 比如安卓 Unix Windows等 为了扩展性