转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=3410

从Windows 8开始,DirectX SDK就被合并到Windows SDK里了。June 2010成了最后一次独立发布的DX SDK。大部分情况下,这么做挺方便,VS装好之后就能用了,不再需要单独装DX SDK、设置路径等。但有的时候,这样也会带来些麻烦。

用Windows SDK的不便之处

Visual Studio的用户基本上都使用VS自带的Windows SDK,很少有单独装的。这带来的问题就是,如果VS不升级,SDK就不升级,两者变成一对一的关系了。所以如果你想用VS2012开发D3D11.2,或者VS2013开发D3D12的东西,就没法弄。

另一方面,在Windows上也可以用MinGW和Clang来编译。但它们所带的DX SDK比较古老,而且不全。用June 2010的话,因为sal的关系,编译中会有很多错误。即便绕开了这个问题,仍会有很多的编译警告。

综合来说,用Windows SDK有时候也不好。这时候如果有个独立的DX SDK,反而会便于开发。

通用的DX SDK

昨天我在github上新建了一个项目,叫Universal DX SDK。该项目就试图解决以上两个问题。最终是希望能以June 2010为基础,从新的Windows SDK中提取一些文件,做到一个支持DX9-12,能用于多个版本的VS、MinGW、Clang的DX SDK。

从目前的实验来看,原先KlayGE的D3D11插件里有大量#ifdef,用于区分不同版本的Windows SDK。有了这个Universal DX SDK之后,这些#ifdef都不再需要。代码可读性、可维护性和编译性能都能有所提高。

当然,项目刚上线,目前还在积极开发中。这两天应该可以更新到Win10正式版SDK 1.0.10240.0的功能。D3D 11.2/11.3/12.0都能直接使用,不必纠结VS版本。