Graphics 同时支持DirectX 9和10的应用程序

Graphics 同时支持DirectX 9和10的应用程序,graphics,directx,compatibility,Graphics,Directx,Compatibility,对于任何一个图形程序员,我都有一个不切实际的问题 我很困惑为什么有些游戏(比如Crysis)可以同时支持DirectX 9(在XP中)和10(在Vista中) 到目前为止,我所了解的是,如果你编写一个DX10应用程序,那么它只能在Vista中运行 也许它们有两个代码基——一个是用DX9编写的,另一个是用DX10编写的?但是这不是一种过分的做法吗?它们有两个渲染管道,一个使用DX9调用,另一个使用DX10调用。这些API不兼容,尽管大多数游戏引擎都可以重用。如果您想要了解不同渲染管道的实现方式的一

对于任何一个图形程序员,我都有一个不切实际的问题

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

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


也许它们有两个代码基——一个是用DX9编写的,另一个是用DX10编写的?但是这不是一种过分的做法吗?

它们有两个渲染管道,一个使用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,但这是应用程序设置的标准费用(与游戏必须选择分辨率、刷新率、输入设备等的方式相同)