对于任何图形程序员,我都有一个令人生厌的问题。
我搞不懂为什么有些游戏(比如《绝命毒师》)可以同时支持DirectX 9( XP)和10 (Vista10)?
到目前为止,我所理解的是,如果你编写一个DX10应用程序,那么它只能在Vista中运行。
也许他们有两个代码库--一个是用DX9编写的,另一个是用DX10编写的?但这不是矫枉过正吗?
发布于 2008-09-15 19:35:56
它们有两个渲染管道,一个使用DX9调用,另一个使用DX10调用。这些API是不兼容的,尽管大多数游戏引擎都可以重用。如果您想要了解不同渲染管道是如何完成的开源示例,可以看看Ogre3d,它支持OpenGL、DX9和(很快)DX10渲染。
发布于 2008-09-15 20:21:09
游戏的渲染层通常是整个应用程序中一个相当好的隔离/抽象部分。就游戏引擎而言,每一帧都只是建立了一个概念对象(树、角色等)的列表。如果游戏引擎选择渲染特定的对象,则取决于渲染层如何将该意图实际转换为DX绘图调用。DX10渲染将生成对DX9层的一组不同的绘制调用,但从概念上讲,它们仍在执行相同的操作-“渲染这棵树”。
渲染被很好地抽象了,因为你很少想从渲染层得到任何信息,一旦执行了“渲染这棵树”的操作,游戏引擎就会假设渲染看起来是正确的。几乎不需要处理DX9/DX10呈现调用的不同潜在结果,因为99.9%的信息将从引擎传递到图形系统,而返回的0.1%可能在两个API之间采用相同的形式。
应用程序的设置有点麻烦,因为你必须询问系统是否支持DX10,否则会优雅地退回到DX9,但这是应用程序设置的标准费用(就像游戏必须选择分辨率、刷新率、输入设备等一样)。
发布于 2008-09-15 19:38:00
它们很可能有一个抽象层,并在此基础上进行开发。在运行时,它们实例化DX9或DX10包装混凝土引擎。
我认为它们的抽象非常接近DirectX层,只是为DX9提供了DX10函数的合理手动实现,或者在DX10上运行时增强了DX9逻辑。
https://stackoverflow.com/questions/65998
复制相似问题