首页 > 编程知识 正文

什么是综述,anegl什么意思

时间:2023-05-04 02:14:06 阅读:58606 作者:3011

参考:

33559 www.khronos.org/registry/egl/specs/egl spec.1.5.pdf

什么是EGL

EGL支持多平台、多操作系统,包括Android、Unix和Windows。 由于可扩展性,EGL本身独立于平台渲染API的定义。

EGL支持许多客户端API,包括OpenVG、OpenGL和OpenGL ES

### EGL数据类型

egl布尔型:布尔值

EGLint :整数

EGLAttrib :表示属性的整数

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

EGLImage :不透明类型,EGLImage的handle

EGLSurface :表示可渲染面的不透明类型

egl sync :表示同步对象处理程序的不透明类型

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

# # # egl显示

通常表示物理显示器,通常有默认的显示

所有EGL对象都绑定到一个EGL显示

# #上下文和表面

EGL的一个重要角色是提供客户端API创建渲染上下文并将其与surface关联

EGL定义了三种类型的EGLSurface :窗口、pbuffer和pixmap。 这些EGLSurface还有另一个支持脱离屏幕渲染的surface,允许后续读取。 其中窗口和pixmap与平台本身的窗口、pixmap联系在一起

通过指定EGLConfig,可以创建包含位深度和其他buffer参数的EGLSurface。

颜色缓冲器具有其他缓冲器,如深度、多样本和stencil。 他们与EGLSurface联系在一起,而不是上下文。 例如,如果有多个上下文写入到同一缓冲区,他们将共享此缓冲区。 因此,多个窗口之间的渲染不会相互影响。

不同客户端API的上下文共享同一曲面的颜色缓冲区,但不是所有客户端API都有其他缓冲区。

单个上下文可用于任何兼容的EGLSurface。 如果兼容并满足地址空间要求,客户端可以使用多个不同的context渲染到同一EGLSurface,然后在一个context中渲染到多个EGLSurface。

使用# # #上下文

OpenGL和OpenGL ES同时定义了客户端/服务器的状态,他们的上下文包括这两部分。 OpenVG不区分服务器/客户端。

对客户端API的调用依赖于一个称为当前上下文的隐式上下文。

="margin-left:0in;"> 

每个线程对每种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都必须销毁重建

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。