Android EGL 一、 初始化配置

最近在看 滤镜绘制的流程, 先把 egl 的api 写一遍,再详细写一遍流程

一、概念

 EGL : 是渲染 API(如 OpenGL ES)和原生窗口系统之间的接口, 与 opengl 对接操作GPU 能力,android使用的是 openGL ES

EGL10 11  14

 EGL10 egl = (EGL10) EGLContext.getEGL();
    EGLDisplay display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); //获取显示设备
   
    // Init
    int[] version = new int[2];
    egl.eglInitialize(display, version); //version中存放EGL 版本号,int[0]为主版本号,int[1]为子版本号

    String vendor = egl.eglQueryString(display, EGL10.EGL_VENDOR);
    WLog.d("egl vendor: " + vendor); // 打印此版本EGL的实现厂商

    String version = egl.eglQueryString(display, EGL10.EGL_VERSION);
    WLog.d("egl version: " + version);// 打印EGL版本号

    String extension = egl.eglQueryString(display, EGL10.EGL_EXTENSIONS);
    WLog.d("egl extension: " + extension); //打印支持的EGL扩展

1,虽然Android使用(实现)的是EGL 1.4(从打印的版本号中可见), 但在Android 4.2(API 17)以前的版本没有EGL14,只有EGL10和EGL11,而这两个版本是不支持OpengGL ES 2.x的,因此在老版本中某些ES 2.x相关的常量参数只能用手写的硬编码代替,典型的如设定EGL渲染类型API的参数EGL10.EGL_RENDERABLE_TYPE,这个属性用不同的赋值指定的不同的渲染API,包括OpenGL,OpenGL ES 1.x, OpenGL ES 2.x,OpenVG等,如果采用ES 2.0,应该设置此值为: EGL14.EGL_OPENGL_ES2_BIT,但是在Android 4.2之前,没有EGL14接口,只能采取手写的硬编码来指定,类似: EGL_RENDERABLE_TYPE = 4;

2,egl.eglQueryString()用来查询EGL的相关信息,详见这里:http://www.khronos.org/registry/egl/sdk/docs/man/xhtml/

3,EGL10.EGL_DEFAULT_DISPLAY 默认对应手机主屏幕。

 

 

OpenGL: 是一个操作 GPU 的 API,它通过驱动向 GPU 发送相关指令 OpenGL 是一个操作 GPU 的 API,它通过驱动向 GPU 发送相关指令,控制图形渲染管线状态机的运行状态,但是当涉及到与本地窗口系统进行交互时,就需要这么一个中间层,且它最好是与平台无关的。

二、api

2.1 创建本地系统与 OpenGL es的链接, 返回 EGLDisplay 对象,  通俗讲:就是获取显示窗口

 

EGLDisplay指的是物理的显示设备比如我们的手机屏幕,我们可以通过传入屏幕设备的id去获取到设备句柄,绝大多数情况下我们传入EGL14.EGL_DEFAULT_DISPLAY获取默认的屏幕就好,一般情况下我们的手机也只有一个屏幕

拿不到设备就会返回EGL_NO_DISPLAY

EGL14.EGL_DEFAULT_DISPLAY : 默认显示,既窗口

//用于获取一个显示连接,其中display_id即要连接的display的标识
EGLDisplay eglDisplay(EGLNativeDisplayType displayId);

返回值 : EGL14.EGL_NO_DISPLAY: 没有获取到显示链接
         EGL14.EGL_BAD_DISPLAY :没有指定有效的 display
      

 

2.2 初始化环境

//用于初始化显示连接,major/minor是一对输出参数,用于返回EGL的版本号。如果不关心,可以传NULL

EGLBoolean eglInitialize(EGLDisplay display, // 创建步骤时返回的对象
                         EGLint *majorVersion, // 返回 EGL 主版本号
                         EGLint *minorVersion); // 返回 EGL 次版本号

返回  EGLBoolean:
        

2.3 初始化 EGL完成,开始配置, 配置完成后就可以渲染Surface了

EGLDisplay支持的配置有很多种,例如颜色可能支持ARGB888、RGB888、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空白的泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值