OpenGL ES1.1.12 第二章 2.1

(仅是草稿,未做整理)

第二章

2 OpenGL ES运行

2.1 OpenGL ES基本原理

OpenGL ES(后续称为“GL)被关注的只是帧缓存中的渲染(和从帧缓存读出已保存的数值)。在一些情况并不支持与图形硬件相关的外围设备,如鼠标,键盘。程序员必须依靠其他的机制来获得输入信息,如Khronos OpenKODEAPI

GL画基本元素取决于几个可选的模式。每个基本元素主要是点,线或者三角形。每种模式可以独立地改变,即其中的一种设置不会影响到其他的设置。但还是有许多模式会想到影响来决定在帧缓存中最终会以什么形式结束。设定好模式,定义好基本元素及其他的GL操作被描述成发送命令,命令的形式为函数或过程调用。

基本元素是定义成一个集合包含一个或多个顶点(vertices)。一个顶点(vertex)即一个点,一个边的终点或者当两边交汇时的三角形的一个角。数据(位置坐标, 颜色,正交和纹理坐标)与顶点相关联。每个顶点是独立,有序,并且是以相同的方式进行处理。其中此规则有一个例外:如果集合中的顶点要翻转(clipped),这意味着基本元素是在个特定的区域中,在这种情况下,顶点数据可能被修改或创建新的顶点数据。翻转的类型取决于顶点集合所表示的哪一种基本元素。

命令的处理经常是以所接收到的顺序进行,但识别一个命令影响之前,也会有不可确定的延时。这意味着,一个基本元素需要在任何后续会影响帧缓存的命令之前完成此元素的画操作。同时也意味着,查询和像素读取操作返回状态必须与在所有先前有关GL命令完成后具有一致性。总的说,在GL模式和帧缓存的命令的有效性,必须在任何后续有些影响的命令之前完成操作。

GL中,当调用函数时,会进行数据绑定。这意味着,当接收到命令的时候,传递到命令数据已经解析完成。即使命令需要一个点数据,一旦命令被调用,这些数据也会被解析,而任何后续命令改变此数据也不会影响当前GL,除非相同的指针被用在后续的命令中。

GL可以直接控制3D2D的基本操作。包括矩阵变换,光线均衡系数,反锯齿方法,像素更新操作。但没有提供描述或模型化一个复杂几何对象的方法。可以这么说,GL提供了描述一个复杂的几何对象如何渲染的机制,而不是为复杂的几何对象本身提供了描述机制。

GL命令的模式是C/S。程序员(客户端)发出命令,GL(服务端)解析这些命令。一个服务端也许会维护若干个GL上下文(Context),每个上下文是当前GL状态的个封装。一个客户端可以选择接入(connect)其中的一个上下文。当未连接的时候,发出一个GL命令,其结果是未知的。

GL命令对帧缓存的影响最终是由视窗系统所分配的帧缓存资源所控制。只有视窗系统决定着在给定时间下GL可访问的帧缓存部分,和与GL如何组织这些部分之间进行通信。所以没有GL命令来设置帧缓存或者初始化GL。简单说,在LCD面板或显示器上显示一个帧缓存的内容(包括图形校正技术:独立帧缓存数据的转换)并不是由GL来控制。帧缓存配置是在GL和视窗系统连接处之外进行的,初始化GL上下文是在视窗系统分配一个视窗给GL渲染时进行的。EGL API定义了一个可移植的机制来创建一个GL上下文和一个可用于渲染的视窗资源,通过此可以连接不同的视窗原始平台。

GL被设计成在一系列的具有不同的图形处理功能和性能的图形平台上运行。为达到此目的,我们定义了一个理想行为而不是一个现实的行为来确定GL操作。因此与这些理想状态有偏差也是允许的。如果它能近似于理想行为,我们也定义了实现GL必须遵守的法则。这样就允许多样性,即在GL行为中意指,当以两个相同输入时运行一样的帧缓存配置中,可以有两种不同GL实现也许并不能实现像素对像素吻合。

最后,命令名,常量,和类型以GL(c语言中glgl_GL)为前缀,这样可以与其他包减少命名冲突。为了清晰描述,这些前缀在此文档中被省略。



你可能感兴趣的:(opengles,1.1.12)