DirectX 与 OpenGL-Direct3D vs OpenGL 的尾声

作者: 来源:CSDN 博客 日期:2009-10-19

自 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 左手系的开发者苦笑不得。

相关文章