2008-09-15 90 views
3

对于任何图形编程人员,我都有一个难题。支持DirectX 9和10的应用程序

我很困惑一些游戏(如孤岛危机)能够同时支持DirectX 9(在XP中)和10(在Vista中)?

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

也许他们有2个代码库 - 一个是用DX9写的,另一个是用DX10写的?但是这不是一个过度杀伤力?

回答

5

它们有两条渲染管线,一条使用DX9调用,另一条使用DX10调用。这些API不兼容,但任何游戏引擎的大部分都可以被重用。如果你需要一些开源的例子来说明不同的渲染流水线,看看Ogre3d,它支持OpenGL,DX9和(很快)DX10渲染。

1

他们可能有一个抽象层,他们发展反对。在运行时,他们实例化DX9或DX10包裹混凝土引擎。

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

2

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

渲染很好地抽象出来,因为你很少想要从渲染层获取任何信息,一旦'渲染这棵树'动作被执行,游戏引擎就会假设渲染看起来是正确的。几乎没有必要处理来自DX9/DX10渲染调用的不同潜在结果,因为99.9%的信息是从引擎转到图形系统的,并且返回的0.1%可能采用两个API之间相同的形式。

应用程序的设置比较棘手,因为您必须询问系统是否支持DX10,否则就会优雅地回退到DX9,但这是应用程序设置的标准价格(与游戏必须选择分辨率,刷新率,输入设备等)。