DirectX

微软平台上多媒体相关的API集合

DirectXDirect eXtension縮寫DX)是由微軟公司建立的一系列專為多媒體以及遊戲開發的應用程式介面。旗下包含Direct3DDirect2DDirectCompute等等多個不同用途的子部份,因為這一系列API皆以Direct字樣開頭,所以DirectX(只要把X字母替換為任何一個特定API的名字)就成為這一巨大的API系列的統稱。目前最新版本為DirectX 12,隨附於Windows 10作業系統之上。

DirectX
目前版本
  • 12 Ultimate(2021年10月5日;穩定版本)
編輯維基數據連結
內建於Windows 95 OSR2
Windows NT 4.0
及之後所有版本
許可協定 編輯維基數據連結

DirectX被廣泛用於Microsoft Windows、Microsoft Xbox電子遊戲開發,並且只能支援這些平台。除了遊戲開發之外,DirectX亦被用於開發許多虛擬三維圖形相關軟件。Direct3D是DirectX中最廣為應用的子模組,所以有時候這兩個名詞可以互相代稱。

DirectX主要基於C++程式語言,並遵循COM架構。

元件

DirectX組成的元件有:

廢棄元件

這些元件曾經也是DirectX的一員,但現在微軟只提供最低程度的維護,也不再建議使用。

歷史

1994年末,微軟即將推出新一代作業系統Windows 95。決定新作業系統的最終價值的因素在於究竟新系統能執行哪些程式。微軟的三個員工:Craig Eisler、Alex St. John、Eric Engstrom十分關心這個問題,因為不少遊戲程式設計師更喜歡在DOS系統下編寫遊戲,這意味着,沒有多少人願意為WIN95編寫遊戲,新作業系統不會獲得多少成功。

DOS允許直接訪問顯示卡鍵盤滑鼠音效卡以及其他系統硬件設施。而Windows 95出於保護儲存系統的目的,限制了對硬件的直接訪問,取而代之的是一套更加規範標準的訪問方法。微軟需要一種方法讓程式設計師在WIN95中也能編寫出高效的程式。此時,離新系統發佈不到幾個月了。St. John和Engstrom聯合解決了這個問題,他們將解決方案稱為DirectX。

DirectX的第一個版本作為Windows Games SDK發佈於1995年9月,它作為Windows API的一部份用以替換Windows 3.1中的DCI和WinGAPI。ATI的一個開發團隊為微軟帶來了基本的遊戲圖像技術,微軟方面,DirectX由專門的團隊負責開發,Eisler為團隊領導,而St. John和Engstrom則成為主程式設計師。

DirectX出現之前,微軟已經將OpenGL包括在Windows NT系統中,而在當時,OpenGL對硬件要求嚴苛,這限制了一些工程師CAD使用者。Direct3D就作為OpenGL的代替品被加入DirectX。隨着硬件技術的發展,OpenGL成為行業標準,一場「戰役」發生在DirectX的支持者和OpenGL的支持者之間,而且前者只支援Windows平台,而後者支援多平台。在實際套用中,遊戲開發者常常兩者同時使用,因為DirectX支援許多OpenGL所不支援的功能,比如音效和輸入裝置。而選擇混合使用OpenGL和OpenAL的隊伍也在壯大。

由此衍生出的「特別DirectX」也作為微軟XboxXbox 360的圖形API,這套API由微軟和NVIDIA公司共同開發,Xbox API和DirectX 8.1比較相似,但跟其他主機科技一樣不能更新,Xbox版本也叫做DirectXbox,但由於商業銷售緣故,還是被簡稱為Xbox。[1]

2002年,微軟發佈了DirectX 9,它支援最新的頂點陰影着色器2.0版本,又於2004年4月將shader model 3.0(SM 3.0)加入了DirectX 9.0c。

2005年4月,DirectShow從DirectX移除,加入到Microsoft Platform SDK[2]

2010年6月7日發佈的DirectX SDK是最後獨立發佈的SDK版本,之後的DirectX SDK被整合進新版的Microsoft Windows SDK裏。例如DirectX 11.2 SDK被放在Windows Software Development Kit (SDK) for Windows 8.1裏。

發佈歷史

DirectX版本 版本編號[3] 作業系統 日期 備註
DirectX 1.0 4.02.0095 1995年9月30日
DirectX 2.0 未知 1996年
DirectX 2.0a 4.03.00.1096 Windows 95和NT 4.0 1996年6月5日
DirectX 3.0 4.04.00.0068 1996年9月15日
4.04.00.0069 之後的DirectX 3.0加入了Direct3D 4.04.00.0069 1996年
DirectX 3.0a 4.04.00.0070 Windows NT 4.0 SP3
1996年12月 最後支援Windows NT 4.0的版本
DirectX 3.0b 4.04.00.0070 1996年12月 3.0a的一個小更新
糾正了一個日文版本下的漏洞
DirectX 4.0 從未發佈[4]
DirectX 5.0 4.05.00.0155 (RC55) Windows NT 5.0的測試版本 1997年7月16日
DirectX 5.2 4.05.01.1600 (RC00) Windows 95發佈的版本 1998年5月5日
4.05.01.1998 (RC0) 只用於Windows 98 1998年6月25日
DirectX 6.0 4.06.00.0318 (RC3) Windows CE上的Dreamcast版本 1998年8月7日
DirectX 6.1 4.06.02.0436 (RC0) 1999年2月3日
DirectX 6.1a 4.06.03.0518 (RC0) 只用於Windows 98 SE 1999年5月5日
DirectX 7.0 4.07.00.0700 (RC1) 1999年9月22日
4.07.00.0700 Windows 2000 2000年2月17日
DirectX 7.0a 4.07.00.0716 (RC0) 2000年3月8日
4.07.00.0716 (RC1) 2000年
DirectX 7.1 4.07.01.3000 (RC1) 只用於Windows Me 2000年8月14日 2D與3D元件分離的最後一版(IDirectDraw7與IDirect3D7)
DirectX 8.0 4.08.00.0400 (RC10) 2000年11月12日 2D與3D元件整合的第一個版本(IDirectGraphic8)與Vertex Shader與Pixel Shader
DirectX 8.0a 4.08.00.0400 (RC14) 最後支援Windows 95的版本 2001年2月5日
DirectX 8.1 4.08.01.0810 Windows XPWindows Server 2003Xbox特別版 2001年10月25日
4.08.01.0881 (RC7) 這個版本用於更早的作業系統
(Windows 98, Windows Me和Windows 2000)
2001年11月8日
DirectX 8.1a 4.08.01.0901(RC?) 2002年 這個版本升級了Direct3D(D3d8.dll)
DirectX 8.1b 4.08.01.0901 (RC7) 2002年6月25日 這個版本修正了DirectShow在Windows 2000上的一個漏洞(Quartz.dll)
DirectX 8.2 4.08.02.0134 (RC0) 和DirectX 8.1b一樣,但包含了DirectPlay 8.2 2002年
DirectX 9.0 4.09.00.0900 (RC4) 2002年12月19日 (IDirectGraphic9)與HLSL
DirectX 9.0a 4.09.00.0901 (RC6) 2003年3月26日
DirectX 9.0b 4.09.00.0902 (RC2) 2003年8月13日
DirectX 9.0c 4.09.00.0903 只用於Windows XP SP2
4.09.00.0904 (RC0) 2004年8月4日
4.09.00.0904 Windows XP SP2,Windows Server 2003 SP1,Windows Server 2003 R2和Xbox 360 2004年8月6日
DirectX 9.0c - 雙月更新 4.09.00.0904 (RC0) 2006年10月更新是最後支援Windows 98、Windows Me和Windows 2000的版本。[5]2005年12月更新和2006年2月更新增加了對XML的支援 兩月更新一次,開始於2004年10月,直到現在,最新版本:DirectX 9.0c Redist Jun 2010(2010年6月)
DirectX 10.0 6.00.6000.16386 Windows Vista 2006年11月30日 開始匯入DXGI(DirectX Graphics Infrastructure)架構
DirectX 10.1 6.00.6001.18000 Windows Vista Service Pack 1與Windows Server 2008 2008年2月4日
DirectX 11 6.01.7600.16385 Windows 7,Windows Server 2008 R2 2009年7月22日 Windows 7 RTM一同釋出
6.01.7601.17514 Windows 7 SP1,Windows Server 2008 R2 SP1 2010年11月23日 KB976932,與Windows 7 SP1一同釋出
6.00.6002.18107 Windows Vista SP2,Windows Server 2008 SP2 2009年10月26日 KB971512
DirectX 11.1 6.02.9200.16384 Windows 8 2012年10月26日 與Windows 8一同釋出,Windows 7 SP1升級後部份支援
DirectX 11.2 6.03.9600.16384 Windows 8.1Windows RT 8.1Windows Server 2012 R2 2013年10月18日 包含於作業系統,無獨立程式包
DirectX 12 10.00.10240.16384 Windows 10 2015年1月18日 包含於作業系統,無獨立程式包,並支援Xbox One
DirectX 12 Ultimate 10.00.19041.0928 Windows 10 build 19042 2020年11月10日 加入DirectX Raytracing Tier 1.1 光線追蹤,VRS(可變速率着色),Mesh Shader,Sampler Feedback(取樣器反饋)

相容性

硬件製造商要為每款硬件產品編寫驅動程式來支援DX,甚至一些硬件商只編寫DX的驅動,這意味着要使用這款硬件就必須安裝DX,早期的DirectX版本內建了所有支援DX硬件的驅動程式,後來使用者可以通過自動更新系統下載適合的驅動。

DX10之前的所有DirectX版本都保持向下相容性,即新版本相容舊版本,例如安裝了DX9的電腦,依然可以執行由DX6編寫的程式碼。安裝了DX11/12的電腦,依然可以執行由DX9C編寫的程式碼,不過小部份依然需要安裝DX9C。

各種版本

.NET Framework

2002年間,微軟發佈一個相容.NET Framework的DX版本,因而允許程式設計師充分利用.NET的特性編寫DX程式,這套API被稱為Managed DirectX英語Managed DirectX(MDX)。2005年微軟在DirectX 9.0c版本上開發一套正對.NET平台的Managed API,即Direct 9.0 for Managed Code 1.0(簡稱Managed DirectX)。

2005年12月、2006年2月、4月、8月,微軟相繼發佈DirectX的更新版本,使之支援.NET 2.0框架。然而.NET 2.0版本至今只是個測試版。

GDC 2006期間,微軟終止開發Managed DirectX,改推出了XNA framework,是一組基於Managed DirectX,說明程式設計師更輕鬆的編寫遊戲的框架,將DirectX,Shader,進階着色器語言(HLSL)以及其他工具整合到一起。2006年12月11日,微軟對Windows XP提供免費的XNA Game Studio Express RTM的下載服務。

DirectX 10

Windows Vista及以上的作業系統才支援DirectX 10(也就是說,DirectX 9是最後一個支援Windows XP的版本),比起之前的版本,DX10做了重大的變動:增加了XInput用以處理XBOX 360手柄的支援,DirectSound將被XACT替換。DirectX 10也減少了對音效硬件加速的支援,更多的使用CPU來運算音效。

Direct3D 10.1是DirectX 10的改進版,隨Vista SP1出貨。

DirectX 11

DirectX 11是DirectX 10的改良,只對效能和擴展性進行最佳化,主要改進在提供Shader Model 5.0,加入對MSAA的直接采樣控制。大幅改進多執行緒效能,提供三個獨立的介面。進一步提高紋理壓縮,鑲嵌(tessellation)處理的效能[6][7],並加入Compute Shader(DirectCompute)來支援GPGPU,提供新版HLSL語言。

DirectX 11.1是DirectX 11的改進版,隨Windows 8出貨。Windows 7 SP1升級後部份支援。

DirectX 11.2是DirectX 11.1的改進版,隨Windows 8.1出貨。

DirectX 12

DirectX 12將更好支援多核心、多執行緒的最佳化,降低GPU處理瓶頸,並強化跨平台功能,可有效支援微軟各式平台,並提升硬件功耗表現。隨Windows 10 出貨並支援Xbox One。

2019年3月13日,微軟於DirectX Developer Blog表示,未來魔獸世界8.1.5的遊戲更新將使Windows 7 平台用戶也能體驗 DirectX 12的多線程彩現優勢,並提高遊戲效能。且未來陸續也會有其他廠商推出相關更新,將更多的 D3D12 遊戲移植到 Windows 7。[8]

DirectX標誌的變更

縱觀DX的各個版本,X都是一個核輻射警告標誌或一隻螺旋槳葉片。這個設計引發了不小的爭議,因為DX計劃的原名叫做「曼哈頓計劃」,這個名稱來源於美國的核武器研製計劃,最終美國使用核武器轟炸了日本的廣島長崎,這在暗示DX產品要替代日本在電子遊戲方面的霸主地位。這一說法被微軟公開否定,微軟表示這只是出於藝術設計的考慮。[9]

參見

其他API

參考資料

  1. ^ J. Allard, PC Pro採訪頁面存檔備份,存於互聯網檔案館), 2004 4月
  2. ^ 存档副本. [2007-06-26]. (原始內容存檔於2007-01-25). 
  3. ^ 版本編號由微軟的DxDiag工具獲得(4.09.0000.0900以及更高版本,在開始功能表|執行中輸入DxDiag即可),編號統一使用x.xx.xxxx.xxxx格式,而微軟網站上給出的編號使用x.xx.xx.xxxx格式,如果網站上編號為4.09.00.0904,那麼在電腦上安裝後,會變為4.09.0000.0904。
  4. ^ DirectX 4從未發佈過,Raymond Chen在他的書《The Old New Thing》中解釋說,DirectX 3發佈之後,微軟開始同時開發DX4和5,只是增加一些小特性的DX4版本會在短時間內完成,而DX5會增加大量新內容,遊戲開發者對DX4新特性的失望導致了DX4計劃的擱置。之後,微軟將重心完全轉移到DX5開發上。 Chen, Raymond. Etymology and History. The Old New Thing 第一版. Pearson Education. 2006年: pg. 330. ISBN 978-0-321-44030-3. 
  5. ^ DirectX End-User Runtimes (October 2006). [2008-07-24]. (原始內容存檔於2019-09-24). 
  6. ^ What's next for DirectX? A DirectX 11 overview—A DirectX 11 overview. Elite Bastards. 2008-09-01 [2008-09-04]. (原始內容存檔於2008-09-04). 
  7. ^ DirectX 11: A look at what's coming. bit-tech.net. 2008-09-17 [2011-01-27]. (原始內容存檔於2011-06-15). 
  8. ^ World of Warcraft uses DirectX 12 running on Windows 7. Microsoft DirectX Developer Blog. 2019-03-13 [2019-03-13]. (原始內容存檔於2019-03-12) (美國英語). 
  9. ^ David Craddock. Alex St John Interview. Shack News. 2007年3月 [2007-04-04]. (原始內容存檔於2007-04-07). 

外部連結