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接口 java 技术 3D 技术 opengl es
Khronos EGL API 快速查找的卡片,简洁明了。
android ui 与 opengl egl 很系统的文档
此程序为EGL扩展Google App Engine项目示例代码。通过对IDE UI、Generator以及语言层面的扩展来实现。您可以参考此项目来开发自己的GAE扩展程序。
EGL官方白皮书 v1.5 英文版,August 27, 2014,带目录
EGL接口定义,所有版本都有的,用于EGL或opengl开发有帮助
IBM Rational EGL 语言说明 RBD产品
android中在native层调用egl和opengl一个小例子
图形开发必备,EGL 1.4 API Quick Reference Card,pdf文档,未压缩,方便使用:)
OPENGL ES 2.0开发,EGL接口使用说明。
android-native-egl-example android native的可以下载看看 opengel
egl规范 1.5 eglspec.1.5.withchanges.pdf Khronos Native Platform Graphics Interface (EGL Version 1.5 - August 27, 2014)
EGL自绘窗口组件.rar EGL自绘窗口组件.rar EGL自绘窗口组件.rar EGL自绘窗口组件.rar EGL自绘窗口组件.rar EGL自绘窗口组件.rar
EGL Display Open VG for linux Interface Driver.
EGL是OpenGL ES与本地Window系统之间的桥梁。EGL创建渲染上下文(Rendering Context)和Surface,Rendering Context是OpenGL ES的状态机,Surface是OpenGL ES绘图的“画布”……
本资源实现了将彩色...案例使用 EGL 代替 GLSurfaceView 生成 OpenGL ES 的渲染环境,并结合FBO实现离屏渲染,将渲染后的图片显示在 ImageView 上。博客见:https://zhyan8.blog.csdn.net/article/details/123887797
IBM开源的高级业务应用编程语言,SOA、Android开发等跨平台应用开发
The following tables list the level of support for EGL and OES extensions available with i.MX 6 hardware and software. Support levels are current as of the date of the document and subject to change.
GLSurfaceViewEGL14 -使用EGL14而不是EGL10的GLSurfaceView。 -还允许通过GLSurfaceViewEGl14类中的setRecordable()方法设置EGL_RECORDABLE_ANDROID标志。
EGL编写的Web2.0微博客户端程序。通过调用新浪微博Open API来实现。