OpenGL ES系列 之 基本-1:初始化EGL

转载 2016年05月31日 17:43:24

OpenGL ES是一个平台中立的图形库,在它能够工作之前,需要与一个实际的窗口系统关联起来,这与OpenGL是一样的。但不一样的是,这部份工作有标准,这个标准就是EGL。而OpenGL时代在不同平台上有不同的机制以关联窗口系统,在Windows上是wgl,在X-Window上是xgl,在Apple OS上是agl等。EGL的工作方式和部份术语都接近于xgl。

OpenGL ES的初始化过程如下图所示意:

Display → Config → Surface
                        ↑
                      Context
                        ↑
Application → OpenGL Command

1. 获取Display。
Display代表显示器,在有些系统上可以有多个显示器,也就会有多个Display。获得Display要调用EGLboolean eglGetDisplay(NativeDisplay dpy),参数一般为 EGL_DEFAULT_DISPLAY 。该参数实际的意义是平台实现相关的,在X-Window下是XDisplay ID,在MS Windows下是Window DC。

2. 初始化egl。
调用 EGLboolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor),该函数会进行一些内部初始化工作,并传回EGL版本号(major.minor)。

3. 选择Config。
所为Config实际指的是FrameBuffer的参数,在MS Windows下对应于PixelFormat,在X-Window下对应Visual。一般用EGLboolean eglChooseConfig(EGLDisplay dpy, const EGLint * attr_list, EGLConfig * config, EGLint config_size, EGLint *num_config),其中attr_list是以EGL_NONE结束的参数数组,通常以id,value依次存放,对于个别标识性的属性可以只有 id,没有value。另一个办法是用EGLboolean eglGetConfigs(EGLDisplay dpy, EGLConfig * config, EGLint config_size, EGLint *num_config) 来获得所有config。这两个函数都会返回不多于config_size个Config,结果保存在config[]中,系统的总Config个数保存 在num_config中。可以利用eglGetConfig()中间两个参数为0来查询系统支持的Config总个数。
Config有众多的Attribute,这些Attribute决定FrameBuffer的格式和能力,通过eglGetConfigAttrib ()来读取,但不能修改。

4. 构造Surface。
Surface实际上就是一个FrameBuffer,通过 EGLSurface eglCreateWindowSurface(EGLDisplay dpy, EGLConfig confg, NativeWindow win, EGLint *cfg_attr) 来创建一个可实际显示的Surface。系统通常还支持另外两种Surface:PixmapSurface和PBufferSurface,这两种都不 是可显示的Surface,PixmapSurface是保存在系统内存中的位图,PBuffer则是保存在显存中的帧。
Surface也有一些attribute,基本上都可以故名思意, EGL_HEIGHT EGL_WIDTH EGL_LARGEST_PBUFFER EGL_TEXTURE_FORMAT EGL_TEXTURE_TARGET EGL_MIPMAP_TEXTURE EGL_MIPMAP_LEVEL,通过eglSurfaceAttrib()设置、eglQuerySurface()读取。

5. 创建Context。
OpenGL的pipeline从程序的角度看就是一个状态机,有当前的颜色、纹理坐标、变换矩阵、绚染模式等一大堆状态,这些状态作用于程序提交的顶点 坐标等图元从而形成帧缓冲内的像素。在OpenGL的编程接口中,Context就代表这个状态机,程序的主要工作就是向Context提供图元、设置状 态,偶尔也从Context里获取一些信息。
用EGLContext eglCreateContext(EGLDisplay dpy, EGLSurface write, EGLSurface read, EGLContext * share_list)来创建一个Context。

6. 绘制。
应用程序通过OpenGL API进行绘制,一帧完成之后,调用eglSwapBuffers(EGLDisplay dpy, EGLContext ctx)来显示。 

OpenGL ES系列之基本-1:初始化 EGL

OpenGL ES 是一个平台中立的图形库,在它能够工作之前,需要与一个实际的窗 口系统关联起来,这与 OpenGL 是一样的。但不一样的是,这部份工作有标准, 这个标准就是 EGL 。而 Ope...
  • majiakun1
  • majiakun1
  • 2013年02月28日 12:33
  • 804

利用EGL在android上使用C/C++写OpenGL ES程序

使用Native代码GLSurfaceView 在Java层使用EGL 在native层使用EGL 很多教程都是在C/C++写的OpenGL的代码,其中有很多优秀的框架,除了前面提过的Assimp库外...
  • cauchyweierstrass
  • cauchyweierstrass
  • 2016年11月30日 23:37
  • 4874

OpenGL ES:EGL接口解析与理解

本文介绍:EGL接口与初始化介绍,Android系统上EGL的一些理解 一.EGL 介绍 通俗上讲,OpenGL是一个操作GPU的API,它通过驱动向GPU发送相关指令,控制图形渲染管线状态机的运...
  • qiuyun0214
  • qiuyun0214
  • 2017年01月19日 13:08
  • 906

OpenGL ES系列之基本-2:初始化 GLES

初始化 OpenGL ES 分四步: 调用 eglInitialize() 初始化 egl 库,用 eglChooseConfig() 选择合适的 framebuffer,调用 eglCreat...
  • majiakun1
  • majiakun1
  • 2013年02月28日 12:34
  • 3153

[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.7 使用OpenGL ES接口保存屏幕截图

Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过不会继续更新(保留在初始版本)回到目录读取OpenGL渲染结果读取OpenGL渲染结果就是把渲染结果的像素矩阵导出(...
  • Martin20150405
  • Martin20150405
  • 2017年01月29日 19:11
  • 1090

在Android中用ndk层egl/opengl es显示java层打开的图像

本文介绍了如何在Android的java层打开一张图片,并在native层进行渲染的方法。可以分为两个部分: 1. 在java层打开图片并通过jni接口将图像数据传给native层; 2. 在nd...
  • loushuai
  • loushuai
  • 2015年10月06日 14:43
  • 2245

OpenGL ES 光照效果

一个立方体 光照模型 环境光 散射光 镜面光为了演示光照效果,在前面学习过的内容基础上我们首先创建一个立方体,同时为了看起来直观一些,这个立方体每个面采用中心为白色,周围红色的渐变方案,不然看上去同样...
  • cauchyweierstrass
  • cauchyweierstrass
  • 2016年10月24日 22:54
  • 1799

OpenGL-ES的学习资料

第0节: 为何学习 为了更好地理解计算机图形学相关基础知识,更好地理解3D引擎的底层工作原理,从而更好地进行移动领域的3D应用开发。 需要说明的是:不需学习OpenG...
  • qq_32067045
  • qq_32067045
  • 2016年04月02日 18:41
  • 1138

从零开始学习OpenGL ES之一 – 基本概念

我曾写过一些文章介绍iPhone OpenGL ES编程,但大部分针对的是已经至少懂得一些3D编程知识的人。 作为起点,请下载我的...
  • feifeia007
  • feifeia007
  • 2014年05月04日 16:05
  • 2408

OpenGL ES着色语言-光照效果之散射光

OpenGL光照模型,在固定管线中,主要是调用OpenGL函数实现,如果使用着色器,该怎么实现。本文的例子是移植OpenGL 4.0 Shading Language Cookbook中第二章的例子。...
  • zhouxuguang236
  • zhouxuguang236
  • 2016年11月20日 21:08
  • 2176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenGL ES系列 之 基本-1:初始化EGL
举报原因:
原因补充:

(最多只允许输入30个字)