2012-03-03 48 views
4

擁有XNA背景,我嘗試創建一個簡單的DirectX11應用程序。現在我試圖找出如何設置着色器常量,如投影矩陣等。我正在閱讀關於常量緩衝區 - 但沒有簡單的方法來設置一些常量之前渲染,而不使用緩衝區?DirectX11設置着色器常量

回答

7

我採取相同的路徑,這是我一直在努力用爲好。由於DirectX10對接口進行了很多更改,因此可以進行更全面的控制。

遲早你會習慣的緩衝區,並發現它們實際上是整齊漂亮。

這裏有一些優點和技巧:

  • 現在有結合頂點,索引和常量數據的管道,即Buffer類的統一方式。

  • 緩衝區並不關心數據的佈局。你可以寫任意組合的浮點數,而不僅僅是矩陣和向量。我通常將一個緩衝區的所有常量合併到float[]中,然後使用循環將其寫入流中。

  • 常量被包裝在寄存器與每個保持多達4個32位分量。

  • 您可以pack the constants manually使用packoffset() HLSL功能。有some rules你必須考慮。

  • 如可以將多個恆定緩衝器綁定到它是由它們的更新頻率建議separate your constants單級。例如,視圖矩陣和投影矩陣通常每幀更新一次,而世界矩陣將隨每個網格而改變。爲了獲得最佳性能則需要創建兩個緩衝器,一個包含每幀數據,並且另一個每網格數據。

  • 最後,對於constant buffers界限:

每個常量緩衝器可容納多達4096個向量;每個向量最多包含四個32位值。每個流水線階段最多可綁定14個常量緩衝區(2個額外的插槽保留供內部使用)。

4

在DirectX11的設置爲着色器常數緩衝。您當前只能設置一個常量。您可以在時間只設置整個緩衝區。要麼使用常量緩衝區,要麼查看Effects11框架,這將使您更容易使用API​​着色器常量(類似於D3D9效果)。

這裏的例子創建常量緩衝區,並將其應用的頂點着色器:http://msdn.microsoft.com/en-us/library/ff476896.aspx

相關問題