托管DirectX的歷史

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

介紹

DirectX是一組豐富多媒體API(rich multimedia API),它通過一組標準的接口讓開發者具有了開發高性能應用程序的能力。DirectX第一版是對應于Windows95,當時被稱為“Game SDK”。從此以后,已經發布了八個版本了,但是,這些API都是為C/C++開發者設計的。對于業界所有的開發者來說訪問DirectX所提供的功能都是不容易。

托管DirectX的歷史

   2002年11月20日,隨著DirectX 9的發布,第一個公開版的托管DirectX發布,但是實際上,這個項目已經開發了有一段時間了。在DirectX 8.1開發的末期,當時我正在做用Visual Basic編寫DirectX程序的工作,此時開始我接觸到Visual Studio.NET和.NET運行時的第一個beta版,很明顯,這就是我未來的開發方向。于是,我開始做原形“DirectX.NET”,也就是現在的托管DirectX。

   從一開始,我們就把托管DirectX設計的和原始API一樣強大,僅僅差一小點。過去,DirectX的Visual Basic使用者發現和原始API比起來使用VB開發程序缺少一些功能。原因既是因為Visual Basic的運行時,也是因為過分封裝的DLL。在DirectX 8中,我們通過移出大多數核心性能的API組件--Direct3D的封裝層來試圖消除一些性能瓶頸。我們把Direct3D API直接放到類型庫(type library)中,而使用代理DLL來組裝數據。這樣得到的性能提高是顯而易見的,大部分情況下,這樣做使API更加復雜了,特別是對于Visual Basic開發者來說。

   DirectX 8發布之后,我們發現這些API顯然并不容易使用。示例程序不容易理解,代碼也不像“通常”的Visual Basic應用程序。大部分Visual Basic開發者發現這些API使用太過復雜,而C++開發者沒有任何充分的理由轉變陣營。雖然在家庭游戲編程愛好者中間還是比較流行,但是游戲工作室并沒有意識到我們的存在。我們的新API必須滿足工作室的需求。它需要快速、易用,它能給那些使用C++的開發者“變心”的充分理由。于是托管DirectX的理念就這樣產生了,而現在我們需要做的就是去實現它。

   2002年美國圣何塞的游戲開發者大會(Game Developers Conference,GDC)上,托管DirectX的第一個Alpha發布。它是基于DirectX 8.1的運行時,使用C#編程。在這一版中,我們包含了大部分原始DirectX組件,包括DirectMusic(在正式版已經取消了)。唯一沒有包含在此Alpha版的是DirectDraw和DirectShow,主要是因為我們不知道是否應該包含此組件。回頭看看這一版,我仍然吃驚于我們前進得這么多了。現在,我已經不再進行Visual Basic DLL的查錯工作,而是進行DirectX API和C#的協同工作。這里采用的一對一的映射:DirectX中的每個函數(function),常數(constant)和結構(structrue)。

   這一版對我們的幫助非常大。它證明了托管DirectX運行時的可行性,用戶的回復讓我們確實的感到驚喜。它帶給我們最重要的東西就是讓我們知道了層(layer)性能上的不足。雖然在最好的情況下,我們能得到和原始API相同的性能,但是就算是在一些簡單的應用(比如說Cube Map sample),托管版本都只能達到用C++編寫的原始版本的40%的幀率。我們沒有完成預定的目標。

   于是,我們用接下來的幾個月準備下一版——DirectX 9的第一個beta版。我們著重處理所有主要的性能瓶頸,添加了對DirectDraw的支持,刪掉了對DirectMusic支持,提高了易用性。我確信我們已經完全支持C#開發者群和托管代碼。我們讓他們實際使用這些API來測量我們到底讓其更簡單了多少。我們很快就收到了回復,它們有著共同的觀點:性能很好。這些回復的另一層意思是:很多人渴望看到發布新的版本。托管DirectX不像其他托管API,它看起來更像COM API。所有的.NET組件都有著統一的接口,但是托管DirectX DLL卻完全不同。我們的項目有兩個目標:讓它更快、讓它更易用。很明顯我們提前完成了任務。

   在Beta1之后我們直接開始完全重新設計API。我們和很多人進行交流:.NET運行時團隊人員、beta版用戶,從我們能夠想到的任何可以找出當前版本缺陷的地方,收集了大量的回復,并開始修正它們。針對所有需要跟進設計的組件,我寫了一堆設計指導,我們的工作就是讓API按照指導上面的方向前進。一些改變很容易實現,比如casing changes。在DirectX中(其實一般的COM也是),常量(constants)名和結構(structure)名通常在所有的caps中描述,在.NET運行時中,這些東西需要合理的包裝。其他比如添加類(class)對枚舉(enumeration)的支持這些實質上是更深入的改進。最后,我們發布了beta2版,焦急的等待著用戶的回復。

   無數肯定我們工作的回復讓我終于安下心來。我們走對了,API很好用。下一個beta版開發周期提醒著我們,我們還有很多工作要做,精煉我們的設計指導和我們的API。在DirectX 9發布前一個月,一個公共的beta版發布了。這一版只包括了DirectX運行時,并沒有完整的SDK,但是包含了托管DirectX。托管DirectX來臨的聲音已經響起很多次了,這一次才是很多開發者接觸托管API的“初夜”。沒有任何例子和文檔,人們如何使用它呢?這是對我們的一個巨大考驗(litmus test)。雖然沒有任何人的指點,但是人們還是開始使用它了。我們收到的回復都是些肯定的意見,雖然沒有什么實質的東西。人們在網站發表文章解釋如何使用這些API。當最終版在11月份發布的時候,我們已經完成了我們預定要做的東西。

包含的名字空間

   托管DirectX API包含一組互相聯系的名字空間,每個名字空間都包含了不同的函數。公共的功能被包含在“Microsoft.DirectX”中。完整的名字空間列表見表一:

   表一:托管DirectX名字空間

Microsoft.DirectX                                     父名字空間,包含了所有公共代碼

Microsoft.DirectX.Direct3D                            Direct3D圖形API和D3DX幫助類(Helper Library)

Microsoft.DirectX.DirectDraw                          DirectDraw圖形API

Microsoft.DirectX.DirectPlay                          DirectPlay網絡API

Microsoft.DirectX.DirectSound                         DirectSound音頻API

Microsoft.DirectX.DirectInput                         DirectInput用戶輸入API

Microsoft.DirectX.AudioVideoPlayback                  簡單的音頻和視頻回放API

Microsoft.DirectX.Diagnostics                         簡單的診斷API

Microsoft.DirectX.Security                            DirectX代碼安全的基本結構(structrue)

Microsoft.DirectX.Security.Permissions                DirectX代碼安全的訪問類

   如你所看見的,大多數相關的函數都包含在DirectX中。在本書的課程中,我們主要學習Direct3D,但是同時也會涉及其他部分的。

讓我們上路吧

   現在,我們已經知道一些基礎信息,我們有足夠的信息可以開始編寫一些托管DirectX程序了。但是在開始編寫之前,有些事情你應該知道。

   首先,你需要一個代碼編輯器和運行環境。我建議使用Visual Studio 2003,這也是微軟公司所推薦的。不管你使用什么編輯器,你都需要.NET 1.1版運行環境,你可以在配套光盤中找到它的安裝文件(如果你安裝Visual Studio 2003,你就不用手動安裝了,程序會自動安裝在你的機器上)。

   其次,你需要安裝DirectX 9 SDK Update Developer Runtime。我建議你安裝配套光盤中的DirectX 9 Software Development Kit Update,它不但包含DirectX 9 SDK Update Developer Runtime,還包括很多例子和托管DirectX的文檔。

   前面幾章的圖形例子能在幾乎所有目前的主流顯卡上運行。但是,之后的例子則需要高級的支持“頂點(vertex)”和“像素點級渲染(pixel shaders)”技術的顯卡。geForce3之后的顯卡就能夠滿足了。不過,我推薦使用支持第2代渲染模型(shader model 2)技術的顯卡(Radeon 9700以后的顯卡)。

 在我們正式開始編寫托管代碼之前,我需要提醒你:這本書不適合編程初學者,本書是為了那些已經有豐富的代碼編寫經驗正在尋找編寫豐富多媒體客戶程序相關信息的程序員。本書的代碼使用C#編寫,配套光盤上也有Visual Basic.NET 版本的代碼。

   配套光盤上包含DirectX 9 SDK Update,所有本書的代碼(C#和Visual Basic.NET兩個版本皆有)。你也可以在里面找到.NET 運行時1.1版。你也可以在微軟公司網站http://www.microsoft.com)下載DirectX SDK和.NET運行時。

   當一切就緒之后,我們就可以開始使用托管DirectX了。現在,讓我們來實際的編寫一個“Big Game”吧。


fans1譯 2011-02-23 05:01:54

[新一篇] 會議與溝通

[舊一篇] 你的定位,你的一生--解讀IT人員的從業方向
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表