OpenGL ES系列之基本-1:初始化 EGL
来源:互联网 发布:url编码 java 编辑:程序博客网 时间:2024/05/29 04:35
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。
初始化 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, EGLintconfig_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_HEIGHTEGL_WIDTHEGL_LARGEST_PBUFFEREGL_TEXTURE_FORMATEGL_TEXTURE_TARGETEGL_MIPMAP_TEXTUREEGL_MIPMAP_LEVEL
通过 eglSurfaceAttrib() 设置、eglQuerySurface()读取。
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系列 之 基本-1:初始化EGL
- OpenGL ES系列之基本-1:初始化 EGL
- OpenGL ES系列 之 基本-1:初始化EGL
- OpenGL ES系列 之 基本-3:Hello,EGL
- OpenGL ES 之 EGL
- OpenGL ES系列 之 基本-2:初始化GLES
- OpenGL ES系列之基本-2:初始化 GLES
- OpenGL ES系列 之 基本-0:了解OpenGL ES社区
- OpenGL ES EGL & TLS
- OpenGL ES 的 EGL
- Android EGL, OpenGL ES
- OpenGL ES EGL介绍
- 【OpenGL ES】EGL简介
- Android OpenGL ES与EGL
- Android OpenGL ES与EGL
- Android OpenGL ES与EGL
- Android OpenGL ES与EGL
- 通过samba让windows访问linux
- 了解 OpenGL ES 社区
- 操作iPart表的行和列 -1
- 调试寄存器 原理与使用:DR0-DR7
- JAVA多线程,面试者的最爱!
- OpenGL ES系列之基本-1:初始化 EGL
- MASM
- 开启与关闭硬件加速
- HTTP 请求报头详解
- OpenGL ES系列之基本-2:初始化 GLES
- oracle游标
- nand相关
- 多线程设计模式之——Producer-Consumer Pattern
- OpenGL ES系列之提高-2:材质纹理