在同一代码文件中包含Directx 9和10

时间:2012-07-02 12:44:44

标签: c++ header directx

那个问怪物的人,在这里,再次

我看到他们使用不同的可执行文件,为一个为directx 9和10创建的游戏。可以在代码文件中包含“d3d9.h”和“d3d10.h”,然后选择direct3d 9函数或者direct3d 10个函数,具体取决于例如一个像旗帜一样的参数?我不是在谈论使用direct3d 10函数使用direct3d 9上下文和对象来绘制内容。

我想要做的是创建一个名为init3D(UINT version);的函数,它将创建一个directx 9或directx 10对象和设备,具体取决于version。我不知道这是否可行,或者我必须创建两个不同的可执行文件(如果我决定使用d3d8,则为3)

感谢您的帮助,并原谅我对某些C ++技术缺乏了解。

3 个答案:

答案 0 :(得分:1)

是的,这完全有可能。

唯一的问题是两者的库必须存在于目标机器上。因为你已经与d3d10链接,所以必须在机器上安装它才能使.exe甚至在你想要在d3d9模式下运行时加载,而在xp机器上也不会这样。

为避免这种情况,您需要使用动态链接来调用任何函数,以便只在运行时加载库。查找LoadLibrary和GetProcAddress。幸运的是,对于direct3d,您可能称之为的唯一全局函数是“创建”函数。 D3DX会引起同样的问题

答案 1 :(得分:1)

您是否明白DirectX 8不受支持? DirectX 10包含DirectX 9,因此没有理由要求这两者。

您应该能够根据安装的DirectX版本有条件地包含头文件。

这是一个如何做到这一点的例子,尽管它是用C#编写的:

How to code to get direct X version on my machine in C#?

传统方法是安装应用程序安装时应用程序使用的DirectX版本。任何其他方式都应被视为黑客并且长期不受支持。

答案 2 :(得分:1)

另一条评论。你想在什么平台上运行它?

Windows vista和更新版本将在directx9级硬件上运行directx11,directx11 将运行(显然没有像tessalation着色器这样的新功能)。

如果你不需要支持XP(现在它真的变得很老了......)那么就忘了dx9和dx10并且只使用directx11