OpenGL ES学习教程 --- EGL

OpenGL ES学习教程 — EGL

简介之什么是EGL

OpenGL是跨平台开源的库,功能实现由各个产商完成,为了实现OpenGL对各个产商的功能调用,开发了EGL这一中间件连接以上二者;我们通常在使用Android的GLSurface时并没有配置EGL中间环境,因为GLSurface帮我们实现了,如果我们使用Surface的话则需要自己去配置EGL;说得实际一点,在编写代码时,EGL主要为我们提供以下几个功能:

  • 创建本地相关窗口缓存(Frame Buffer),可以直接显示到Surface上
  • 创建渲染上下文,让我们去渲染顶点、着色器等

EGL10和EGL14之区别

EGL10是2003年的,位于javax.microedition.khronos.egl路径下
EGL14是2014年的,Android api17引入的,在android.opengl下
注意: EGL10不支持GLES2.x版本下的一些字段,可能需要手动编写,但是他们底层都是调用的native系统库

以下学习内容由EGL14版本讲解

EGL名词解释

EGLDisplay:显示屏幕的类,表示一个可以显示的屏幕
EGLConfig:FrameBuffer的配置属性
EGLSurface:实质就是一个FrameBuffer,可以直接用于在surface上显示,这个有点像FBO
EGLContext:渲染上下文,用于绑定上面3个属性,将其关联起来

EGL开发步骤

  • 创建显示屏幕类EGLDisplay
  • 配置FrameBuffer的配置类EGLConfig
  • 创建FrameBuffer的EGLSurface
  • 创建上下文,并于surface绑定

创建EGLDisplay

获取默认的显示屏幕

EGLDisplay eglDisplay = EGL14.EGL_NO_DISPLAY;
eglDisplay = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY);

配置EGLConfig

自己预先配置好FrameBuffer的属性,再从屏幕只能够选择一个最优的配置

		//配置frameBuffer格式和能力
        int[] configAttri = {
                EGL14.EGL_RED_SIZE, 8,
                EGL14.EGL_GREEN_SIZE, 8,
                EGL14.EGL_BLUE_SIZE, 8,
                EGL14.EGL_ALPHA_SIZE, 8, // rgba存储大小
                EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT,        					//渲染类型
                EGL14.EGL_NONE   //必须NONE结尾
        };
		int[] configNums = new int[1];
        EGLConfig[] configs = new EGLConfig[1];
        if(!EGL14.eglChooseConfig(eglDisplay, configAttri, 0, configs, 0, configs.length, configNums, 0)){
            throw new RuntimeException("egl config error");
        }
        eglConfig = configs[0];

创建EGLSurface

创建EGLSurface有三种方法,

方法名解释特点
eglCreateWindowSurface创建一个离屏的渲染surface需要绑定本地window surface,内部back buffer双缓冲实现,eglswapbuffer切换buffer在屏幕上显示
eglCreatePixmapSurface创建一个离屏的渲染surface单缓冲形式,内部是以位图形式存储,window暂不支持将其在屏幕上显示
eglCreatePbufferSurface创建一个离屏的渲染surface双缓冲形式,但是不支持调用eglswapbuffer关联window形式

故: 后两者无法在屏幕上显示

总结

经过以上的EGL初始化配置,我们就可以按照之前的代码进行OpenGL的顶点、纹理创建、配置、绘图等,而不需要去使用GLSurfaceView,也不需要去继承GLSurfaceView.Render,因为EGL帮我们做了

最后,可以参考我的学习demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

帅气好男人_Jack

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

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

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

打赏作者

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

抵扣说明:

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

余额充值