2008-09-15 88 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,但這是應用程序設置的標準價格(與遊戲必須選擇分辨率,刷新率,輸入設備等)。