擁有XNA背景,我嘗試創建一個簡單的DirectX11應用程序。現在我試圖找出如何設置着色器常量,如投影矩陣等。我正在閱讀關於常量緩衝區 - 但沒有簡單的方法來設置一些常量之前渲染,而不使用緩衝區?DirectX11設置着色器常量
4
A
回答
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
相關問題
- 1. 找不到DirectX11着色器?
- 2. 編譯DirectX11着色器文件
- 3. Libgdx着色器設置NullPointerException異常
- 4. OpenGL着色器和常量
- 5. HLSL - 幾何着色器(DirectX11)中的全局變量未改變
- 6. libgdx着色器 - 試圖設置顏色
- 7. 如何在glsl中通過寄存器設置着色器常量?
- 8. 爲使用數組着色的着色器設置動畫
- 9. 從DirectX11 API控制着色器模型2 API
- 10. 如何在DirectX11中的幾何着色器中實例化?
- 11. 如何將紋理加載到着色器(DirectX11/SlimDX)
- 12. 流水線中的DirectX11像素着色器丟失
- 13. Directx11其中初始化恆定着色器緩衝區
- 14. 着色器中Threejs的正常值被設置爲0
- 15. 在MPAndroidChart的LineDataSet中設置着色器
- 16. Kivy/Raspi着色器異常
- 17. 設置像素着色器統一變量
- 18. UISLider設置拇指/ minimumTrack/maximumTrack着色顏色變得異常
- 19. DirectX11動態着色器連接能否在沒有着色器反射的情況下使用?
- 20. 使用VS2012着色器設計器創建XNA着色器
- 21. Three.js着色器pointLight位置
- 22. 如何使用着色器常量緩衝器?
- 23. 使用着色器設置glutBitmapCharacter的柵格顏色
- 24. 設置統一的顏色到像素着色器
- 25. 如何更改着色器顏色設置呃Python-Maya
- 26. 包含着色器的着色器?
- 27. GLSL:頂點着色器無片段着色片段着色器
- 28. 如何使用DirectX11着色器將紋理應用於正交平面
- 29. DirectX着色器不能正常工作?
- 30. 着色器沒有正常顯示