支持DirectX 9和10的应用程序

3

我有一个关于图形程序员的问题。

我困惑于一些游戏(比如《Crysis》)如何支持DirectX 9(在XP中)和10(在Vista中)?

据我目前了解,如果你编写一个DX10应用程序,那么它只能在Vista中运行。

也许他们有两个代码基础——一个是用DX9编写的,另一个是用DX10编写的?但这难道不会过度杀伤吗?

3个回答

5

他们有两个渲染管道,一个使用DX9调用,另一个使用DX10调用。这些API不兼容,尽管大多数游戏引擎的部分可以重复使用。如果您想要一些开源示例来了解如何完成不同的渲染管道,请查看类似于Ogre3d的东西,它支持OpenGL、DX9和(即将推出的)DX10渲染。


2
游戏的渲染层通常是整个应用程序中相对隔离和抽象的部分。就游戏引擎而言,每一帧你只是在构建一个概念对象列表(树、角色等)。如果游戏引擎选择渲染特定的对象,则由渲染层决定如何将该意图实际转换为 DX 绘制调用。DX10 渲染将生成不同的绘制调用集合,与 DX9 层相比,但从概念上讲,它们仍然执行相同的操作 - “渲染这棵树”。
渲染非常抽象化,因为渲染层很少需要从中获取任何信息。一旦执行“渲染这棵树”操作,游戏引擎将假定渲染看起来正确。几乎没有必要处理来自 DX9/DX10 渲染调用的不同潜在结果,因为99.9%的信息都是从引擎传递到图形系统,而0.1%返回的信息在两个 API 之间可能采用相同的形式。
应用程序设置有点棘手,因为你必须询问系统是否支持 DX10,并在不支持时优雅地回退到 DX9,但这是应用程序设置的标准程序(就像游戏必须选择分辨率、刷新率、输入设备等一样)。

1

他们很可能拥有一个抽象层,并针对该层进行开发。在运行时,他们会实例化DX9或DX10封装具体引擎。

我想象他们的抽象层非常靠近DirectX层,并且仅在DX10上运行时为DX9提供明智的手动实现DX10函数或增强DX9逻辑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接