我如何回退到较旧的DirectX版本?

我有一种感觉,在我深入开发之前解决这个问题会比较容易(除非当然,如果这是一个坏主意/困难的方式,请告诉我…)。 我正在创建我的游戏,以便在DirectX 11上运行,但是,我想在DirectX 10上提供它,我不确定是否值得为XP用户提供DirectX 9。 我不太确定这个退步是如何工作的,因为我在互联网上找不到很多文章。 如果有人能给我一个深入的文章,这将是伟大的。

我已经读了一些关于DirectX11在XP上完全不存在的问题,甚至很难检查支持。 有人提到每个版本都有多个应用程序,这是一个好主意吗?

感谢任何能在这里指出我正确方向的人。

您可以使用D3D11_FEATURE_LEVEL enum来定位您喜欢的任何硬件。 这允许您使用Direct3D11 API来定位D3D10和D3D9硬件,但有一些限制,这比编码单独的D3D10和D3D9渲染器要容易得多。 但是,您必须编写一个明确的Direct3D9渲染器来定位Windows XP。

那么如果我没有弄错的话,你必须直接针对每个版本,主要是由于每个版本之间的差异,特别是在dx9和dx10 / 11之间。 此外,在这一点上,我认为移动到DX 11是安全的。顺便提一下,DX 9是Windows XP,DX 10是Vista,DX 11是Vista SP1,Win 7和Win 8。

除非这是一个商业项目,否则忽略XP / D3D9,只是写D3D11。 而忽略D3D_FEATURE_LEVEL_10_0以下的任何设备,因为只有D3D11video卡的D3D11机器很less。 即使这是一个商业项目,如果你需要大量的买家来赚钱,那么你应该只针对D3D9 / XP /较老的硬件 – 这取决于游戏。 Steam和Unitynetworking播放器有很多信息可以帮助您做出决定。

即使您确定D3D11是您现在需要定位的唯一API,您可能也想在将来为其他API而开放。 这可能会导致你认为在你自己的一组接口和对象后面抽象D3D11 API将是一个好主意。 也许。 这样做有一定的代价,在不了解其他API的情况下正确地获取抽象是很困难的。

如果你这样做的目标是一个高层次的抽象(例如它应该处理模型和实例),而不仅仅是D3D11上的一个薄层(这将是缓冲区和绘制调用的东西)。 您希望免费实现实现来有效地调用目标API,而不是尝试模拟其他一些API。