自1996年开始,3D API之战延续至今,并随着GPU程序的广泛应用而炮火渐希,淡出争论的焦点。如果非要论个输赢的话,应该是OpenGL绊倒了自己,以致大业未成。而OpenGL ES异军突起,反而要了OpenGL的老命。
战局的高潮起于2001年,为对抗飞速发展的D3D,迫于OpenGL社群的压力,OpenGLARB开始加快工作进程,于8月推出OpenGL 1.3规范,次年OpenGL ARB成立OpenGL2.0工作组,号称要实现超越D3D的下一代技术。中间发布了1.4和1.5两个过渡版本,几经波折,一直到2004年,OpenGL2.0规范才正式发布。而这时,已经时过境迁,大量新兴功能出现,在D3D吸取OpenGL的优点的同时,OpenGL的扩展也引入了一些D3D的功能模式,开发人员更多的是在和日新月异的扩展打交道,核心模块已经不是大家关注的焦点了。 ) Q% }5 Q OpenGL 2.0的最重要部分是一个新的架构,一方面精简掉原来冗余和过时的东西,一方面要充分和Shader结合。而最终的结果是在这两方面都不成功。# s& n: U/ c" i3 W; } 在精简方面,首先,提供对原有功能的兼容性支持虽然是好事,但大大冲淡了采用新架构的必要性,结果是实际应用的是包含了所有版本的功能集合,成了一个更大的包袱。虽然ARB又提出要制定Pure OpenGL 2.0,但为时已晚,Khronos Group的OpenGLES已经借嵌入式的大发展成为实际上的精简OpenGL。而且OpenGL 2.0的精简仍然保留了很多高端工作站的功能特性,远不如OpenGLES有吸引力。( x( }; M4 u- A 在集成shader方面,ARB内部似乎斗争得很厉害。3D Labs掌握2.0规范的主导权,出于高端背景,3DLabs似乎想把它的高端风格带入OpenGL,并想做产业的领头羊。nVidia已经有了CG,希望CG能成为OpenGLshader的标准。ATI在和nVidia做激烈的竞争,非常不愿看到CG成为标准,为了对抗而开发了自己的RenderMonkey。最终的妥协是他们由3DLabs带头花费2年重新创造了GLSL。有人认为nVidia虽然失败了,但它和ARB官僚体系的努力抗争依然精神可嘉。尽管各厂商纷纷表示支持GLSL,但对软件开发者而言,大家更喜欢成熟稳定兼容性好的CG。CG是跨平台的,而且其语法和D3D的HLSL非常类似,多数情况下不需修改就能通用。CG有丰富的工具支持,有丰富的文档和样例,有活跃的社区,并且可以和HLSL共享很多资源。GLSL还没诞生就确定要和成功的CG争夺用户。
2004年后,OpenGL的进程几乎再度停滞,致使PBuffer的问题困扰OpenGL用户3年之久。OpenGL2.0也是雷声大雨点小,几乎没听说过什么产品正式用了2.0,本来说会支持OpenGL的PS3也是用OpenGLES加CG。2006年3月,OpenGL ARB宣布,将于年底前将OpenGL交给Khronos Group管理。: r# P. i5 e3 G! ^ 有人说OpenGL终于可以脱离ARB的官僚管制,在Khronos Group的手下将会象OpenGL ES一样发扬光大。但是OpenGL的残局已经很难收拾,而且长于嵌入式领域的Khronos Group也未必对中高端图形API操作自如。
微软这一边也并非一番风顺,自2000年11月就发布了DirectX8,D3D的实用性已经大大增强,但升级移植的过程让开发者们倍感痛苦。而今,随着DirectX10的临近,开发者们又要痛一次。dotNet平台似乎给开发者们带来了希望,在有人仍在大肆诟病dotNet平台时,已有不少厂商发行了基于MDX(Managed DirectX)的游戏和应用。然而已经Beta的MDX2.0中途夭折,让不少急性子的开发者叫苦不迭。而后又传来WinFX的Media3D和XNA将缺省使用业界标准的右手系,让习惯了D3D左手系的开发者苦笑不得。 Direct3D vs OpenGL的尾声(转)真是凄惨,在某种程度上来说,程序员才是可以随时被人左右,玩弄于股掌之中。一开始学图形开发的时候跟了DirectX8,买了一些启蒙的书自己嚼。后来下了决心开始学OpenGL,并且一发不可收拾,一直用到现在早已荒废了DX知识。打从微软开始频繁地更新DX9的时候就觉得DX迟早有一天会有翻身的机会,现在看来这个日子已经来到了。感觉上微软那软件大哥大的实力还是显示出来了,无论是官方的帮助文档,还是业内的社区网站,都比较倾向DX(Gameres,Gamedev)。况且OGL的2.0版本已经和 一样,成了Duke Nukem If Ever 的后续了。不知道是悲哀还是无奈,就个人来说自己早已没有当年的冲劲,在迷惑之余也只能静静地站在一旁隔岸观火,不再想掺一脚了,累。 |