1

the guy that asks weird things, here, again

I see that they use different executables, for a game that was created for both directx 9 and 10. It is possible to include "d3d9.h" and "d3d10.h" in a code file, then select direct3d 9 functions or direct3d 10 functions, depending on, for example, an argument that acts like a flag? I am not talking about drawing something using a direct3d 10 function using a direct3d 9 context and object.

What I want to do is create a function called init3D(UINT version); Depending on version, it will create a directx 9 or directx 10 object and device. I don't know if that is possible or I must create two different executables (or 3 if I decide to use d3d8, too)

Thanks for your help and forgive my lack of understanding with some of the C++ techniques.

4

3 回答 3

1

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

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

如果您不需要支持 XP(而且它现在真的变得很老了......)然后忘记 dx9 和 dx10,只使用 directx11

于 2012-07-02T14:00:14.683 回答
1

是的,这完全有可能。

唯一的问题是两者的库都必须存在于目标机器上。因为您已与 d3d10 链接,所以即使您想在 d3d9 模式下运行,它也必须安装在机器上才能加载 .exe,而在 xp 机器上不会出现这种情况。

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

于 2012-07-02T13:05:39.823 回答
1

你明白 DirectX 8 不被支持吧?DirectX 10 包括 DirectX 9,因此没有理由同时要求两者。

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

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

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

传统方式是安装应用程序安装时使用的 DirectX 版本。从长远来看,任何其他方式都应该被认为是一种黑客行为并且无法支持。

于 2012-07-02T13:11:59.977 回答