简介
这篇文章描述了OpenGL ES的图形处理体系:什么是OpenGL ES,它如何工作,怎样去实现它。我们假设读者都了解一些计算机图形学的基础。这意味着要熟悉计算机图形运算的本质以及熟悉基本的图形硬件和相关知识。
1.1 OpenGL ES2.0 手册中标注的解释
在段落中,洋红色标注的是一些最近的草稿的变化。注释和问题用蓝色标注。
1.2 什么是OpenGL ES图形系统
OpenGL是图形硬件的软件接口。这些接口由一系列的程序和功能组成,允许程序员具现化物体以及操作产生高质量的图形图像,尤其是一些三维的彩色物体。
大多数的OpenGL ES要求图形硬件包含framebuffer。许多OpenGL ES画物体都是通过调用画点,线,多边形来完成的,但是某些情况下,还是需要依靠framebuffer的存在才能完成(例如再反锯齿和纹理化打开的时候)。更多的,一些OpenGL ES需要在操作framebuffer的时候特别小心。
OpenGL ES2.0是基于OpenGL2.0图形系统的,但它主要为嵌入式设备和移动手机的图形硬件设计。它删除和裁剪了大量的接口,同时添加了一些新的功能。OpenGL ES和OpenGL的不同将不会再这里讨论。详细的总结会在相关文档OpenGL ES Common Profile Specification 2.0 (Difference Specifica- tion)中出现。
1.3从编程者的角度看OpengGL ES
对于编程者来说,OpenGL 是命令的集合,允许指定2D或者3D的集合对象,控制如何把对象渲染到framebuffer中。OpenGL ES提供了“immediate-mode”接口,这意味着指定对象就会画出来。
一个典型的使用OpenGL ES的程序都是从调用打开窗口开始,程序将把图像画在窗口的framebuffer中。然后,调用申请OpenGL ES context和窗口相关联。这些步骤执行都会使用一些和平台对应的API,比如Khronos Native Platform Graphics Interface(EGL),有独立的文档。只要context被创建,编程者就会完全自由的对待OpenGL ES的命令。一些调用是用来画简单的几何图形(点,线,多边形),另外一些影响这些图元的渲染,包括如何光照,上色,如何从使用者的2D或者3D模型空间映射到2D的屏幕上。也有一些命令是直接作用在framebuffer上的,比如读取像素。
1.4从实现者的角度看OpenGL ES
对于实现者来说,OpenGL ES是一系列命令的集合,作用于图形硬件的操作。如果硬件仅仅由可寻址的framebuffer组成,OpenGL ES一定会被全部实现在CPU上。比较典型的场景,从渲染2D的线,多边形到比较复杂的矩阵转换的浮点运算处理能力,和计算几何数据,图形硬件可以由不同等级的图形加速器构成。OpenGL ES实现者的任务就是给CPU 提供软件接口,同时为每个工作在CPU和图形硬件之间的OpenGL ES命令分离工作。这种分离必须非常适合图形硬件,包括要考虑到OpenGL ES调用时的最佳性能。
1.5我们的角度
我们把OpenGL ES当作一个状态机,控制着一系列的指定的画图操作。这种模型就导致,我们需要一个详细的操作指导,同时满足编程和实现。一种实现将会产生遵从某种具体方法的结果,但是也有一些特殊的计算可以使得更有效率。
1.6配套文档
这份说明书需要和配套文档The OpenGL ES Shading Language一起读。这份文档定义了用来描述顶点和片段着色器的编程语言的语法和语义。一些章节将会引用Shading Language中定义的的概念以及相关的内容,比如语言变量。
OpenGL ES 2.0 的实现保证了shading lanuage1.0版本的兼容,实际版本支持可以再6.1.5章节查询。
1.6.1窗口系统绑定
OpenGL ES需要配套的API来创建和管理图像上下文,窗口的渲染,以及其他的在该文档中提到的资源。
Khronos Native Platform Graphics Interface 或者叫“EGL Specification”描述了EGL API,用来在手机和嵌入式设备上使用OpenGL ES。EGL说明文档在Khronos Extension Registry的官方网址可以查看,http://www.khronos.org/registry/egl 。
Khronos强烈建议OpenGL ES的实现同样支持EGL,但是一些实现需要有选择的提供有相同功能的其他平台或者其他的相应的API。