托管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人員的從業方向
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表