自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 的后續了。不知道是悲哀還是無奈,就個人來說自己早已沒有當年的沖勁,在迷惑之余也只能靜靜地站在一旁隔岸觀火,不再想摻一腳了,累。