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