EGL是由Khronos Group提供的一组平台无关的API。它的功能:
1> 和本地窗口系统(native windowing system)通讯;
2> 查询可用的配置;
3> 创建OpenGL ES可用的“绘图表面”(drawing surface);
4> 同步不同类别的API之间的渲染,比如在OpenGL ES和OpenVG之间同步,或者在OpenGL和本地窗口的绘图命令之间;
5> 管理“渲染资源”,比如纹理映射(rendering map)。
● EGLDisplay
EGL可运行于GNU/Linux的X Window System,Microsoft Windows和MacOS X的Quartz。
EGL把这些平台的显示系统抽象为一个独立的类型:EGLDisplay。
使用EGL的第一步就是初始化一个可用的EGLDisplay:
这里用到了三个EGL函数:
● EGLConfig
初始化过后,要选择一个合适的“绘图表面”。
用例:
可以查询某个配置的某个属性:
让EGL为你选择一个配置:
EGL如果选择了多个配置给你,则按一定规则放到数组里:
1> EGL_CONFIG_CAVEAT
2> EGL_COLOR_BUFFER_TYPE
3> 按color buffer所占位宽
4> EGL_BUFFER_SIZE
5> EGL_SAMPLE_BUFFERS
6> EGL_SAMPLES
7> EGL_DEPTH_SIZE
8> EGL_STENCIL_SIZE
9> EGL_ALPHA_MASK_SIZE
10> EGL_NATIVE_VISUAL_TYPE
11> EGL_CONFIG_ID
● EGLSurface
这里的属性表并非用于OpenGL ES 2.0,而是其它的API,比如OpenVG。我们只需要记住一个:EGL_RENDER_BUFFER [EGL_BACK_BUFFER, EGL_FRONT_BUFFER]。
OpenGL ES 2.0是必须工作于双缓冲窗口系统的。
该属性表当然也可以为NULL,也可以只有一个EGL_NONE。那表示所有属性使用默认值。
如果函数返回EGL_NO_SURFACE,则失败。错误码:
EGL_BAD_MATCH: 属性设置错误。比如EGL_SURFACE_TYPE没有设置EGL_WINDOW_BIT
EGL_BAD_CONFIG: 因为配置错误,图形系统不支持
EGL_BAD_NATIVE_WINDOW: 窗口句柄错误
EGL_BAD_ALLOC: 无法创建绘图表面。比如先前已经创建一个了。
● pixel buffer
OpenGL ES 2.0可以向pixel buffer渲染,同样使用硬件加速。pbuffer经常用来生成纹理映射。如果想渲染到纹理,常用更高效的framebuffer对象。
在EGL_SURFACE_TYPE里使用使用EGL_PBUFFER_BIT可创建pbuffer:
使用到的属性:
EGL_WIDTH, EGL_HEIGHT
EGL_LARGEST_PBUFFER: 如果参数不合适,可使用最大的pbuffer
EGL_TEXTURE_FORMAT: [EGL_NO_TEXTURE] 如果pbuffer要绑定到纹理映射,要指定纹理的格式
EGL_TEXTURE_TARGET: [EGL_NO_TEXTURE, EGL_TEXTURE_2D]
EGL_MIPMAP_TEXTRUE: [EGL_TRUE, EGL_FALSE]
创建失败时返回EGL_NO_SURFACE,错误码:
EGL_BAD_ALLOC: 缺少资源
EGL_BAD_CONFIG: 配置错误
EGL_BAD_PARAMETER: EGL_WIDTH和EGL_HEIGHT为负数
EGL_BAD_MATCH: 配置错误;如果用于纹理映射,则高宽参数错误;EGL_TEXTURE_FORMAT和EGL_TEXTURE_TARGET只有一个不是EGL_NO_TEXTURE
EGL_BAD_ATTRIBUTE: 指定了EGL_TEXTURE_FORMAT、EGL_TEXTURE_TARGET或者EGL_MIPMAP_TEXTRUE,却不指定使用OpenGLES在配置里
使用pbuffer的例子:
pbuffer和普通的窗口渲染最大的不同是不能swap,要么拷贝其值,要么修改其绑定成为纹理。
● EGLContext
● 渲染同步
只使用OpenGL ES 2.0,那么,glFinish即可保证所有的渲染工作进行下去。
但使用OpenVG或本地图形API渲染字体,要比使用OpenGL ES 2.0要容易。所以,你可能要在同一个窗口使用多个库来渲染。
可以用EGL的同步函数:EGLBoolean eglWaitClient() 延迟客户端的执行,等待服务器端完成OpenGL ES 2.0或者OpenVG的渲染。
如果失败,返回错误码:EGL_BAD_CURRENT_SURFACE。
如果要等待本地图形API的渲染完成,使用:EGLBoolean eglWaitNative(EGLint engine)。
engine参数必须是EGL_CORE_NATIVE_ENGINE。其它值都是通过EGL扩展来指定。
如果失败,返回错误码:EGL_BAD_PARAMETER。
分享到:
相关推荐
EGL(Embedded Graphics Library)是OpenGL ES和OpenVG等图形API在嵌入式系统上的关键接口,主要用于管理和初始化图形上下文。在Java环境中,EGL主要用于建立Java代码与硬件图形加速器之间的桥梁,使得开发者可以...
在Android平台上,UI系统与OpenGL ES通过EGL(Embedded-OpenGL ES System)进行交互,EGL是介于OpenGLES和原生平台窗口系统之间的一个接口层,它负责创建和管理渲染上下文、帧缓冲和渲染表面等。EGL的主要目的是为了...
3. **语言层面的扩展**:EGL可能增加了对GAE特性的语法支持,比如直接在EGL代码中调用GAE的API,简化了与GAE服务的交互。 4. **数据存储**:EGL可能封装了GAE的NoSQL Datastore服务,使开发者能够使用EGL方便地操作...
该文档详细介绍了 EGL (Embedded Graphics Library) 的第 1.4 版本规范,这对于理解和开发基于 OpenGL 的应用至关重要。本文将深入探讨此版本的关键特性、结构以及使用场景。 #### 二、EGL 规范概述 EGL(Embedded...
#### 三、EGL 1.4 支持的API及兼容性 EGL 1.4规范规定了一个EGL实现可能不支持所有客户端API(如OpenGL、OpenGL ES 和 OpenVG),这意味着某些函数如果调用了不受支持的客户端API时将触发错误。例如,如果一个EGL...
在Android系统中,有时我们需要在原生(C/C++)层与OpenGL ES进行交互,这就涉及到对EGL(Embedded GL)的使用。EGL是OpenGL ES的一个关键组成部分,它负责上下文管理、配置选择以及表面绑定等任务,使得OpenGL ES能够...
3. **创建EGL表面**:创建EGL表面,这可能是窗口表面、像素缓冲或其他自定义表面。`eglCreateWindowSurface()`或`eglCreatePbufferSurface()`用于创建这些表面。 4. **绑定上下文和表面**:通过`eglMakeCurrent()`...
3. 配置查询和选择:开发者可以查询系统支持的图形配置,并选择适合当前渲染任务的配置。 4. 资源管理:包括EGL资源对象的创建、管理和释放,例如纹理、缓冲区和渲染缓存。 5. 渲染同步:EGL定义了同步机制,以...
通过以上知识点的详细介绍,我们可以看出IBM Rational EGL 不仅是一种强大的编程语言,还是一套完整的开发框架。它不仅能够简化复杂的业务逻辑开发,还提供了一系列工具和服务来支持整个开发周期,包括编码、调试、...
白皮书通常会包含以下几个部分:介绍、术语、核心API概述、配置选择、表面创建、上下文管理、API绑定、错误和扩展等章节,每个部分都详细阐述了EGL的相关概念和技术细节。 7. **EGL扩展**: 除了基础功能外,EGL...
#### 3. 平台支持 - **Windows平台**: - `EGLNativeDisplayType`: 对应于`HDC`。 - `EGLNativePixmapType`: 对应于`HBITMAP`。 - `EGLNativeWindowType`: 对应于`HWND`。 - **Linux/X11平台**: - `...
3. egl.cpp:这是EGL的核心库实现,包含EGL的各种核心功能,如创建和管理EGL Context、Surface、Buffer等。 4. EGLDisplayOpenVG.h:这是EGL Display Open VG接口的头文件,定义了相关的函数原型、结构体和枚举类型...
3. **Pixmap Surface**:此类表面的数据存储在内存中,可以由本地 API 访问。通常用于将图像数据导出到本地窗口系统中进行处理或保存。 这些表面类型均基于相应的 `EGLConfig` 创建,其中 `EGLConfig` 描述了所创建...
LINUX egl X11 opengl代码 可以直接运行,包括makefile文件,可以参考编译
EGL (Embedded Graphics Library) 是一个关键的图形库,它在Android系统中扮演着连接OpenGL ES(OpenGL for Embedded Systems)与本地窗口系统的关键角色。EGL的主要职责是创建和管理渲染上下文(Rendering Contexts...
IBM开源的高级业务应用编程语言,SOA、Android开发等跨平台应用开发
EGL(Embedded Graphics Library)是OpenGL ES的接口层,它为图形硬件提供了平台独立的抽象,使得开发者可以在各种操作系统上高效地使用OpenGL ES进行2D和3D图形渲染。EGL自绘窗口组件则是在易语言环境下实现的一种...
egl规范 1.5 eglspec.1.5.withchanges.pdf Khronos Native Platform Graphics Interface (EGL Version 1.5 - August 27, 2014)
本资源实现了将彩色...案例使用 EGL 代替 GLSurfaceView 生成 OpenGL ES 的渲染环境,并结合FBO实现离屏渲染,将渲染后的图片显示在 ImageView 上。博客见:https://zhyan8.blog.csdn.net/article/details/123887797
本文将根据《EGL 1.4 规范》PDF文档,详细介绍其核心概念、功能特性和使用场景。 #### 版权声明 首先,需要注意的是,《EGL 1.4 规范》受版权保护,并包含Khronos Group Inc.的专有材料。该规范或其任何组成部分...