2009-05-08 34 views
2

我正在用DirectX 10編寫3D應用程序,我想知道Shadermanagement的貼圖是如何的。Direct3D 10和着色器管理

在應用程序啓動時預加載所有着色器,然後根據需要使用它們,或者如果數量變得更高,它會訓練硬件資源是否最有效?

另外我想知道,是否需要通過着色器來渲染渲染,從而使着色器開關最小化。

回答

2

我沒有使用DX10,只有DX9,但我猜這些東西仍然是一樣的。

根據您的應用程序,您可能實際上在運行時生成着色器(許多當前複雜的3D遊戲都這樣做)。

預加載着色器並不是一個壞主意,這取決於你是否生成着色器,有多少,有什麼你的內存考慮因素 - 這取決於。但是,預加載着色器(我假定您的意思是創建ID3DXEffect實例)只會在運行時佔用內存,不會佔用CPU。

通過着色器排序是一個好主意。一般來說,按材質排序是一個好主意,因爲切換着色器確實會產生一些開銷(不會過分,但取決於應用程序的複雜程度而顯着)。

一種排序drawcalls,請閱讀本:http://realtimecollisiondetection.net/blog/?p=86

1

在D3D10,所有的設備資源進行虛擬化,所以你不會跑了出來。當然,如果你不注意自己在做什麼,你仍然可能會耗盡卡上的物理資源,並導致很多顛簸。

此外,他們已經大幅改變了設備狀態,以降低包括着色器在內的狀態切換成本。

但是你真正要問的是「方法X比我的應用程序的方法Y快嗎?」儘管D3D10簡化了狀態管理以加快開關狀態,但回答上述問題的唯一方法是使用應用程序和數據進行性能測量。

realtimecollectiondetection.net博客文章只是談論排序您的繪製調用。這將導致更少的狀態切換。無論狀態切換的速度如何快,都不要緊,它總是更快。所以這是很好的一般建議。

相關問題