OpenGL ES 1.x 2.x 概述

时间:2021-11-30 04:36:41

主要参考网站:http://www.khronos.org/opengles

OpenGL_ES是khronos协会从OpenGL裁剪定制而来的,专为手机,游戏机等嵌入式设备而设计。它的接口其实和Open_GL很类似。

OpenGL_ES有几个主要版本,但对游戏开发来说,需要关注的只有两个:
OpenGL_ES_1.x_和OpenGL_ES_2.x

两者的特性和主要区别如下:

OpenGL_ES_1.x:
为固定渲染管线(Fixed_Function)而设计。
子版本包括:1.0,1.1。
1.0从OpenGL_1.3裁减而来;1.1从OpenGL_1.5裁减而来。1.1向下兼容1.0。
经研究,1.1因为更先进,而且相比1.0增加的特性也都很有用,所以基本上不用考虑1.0了。
1.1和1.0的变化不算很大,应该芯片的价格也不会高出很多?当然我并不确定。
1.1的技术规范参见:es_full_spec.1.1.12.pdf
或者:es_cm_spec_1.1.12.pdf(篇幅较短,只叙述了相比OpenGL_1.5的差异)

OpenGL_ES_2.x
为可编程渲染管线(Programmable)而设计。
目前只有2.0这一个子版本,从OpenGL_2.0裁减而来。
和1.x的区别是可以支持vertex和pixel shader,因此能够实现更多的特效。
另外2.0就不再支持1.x里面的固定管线功能了,也就是说2.x并不向下兼容1.x。
技术规范参见:es_full_spec_2.0.22.pdf
或者:es_cm_spec_2.0.22.pdf(篇幅较短,只叙述了相比OpenGL_2.0的差异)

=========================

所以,我们其实就是在1.1和2.0之间做出选择。

1.1就能达到甚至略超过PSP的效果了(PSP实际上是一个PS2的简化版,它也不支持vertex或pixel shader)。
2.x能达到更好的效果(大约接近DX9),但开发复杂程度(包括程序和美术)必然更高。

查新闻发现,AMD于2008年6月12号才率先通过2.0的认证,所以可以认为2.0的芯片还是很先进很高端的,想必这类芯片价格会很高?

总的来说还是一个选择问题:如果希望更低的成本(包括软件和硬件两方面)那就选择1.1,并且其实1.1也已经能实现非常好的效果了;而如果追求最顶尖和图形质量和效果,定位为高端产品,那么就可以选择2.0,但成本和开发周期会很高。

我个人推荐选择1.1的芯片,我认为基本上2.x的接口是针对游戏主机而非掌机设计的,据说PS3就采用了ES_2.x。
毕竟无论是以掌机(或者手机等便携设备)的耗电量,成本,还是屏幕尺寸来看,1.x都更有优势。jsr184标准的硬件实现就是ES_1.x。
即使在以后来看,1.x的芯片由于有着特殊的意义,也不会消亡,khronos官方也声称未来还会推出1.2。

=========================

关于1.1的两个细节问题:

<1> 1.1有一个扩展包:OpenGL_ES_1.1_Extension_Pack。
这个扩展包是一些可选特性的集合,可以添加在1.1之上,从而支持一些OpenGL_1.5有,但OpenGL_ES_1.1没有的功能。
官方的说法是,这个扩展包对图形质量和效率带来明显的提升,并且他们将于未来的ES_1.2中强制性地包括这些扩展内容。
扩展内容不多,所以我把它们罗列如下:
GL_OES_texture_env_crossbar
GL_OES_textured_mirrored_repeat
GL_OES_texture_cube_map
GL_OES_blend_subtract
GL_OES_blend_func_separate
GL_OES_blend_equation_separate
GL_OES_stencil_wrap
GL_OES_extended_matrix_palette
GL_OES_framebuffer_object
具体请参见:opengles_spec_1_1_extension_pack.pdf。
经过研究,我个人推荐增加对这个扩展包的支持。

<2> 据说1.1支持common和common lite两种profile。
common lite profile只支持定点数,而common profile既支持定点数又支持浮点数。
不清楚这只是软件配置还是要影响硬件配置,另外也不清楚对于芯片成本有没有影响。但这个选择其实和CPU是否具备FPU协处理器有关系,如果CPU根本就不支持浮点数运算,那么事实上GPU选择common lite就比较好,反之也一样,所以说这一点上CPU和GPU是相关的。

==========================

关于S3D 3.0:

支持GLES之后,S3D引擎将升级到3.0,除了硬件加速渲染之外,还会扩展physics engine等很多其它内容。
使用S3D 3.0进行开发的游戏将全面达到或超过PSP游戏的水平。
在RenderAPI方面,需要进行全新的设计,这是由于以前S3D 1.x和2.x都工作在软件渲染模式下,其API设计不足以满足硬件加速的需要,如果只是用GLES实现这些接口就只能达到加速的目的,而不能提升图形效果。因此需要进行全面的重新设计。
S3D 3.0将不再向下兼容软件渲染模式。需要开发软件渲染的工程可以直接采用旧版本的S3D。

==========================

附OpenGL ES 1.1 SDK下载地址:
For UIQ 3:https://developer.sonyericsson.com/getDocument.do?docId=84947
For symbian 3rd:
http://www.forum.nokia.com/info/sw.nokia.com/id/36331d44-414a-4b82-8b20-85f1183e7029/OpenGL_ES_1_1_Plug_in.html
注意这只是一个工具条,而sample其实就在3rd的SDK里面。
注意:用3rd的模拟器调试GLES会非常慢,而GLES代码又不能直接在PC上运行,所以这会是一个很麻烦的问题。AMD发布过ES 2.0的emulator但我暂时没找到1.1的。如果有看到1.1的请告诉我。
有一个比较麻烦的方法是为RenderAPI写一个封装,把GL和GLES都封装进去,然后采用模块插件式管理,只有上机时才替换成ES1.1的实现,平时开发就用GL1.5的实现,应该可行。

附GLBenchmark网址:http://www.glbenchmark.com/index.jsp

附两篇比较有意思的帖子:
<1> OpenGL版本与OpenGL扩展机制  http://www.azure.com.cn/article.asp?id=181
注意这篇帖子只是说OpenGL,而不是OpenGL_ES,但仍然有参考价值,毕竟OpenGL_ES都是从OpenGL裁减而来的。
<2> Direct3D_vs_OpenGL的尾声    http://www.gamerhome.net/bbs/viewthread.php?tid=226786

--------------------------------
 

OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。

OpenGL ES 是从 OpenGL 裁剪定制而来的,去除了 glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POLYGONS)等复杂图元等许多非绝对必要的特性。经过多年发展,现在主要有两个版本,OpenGL ES 1.x 针对固定管线硬件的,OpenGL ES 2.x 针对可编程管线硬件。OpenGL ES 1.0 是以 OpenGL 1.3 规范为基础的,OpenGL ES 1.1 是以 OpenGL 1.5 规范为基础的,它们分别又支持 common 和 common lite 两种profile。lite profile只支持定点定点实数,而common profile既支持定点数又支持浮点数。 OpenGL ES 2.0 则是参照 OpenGL 2.0 规范定义的,common profile发布于2005-8,引入了对可编程管线的支持。

OpenGL ES 还有一个safety-critical profile。