DirectX,(Direct eXtension,簡稱DX)是由微軟公司建立的游戲編程接口。由C++編程語言實現,遵循COM。因為DX的功能比OpenGL更全面而被多數PC游戲開發商采用。最新版本為DirectX 10.1和DirectX 9Ex (2006年11月30日),兩者均只可於Windows Vista上使用。
DirectX 6之前,在Windows 3.1至Windows 98SE 之間,曾有WinGAPI的出現。很多Windows游戲需要DirectX。DirectX包含DirectGraphic、DirectPlay、DirectSound、DirectInput、DirectSetup等部份。Direct3D與DirectDraw已集成成DirectGraphic,而DirectShow亦已自原本的DirectX SDK中移到Windows平台SDK了。Redist Package 是媒體開發底層API,通過它可以開發游戲和其它多媒體應用程序。
元件
DirectX 組成的元件有:
DirectX Graphics,包含二組 APIs(DirectX 8.0 onwards):
DirectDraw:用於繪制 2D Graphics(en:raster graphics)(不建議使用,雖然目前仍有大量的使用者)。
Direct3D(簡稱D3D):用於繪制3D圖形(3D graphics)
DirectInput:用於結合鍵盤、鼠標、搖桿,或其它的游戲控制器(Not updated since 8 except for XInput,專門提供給 Xbox360 的控制器。並建議以WM INPUT取代鍵盤與鼠標。)
DirectPlay:用於網絡游戲連接溝通(配合DirectInput使用,上次的更新版本是version 8. 目前已不建議使用)
DirectSound:用於錄音,並且記錄波形音效(waveform sound)
DirectSound3D(簡稱DS3D):用於3D音效(3D sounds)的錄音。
DirectMusic:用於DirectMusic Producer的錄音。
DirectX Media:包含DirectAnimation 可用於2D 的網頁動畫(web animation),DirectShow可支持多媒體錄音(multimedia playback)以及數據流媒體(en:streaming media),DirectX在網頁上的轉換,還有Direct3D 可保留3D graphics更清晰的解析。DirectShow 亦包含有en:DirectX plugins 用於en:audio signal processing以及 DirectX Video Acceleration加速影音音效(video playback)。
DirectX Media Objects:支持數據流對象(streaming objects),像是編碼(encoders)、解碼(decoder)以及效果(effects)。
DirectSetup:用於DirectX 元件的安裝,並非完全是 API。
歷史
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”也作為微軟Xbox和Xbox 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].
發布歷史
DirectX版本
版本編號
操作系統
日期
備注
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
最後支持Windows NT 4.0的版本
1996年12月
DirectX 3.0b
4.04.00.0070
3.0a的一個小更新
糾正了一個日文版本下的漏洞
1996年12月
DirectX 4.0
從未發布
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)
DirectX 8.0a
4.08.00.0400(RC14)
最後支持Windows 95的版本
2001年2月5日
DirectX 8.1
4.08.01.0810
Windows XP, Windows Server 2003和Xbox特別版
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?)
這個版本升級了Direct3D(D3d8.dll)
2002年
DirectX 8.1b
4.08.01.0901(RC7)
這個版本修正了DirectShow在Windows 2000上的一個漏洞(Quartz.dll)
2002年6月25日
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)
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的版本。[3]2005年12月更新和2006年2月更新增加了對XML的支持
兩月更新一次,開始於2004年10月,直到現在,最新版本:2008年6月7日
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
?
?
2009年第四季(預計)
注釋:
DirectX 4從未發布過,Raymond Chen在他的書《The Old New Thing》中解釋說,DirectX 3發布之後,微軟開始同時開發DX4和5,只是增加一些小特性的DX4版本會在短時間內完成,而DX5會增加大量新內容,游戲開發者對DX4新特性的失望導致了DX4計劃的擱淺。之後,微軟將重心完全轉移到DX5開發上。[4]
版本號由微軟的DxDiag工具獲得(4.09.0000.0900以及更高版本),編號統一使用 x.xx.xxxx.xxxx 格式,而微軟網站上給出的編號使用 x.xx.xx.xxxx 格式,如果網站上編號為4.09.00.0904,那麼在電腦上安裝後,會變為4.09.0000.0904。
兼容性
硬件制造商要為每款硬件產品編寫驅動程序來支持DX,甚至一些硬件商只編寫DX的驅動,這意味著要使用這款硬件就必須安裝DX,早期的DirectX版本自帶了所有支持DX硬件的驅動程序,後來用戶可以通過自動更新系統下載適合的驅動。
一些驅動只支持某個版本的DX,DX10之前,所有DirectX版本都保持向前兼容性,即新版本兼容舊版本,例如安裝了DX9的電腦,依然可以運行由DX6編寫的游戲。
.NET Framework
2002年間,微軟發布了一個DX版本兼容了.NET Framework,因而允許程序員充分利用 .NET的特性編寫DX程序,這套API被稱為Managed DirectX(MDX)
2005年12月、2006年2月、4月、8月,微軟相繼發布DirectX的更新版本,使之支持 .NET 2.0 框架。然而 .NET 2.0版本至今只是個測試版。
GDC 2006期間,微軟推出了XNA框架,一個基於Managed DirectX,幫助程序員更輕松的編寫游戲的框架,將DirectX,高級著色器語言 (HLSL)以及其他工具集成到一起。2006年12月11日,微軟對Windows XP提供免費的XNA Game Studio Express RTM的下載服務。
DirectX 10
Windows Vista是DirectX 10唯一支持的操作系統,比起之前的版本,DX10做了重大的變動:DirectInput將被XInput替換,DirectSound將被XACT替換。DirectX 10也減少了對音效硬件加速的支持,更多的使用CPU來運算音效。亦有謠言說微軟打算發布一個補丁包使DX10支持XP,以此讓更多的XP用戶購買Vista。[5]
各種API
除了DX,仍然有許多其他的API選擇,然而,沒有一種可以完全等同於DX的功能,但可以組合起來使用,例如SDL、OpenMAX、OpenML、OpenGL、OpenAL、FMOD等。這些往往擅長於某個方面,而且支持多平台,且多是開源的。也有一些替代品旨在包攬DX的全部功能,比如Wine。
DirectX標志的變更
縱觀DX的各個版本,X都是一個核輻射警告標志或一只螺旋槳葉片。這個設計引發了不小的爭議,因為DX計劃的原名叫做“曼哈頓計劃”,這個名稱來源於美國的核武器研制計劃,最終美國使用核武器轟炸了日本的廣島和長崎,這在暗示DX產品要替代日本在電子游戲方面的霸主地位。這一說法被微軟公然否定,微軟表示這只是出於藝術設計的考慮。.[6]
DirectX 1.0–6.0
DirectX 7.0
DirectX 8.0
DirectX 9.0
DirectX 10.0