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

我很困惑为什么有些游戏(例如 Crysis)可以同时支持 DirectX 9(在 XP 中)和 10(在 Vista 中)?

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

也许他们有 2 个代码库——一个用 DX9 编写,另一个用 DX10 编写?但这是不是太过分了?

有帮助吗?

解决方案

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

其他提示

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top