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

Include Directx 9 and 10 in the same code file

本文关键字:Directx 包括 代码 文件      更新时间:2023-10-16

又问奇怪事情的家伙

我看到他们使用不同的可执行文件,用于为 directx 9 和 10 创建的游戏。是否可以在代码文件中包括"d3d9.h"和"d3d10.h",然后选择 direct3d 9 函数或 direct3d 10 函数,具体取决于,例如,作用类似于标志的参数?我不是在谈论使用 direct3d 10 函数使用 direct3d 9 上下文和对象绘制一些东西。

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

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

是的,这是完全可能的。

唯一的问题是两者的库必须存在于目标计算机上。由于您已与 d3d10 链接,因此即使您要在 d3d9 模式下运行,也必须在计算机上安装它才能加载.exe,而在 xp 计算机上并非如此。

为了避免这种情况,您需要使用动态链接来调用任何函数,以便仅在运行时加载库。查找 LoadLibrary 和 GetProcAddress。幸运的是,使用 direct3d 时,您可能调用的唯一全局函数是"create"函数。D3DX会导致同样的问题

您确实了解不支持DirectX 8,对吗? DirectX 10 包含 DirectX 9,因此没有理由同时要求两者。

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

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

如何编码以在 C# 中在我的机器上获取直接 X 版本?

传统方法是安装应用程序时使用的 DirectX 版本。 任何其他方式都应被视为黑客攻击,从长远来看是不受支持的。

另一条评论。您想在哪个平台上运行它?

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

如果你不需要支持XP(它现在真的已经很老了......),那么忘记dx9和dx10,只使用directx11