3

对于任何图形程序员,我都有一个愚蠢的问题。

我很困惑某些游戏(如孤岛危机)如何同时支持 DirectX 9(在 XP 中)和 10(在 Vista 中)?

到目前为止我的理解是,如果你写一个 DX10 应用程序,那么它只能在 Vista 中运行。

也许他们有 2 个代码库——一个用 DX9 编写,另一个用 DX10 编写?但这不是矫枉过正吗?

4

3 回答 3

5

他们有两个渲染管道,一个使用 DX9 调用,一个使用 DX10 调用。这些 API 不兼容,尽管任何游戏引擎的大部分都可以重用。如果您想要一些关于如何完成不同渲染管道的开源示例,请查看 Ogre3d 之类的东西,它支持 OpenGL、DX9 和(很快)DX10 渲染。

于 2008-09-15T19:35:56.177 回答
2

游戏的渲染层通常是整个应用程序中一个相当隔离/抽象的部分。就游戏引擎而言,每一帧都只是建立一个概念对象(树、角色等)的列表。如果游戏引擎选择渲染特定对象,则取决于渲染层如何将该意图实际转换为 DX 绘制调用。DX10 渲染将生成一组不同的对 DX9 图层的绘制调用,但从概念上讲,它们仍在执行相同的操作 - “渲染这棵树”。

渲染被很好地抽象了,因为您很少想从渲染层获取任何信息,一旦执行“渲染这棵树”操作,游戏引擎将假设渲染看起来正确。几乎不需要处理来自 DX9/DX10 渲染调用的不同潜在结果,因为 99.9% 的信息是从引擎传递到图形系统的,而返回的 0.1% 可能在两个 API 之间采用相同的形式。

应用程序设置有点棘手,因为您必须询问系统是否支持 DX10,否则优雅地回退到 DX9,但这是应用程序设置的标准费用(与游戏必须选择分辨率、刷新率、输入设备等)。

于 2008-09-15T20:21:09.203 回答
1

他们很可能有一个抽象层,并针对它进行开发。在运行时,它们会实例化 DX9 或 DX10 包裹混凝土引擎。

我想他们的抽象定位非常接近 DirectX 层,并且简单地为 DX9 提供 DX10 功能的合理手动实现,或者在 DX10 上运行时增强 DX9 逻辑。

于 2008-09-15T19:37:59.747 回答