OpenGL ES 3.0(三)EGL 概述

OpenGL ES 定义了一个渲染图形的规范,但没有定义窗口系统。为了让 GLES 能够适合各种平台,GLES 将与知道如何通过操作系统创建和访问窗口的库,即 EGL 结合使用。在使用 GLES 进行任何操作之前,必须先创建一个 OpenGL 上下文,这是通过 EGL 实现的。

EGL 提供了以下机制:
1) 和设备的本地窗口系统通信
2) 查询绘图表面的可用类型及配置
3) 在 OpenGL ES 3.0 及其它图形渲染 API 之间同步渲染
4) 管理渲染资源,如纹理贴图

与窗口系统通信

EGL 在 OpenGL ES 3.0(和其他 Khronos 图形API)和运行在你的计算机上的本地窗口系统之间提供了一个“粘合”层。在 EGL 确定哪些类型的绘图表面或底层系统的任何其他特性可用之前,它需要与窗口系统建立一个通信通道。

因为每个窗口系统都有不同的语义,EGL 提供了一个基本的不透明类型 EGLDisplay,它封装了所有系统的依赖关系,以便与本地窗口系统进行交互。任何使用 EGL 的应用程序需要执行的第一个操作是创建并初始化一个与本地 EGL dispaly 的连接:

EGLint majorVersion;
EGLint minorVersion;

EGLDisplay display = eglGetDisplay ( EGL_DEFAULT_DISPLAY );
if ( display == EGL_NO_DISPLAY ) {
    // 无法打开与本地窗口系统的连接
}

if ( !eglInitialize ( display, &majorVersion, &minorVersion ) ) {
    // 无法初始化 EGL
}

检查错误

EGL 的大多数函数都会返回 EGL_TRUE 或 EGL_FALSE,但如果调用失败,它会记录一个表示错误原因的错误码,然而,这个错误码不会直接返回给开发者,开发者需要调用以下函数查询:

// 返回在特定线程中最近一次 EGL 函数调用产生的错误码
EGLint eglGetError()

确定可用的 surface 配置

EGL 初始化成功之后,我们就可以确定哪些类型和配置的渲染表面可用,通常有两种方法:
1) 查询每一个 surface 的配置,并找到一个最好的选择
2) 指定一组要求,让 EGL 推荐一个最佳匹配

两种方式都会返回一个 EGLConfig,它是一个 EGL 内部数据结构的标识符,包含特定 surface 及其特征的信息(比如每一个颜色分量的位数)。

如果是第一种方式,则使用:

EGLBoolean eglGetConfigs(EGLDisplay display,
                         EGLConfig *configs,
                         EGLint maxReturnConfigs,
                         EGLint 
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值