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