`
isiqi
  • 浏览: 16489913 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论
阅读更多

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.rar_egl生成java文件

    EGL(Embedded Graphics Library)是OpenGL ES和OpenVG等图形API在嵌入式系统上的关键接口,主要用于管理和初始化图形上下文。在Java环境中,EGL主要用于建立Java代码与硬件图形加速器之间的桥梁,使得开发者可以...

    android ui egl 文档

    在Android平台上,UI系统与OpenGL ES通过EGL(Embedded-OpenGL ES System)进行交互,EGL是介于OpenGLES和原生平台窗口系统之间的一个接口层,它负责创建和管理渲染上下文、帧缓冲和渲染表面等。EGL的主要目的是为了...

    EGL扩展GAE示例代码

    3. **语言层面的扩展**:EGL可能增加了对GAE特性的语法支持,比如直接在EGL代码中调用GAE的API,简化了与GAE服务的交互。 4. **数据存储**:EGL可能封装了GAE的NoSQL Datastore服务,使开发者能够使用EGL方便地操作...

    EGL白皮书 v1.5 August 27, 2014

    白皮书通常会包含以下几个部分:介绍、术语、核心API概述、配置选择、表面创建、上下文管理、API绑定、错误和扩展等章节,每个部分都详细阐述了EGL的相关概念和技术细节。 7. **EGL扩展**: 除了基础功能外,EGL...

    EGL 1.4 快速查找卡

    #### 三、EGL 1.4 支持的API及兼容性 EGL 1.4规范规定了一个EGL实现可能不支持所有客户端API(如OpenGL、OpenGL ES 和 OpenVG),这意味着某些函数如果调用了不受支持的客户端API时将触发错误。例如,如果一个EGL...

    android下native调用egl的例子

    在Android系统中,有时我们需要在原生(C/C++)层与OpenGL ES进行交互,这就涉及到对EGL(Embedded GL)的使用。EGL是OpenGL ES的一个关键组成部分,它负责上下文管理、配置选择以及表面绑定等任务,使得OpenGL ES能够...

    android-native-egl-example

    3. **创建EGL表面**:创建EGL表面,这可能是窗口表面、像素缓冲或其他自定义表面。`eglCreateWindowSurface()`或`eglCreatePbufferSurface()`用于创建这些表面。 4. **绑定上下文和表面**:通过`eglMakeCurrent()`...

    EGL接口定义

    3. 配置查询和选择:开发者可以查询系统支持的图形配置,并选择适合当前渲染任务的配置。 4. 资源管理:包括EGL资源对象的创建、管理和释放,例如纹理、缓冲区和渲染缓存。 5. 渲染同步:EGL定义了同步机制,以...

    EGL 编程指南

    通过以上知识点的详细介绍,我们可以看出IBM Rational EGL 不仅是一种强大的编程语言,还是一套完整的开发框架。它不仅能够简化复杂的业务逻辑开发,还提供了一系列工具和服务来支持整个开发周期,包括编码、调试、...

    egl.rar_EGL_EGL。driver_open

    3. egl.cpp:这是EGL的核心库实现,包含EGL的各种核心功能,如创建和管理EGL Context、Surface、Buffer等。 4. EGLDisplayOpenVG.h:这是EGL Display Open VG接口的头文件,定义了相关的函数原型、结构体和枚举类型...

    EGL 1.4阅读理解

    3. **Pixmap Surface**:此类表面的数据存储在内存中,可以由本地 API 访问。通常用于将图像数据导出到本地窗口系统中进行处理或保存。 这些表面类型均基于相应的 `EGLConfig` 创建,其中 `EGLConfig` 描述了所创建...

    LINUX egl X11 opengl代码 可以直接运行

    LINUX egl X11 opengl代码 可以直接运行,包括makefile文件,可以参考编译

    EGL教程(中文全集)

    IBM开源的高级业务应用编程语言,SOA、Android开发等跨平台应用开发

    egl 1.4 reference card

    #### 3. 平台支持 - **Windows平台**: - `EGLNativeDisplayType`: 对应于`HDC`。 - `EGLNativePixmapType`: 对应于`HBITMAP`。 - `EGLNativeWindowType`: 对应于`HWND`。 - **Linux/X11平台**: - `...

    android_OpenGL_ES_笔记_4-EGL

    EGL (Embedded Graphics Library) 是一个关键的图形库,它在Android系统中扮演着连接OpenGL ES(OpenGL for Embedded Systems)与本地窗口系统的关键角色。EGL的主要职责是创建和管理渲染上下文(Rendering Contexts...

    EGL自绘窗口组件.rar

    EGL(Embedded Graphics Library)是OpenGL ES的接口层,它为图形硬件提供了平台独立的抽象,使得开发者可以在各种操作系统上高效地使用OpenGL ES进行2D和3D图形渲染。EGL自绘窗口组件则是在易语言环境下实现的一种...

    egl规范 1.5

    egl规范 1.5 eglspec.1.5.withchanges.pdf Khronos Native Platform Graphics Interface (EGL Version 1.5 - August 27, 2014)

    egl spec 1.4 pdf

    本文将根据《EGL 1.4 规范》PDF文档,详细介绍其核心概念、功能特性和使用场景。 #### 版权声明 首先,需要注意的是,《EGL 1.4 规范》受版权保护,并包含Khronos Group Inc.的专有材料。该规范或其任何组成部分...

    EGL RUI技术示例

    3. **RUI应用控件**:RUI提供了一系列预定义的控件,如按钮、文本框、下拉菜单等,用于构建用户界面。这些控件可以自定义样式和行为,以满足特定应用的需求。示例中可能包含使用这些控件创建交互式界面的代码片段。 ...

    EGL微博客户端程序

    Open API是许多社交媒体平台提供的一种机制,允许第三方开发者构建应用程序,以便与这些平台的用户数据进行交互。在这个案例中,EGL微博客户端利用了新浪提供的API,遵循其协议和规范,实现了对微博数据的读取和写入...

Global site tag (gtag.js) - Google Analytics