Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11788
  • 博文数量: 6
  • 博客积分: 280
  • 博客等级: 二等列兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-26 16:31
文章分类

全部博文(6)

文章存档

2010年(6)

我的朋友
最近访客

分类: LINUX

2010-10-21 11:19:38

    和桌面Windows的3D应用一样,移动设备也需要API的支持。在Windows的发展进程中,有两种互相竞争的API存在,那就是DirectX和OpenGL。而移动设备自从推出以来一直采用的是OpenGL API的派生产物,也就是OpenGL ES。

  正如你想象的一样,OpenGL ES继承了很多OpenGL的特色,其具有开放性的优点,让开发者能够更轻松的在移动平台上创建内容,并且由于和OpenGL的很多规则相同,使得一般电脑的内容转移到移动设备上也不会很复杂。

  但是OpenGL ES也必须考虑到移动平台新层面的一些问题,其中最重要的可算是内存应用和功耗问题。这使得该API需要尽可能小的占用磁盘和内存空间,同时数据总量的交换也必须保持最小化,以此来保证功耗越低越好。

  OpenGL ES还需要照顾到全系列的移动设备,能够让软件渲染模式的特效在尽可能多的硬件上实现。这同时也方便了开发者,这样他们可以开发软件渲染引擎,当技术可行后无缝转移到相应的渲染特性。

  OpenGL ES基本上是OpenGL 1.3子集,同时加入了一些扩展。这使得该API更加灵活,比如现在一些用不到的功能可以暂时删除,当内嵌硬件发展到一定水平后,相应的功能可以从新添加回来。

  目前的OpenGL ES包含两方面基本内容,Common Profile支持全3D功能,保证游戏正常运行。Safety Critical Profile,这是商业软件设计所需要的,华丽的界面在这里不是最优先考虑,安全性成为关键,它只能提供最小化的3D功能。

  OpenGL ES具体特性如下:

Geometry Processing 
- Vertex Arrays 
- Points, Lines, Triangles 
- Matrix Stack 
- Viewport, DepthRange 
- Vertex Lighting 
- ShadeModel

Rasterization 
- Multisampling (optional) 
- Points & anti-aliased points 
- Lines & anti-aliased lines 
- Polygons 
- Face Culling 
- PolygonOffset - fill mode

Texture Mapping 
- 2D Textures 
- Wrap repeat, edge_clamp 
- Compressed Texture 
- TexSubImage, CopyTexImage 
- Multitexture 
- RGBA pixel and packed pixel formats, L, LA 
- All Filters

Fragment Processing 
- Fog 
- Scissor Test 
- Alpha Test 
- Stencil Test (optional) 
- Depth Test (optional) 
- Blending 
- Logic Op 
- Dither

Framebuffer Operations/Miscellaneous 
- Clear 
- ReadPixels / Alpha Test / Dither 
- Flush/Finish 
- Hint 
- Get-static state (constants)


Mali-400 MP是业界首款支持OpenGL ES 2.0规范的多核心2D/3D图形加速器并支持1080p全高清分辨率,Mali-200号称是授权最广泛的OpenGL ES 2.0图形加速器,Mali-50则支持OpenGL ES 1.0、OpenVG 1.0规范。

OpenGL ES 基本知识

OpenGL ES(以后简写为 “GL”)仅关心如何在帧缓存(framebuffer)中渲染(渲染后的值将保存到帧缓存中)。它不支持其他的外围设备与图形硬件关联,例如鼠标和键盘。编程人员必须通过其他的途径获取用户操作,例如 Khronos Open KODE API。

GL在一定数量的可选模式下绘制原始对象。每个原始对象可以是一个点,线段或者一个三角形。每种模式可以独立的改变。每个设置之间不相互影响(虽然一些模式可能最终影响帧缓存中的最后结果)。模式被设置,原始对象被定义,其他GL操作通过在函数或者程序中调用。

原始对象是一组被定义好的数据结构,包含一个或者多个顶点。一个顶点定义了一个点,或一个边的结束点,或者一个三角形的2条边相交的顶点。数据(包括位置坐标,颜色,规格化,纹理坐标)保存在一个顶点中,每个顶点按照顺序,以相同方式,独立的被处理。唯一例外的是,如果一组顶点必须在一个指定的矩形区域内被裁减,这个操作将导致,一些顶点可能被修改,一些新顶点可能被创建。裁减的类型依赖于这组顶点数据代表的描绘类型。

命令永远按照顺序执行,虽然可能命令的实现会有不确定的延时。比如,一个原始对象在必须在任何子序列影响帧缓存之前绘制。它也意味着查询和像素读取操作返回的状态时,之前的所有的GL命令执行完毕。通常,GL 命令必须在其他子序列在造成任何影响之前完成。

在GL中,数据绑定发生在调用的时候。这意味着命令执行时,使用的数据会被解释。即使命令要求一个指向数据的指针,这些数据当调用的时候即被解释,任何子序列的对数据的改变都不会产生影响(除非后继的操作中使用了同样的指针)。

GL提供对3D,2D图形的基本操作。包括特定的矩阵变换,光照方程系数,抗锯齿,像素更新操作。它不提供复杂几何元素的描述或者建模。另一种对这种解决方案的描述是GL提供一些途径去描述如何渲染复杂的几何对象,而不直接描述此类复杂的对象。

GL命令是按照客户端-服务器 模式去解释的。也就是说,程序(客户端)运行命令,这些命令在服务器端解释并且执行。一个服务器可能保持一定数量的GL context对象。每个对象都是对当前GL 状态的封装。一个客户端可能选择连接任何这些context对象中的任何一个。当程序不连接任何一个context时,运行GL 命令会导致未定义的行为。

GL命令的通过窗口系统最大限度的控制帧缓存,窗口系统决定GL在给定的时间内可以访问帧缓存中的哪些点,它还负责与GL交流点的数据结构。因此,没有任何GL命令去定义帧缓存或者初始化 GL。同样,在CRT或者LCD上帧缓存的显示内容(包括某些技术进行的 单独帧缓存值变换,例如gamma纠错)是不被定位到GL中。帧缓存构造发生在GL的外部,同窗口系统相关联。GL的初始化发生在窗口系统为GL分配一个窗口时。EGL API定义了一个简便的途径创建GL contexts和窗口,该窗口可用于连接不同平台的窗口系统。

GL被设计成运行可以运行在一系列图形平台上,并提高图形显示的效果和性能。为了适应多样性,某些GL操作使用理想行为代替了实行行为,因为背叛这种设想是允许的,也规定了一个实现必须遵守的规则使其接近理想的行为。在GL中,这个允许的变化指2个完全不同的GL的实现可以出现像素到像素的不一致,即便相同的输入,或者相同帧缓存配置下。

最后,命令的名字,常数和类型都是用GL作前缀(可以为gl,GL_,GL),这样可以减少与其他包出现姓名冲突。在以后的文档中,前缀可能被省略。

数值计算

GL操作中必须进行一些数值运算。

Common profile下,通常使用浮点数计算,浮点数的范围将在后面的“浮点计算”中有精确的定义。Common lite profile下,通常使用定点数计算,顶点数的范围将在后面的“定点运算”中做更精确的定义,但是也它也可以使用浮点数来计算。

浮点计算

我们不规定浮点数是如何表现的,它们的操作是如何执行的。我们简单的要求数字浮点部分包含足够的比特位和足够大的指数位,所有单独浮点操作结果都精确到1/105。浮点数用来表示位置和规格化坐标时,最重要的是至少精确到232。表示颜色或者纹理坐标,最少精确到210。其他浮点数至少精确到232

x .0=0.x=0

1.x=x.1=x

x+0=0+x

00=1

大部分单精度浮点格式需要满足这些要求。

任何浮点数作为GL命令的输入是合法的,如果提供一个浮点数是未定义的,但是必须保证不会导致GL中断或者结束。在IEEE计算中,例如,对GL命令输入一个负零或者一个未规格化数会产生可预知的结果,而提供NaN或者无穷大会产生未定义的结果。如果x的值不是一个浮点数,以上一致性的规定不需要保持。

定点数计算

内部计算可以即可以使用定点计算,也可以使用浮点计算。定点计算必须精确在±2-15。定点数表示位置或者规格化坐标必须精确到215;表示颜色或者纹理坐标必须精确到210。其他定点值必须精确到215

x.0=0.x=0

1.x=x.1=x;

x+0=0+x=x

00=1

定点数可能导致上溢出或者下溢出,计算的结果是未被定义的,但是不能导致GL中断或者终止。

通常要求

以下的限制对所有的实现都必须被遵守,无论使用浮点数还是定点数计算。32比特位按照16.16划分,16表示分数,16表示整数位。如果一个顶点使用16.16表示,模型视图和映射矩阵用16.16表示,视野空间 和规格化设备坐标空间的点用16.16表示(计算过程中的表达式可以使用充足的动态范围),然后变换管线必须计算视野空间和规格化设备坐标空间的点是有理由的精确(例如:溢出是不被接受的)。

一些计算需要除法。因为某些原因(包括矢量规格化中隐含的除法),除零会导致一个未定义的结果,但是不能导致GL中断或者终止。

阅读(548) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~