同时支持DirectX 9和10的应用
对于任何图形程序员来说,我的问题都是讨厌的。
我很困惑某些游戏(例如《孤岛危机》)如何同时支持DirectX 9(在XP中)和10(在Vista中)?
到目前为止,我了解的是,如果我们编写DX10应用程序,则该应用程序只能在Vista中运行。
也许他们有2个代码库-一个是用DX9编写的,另一个是用DX10编写的?但这不是矫kill过正吗?
解决方案
回答
他们有两个渲染管道,一个使用DX9调用,另一个使用DX10调用。这些API不兼容,尽管任何一种游戏引擎中的大多数都可以重复使用。如果我们需要一些有关如何完成不同渲染管道的开放源代码示例,请查看Ogre3d之类的东西,它支持OpenGL,DX9和(很快)DX10渲染。
回答
它们可能具有抽象层,并且针对此层进行开发。在运行时,它们实例化DX9或者DX10包装的混凝土发动机。
我认为它们的抽象位置非常接近DirectX层,只是为DX9提供了DX10功能的合理手动实现,或者在DX10上运行时增强了DX9逻辑。
回答
游戏的渲染层通常是整个应用程序中相当隔离/抽象的部分。就游戏引擎而言,我们只需要在每个框架上建立概念对象(树,角色等)的列表。如果游戏引擎选择渲染特定对象,则取决于渲染层如何将该意图实际转换为DX绘制调用。 DX10渲染将对DX9图层生成一组不同的绘制调用,但是从概念上讲,它们仍在执行相同的"渲染此树"操作。
渲染非常抽象,因为很少有人想要从渲染层获取任何信息,一旦执行了"渲染此树"操作,游戏引擎便会假设渲染看起来正确。几乎不需要处理来自DX9 / DX10渲染调用的不同潜在结果,因为99.9%的信息从引擎传递到图形系统,而返回的0.1%的信息在两个API之间可能采用相同的形式。
应用程序设置有些棘手,因为我们必须询问系统是否支持DX10,否则请优雅地使用DX9,但这是应用程序设置的标准收费(与游戏必须采取的相同方式)选择分辨率,刷新率,输入设备等)。