2011-07-31 105 views
2

目前,我需要從渲染過程(法線,深度和顏色)獲得每像素數據的紋理值。Texture2D Array作爲HLSL中的渲染目標像素着色器

而不是使用基本上相同的着色器(WorldViewPos乘法等)運行三遍,但每個輸出不同類型的數據到渲染目標中的紋理(例如,一次通過顏色,一次通過深度,法線一次);我想要使​​用Texture3D對象或理想情況下使用Texture2D數組作爲我的像素着色器的渲染目標。這樣,我可以將這三個渲染過程減少到一個,並一次輸出所有數據。

不幸的是我發現的唯一例子是幾何着色器。有沒有辦法指定紋理數組中的哪個紋理將數據發送到像素着色器中?

回答

2

你在找什麼是「多渲染目標」。

您可以使用GraphicsDevice.SetRenderTargetsMSDN,see also)來設置多個渲染目標。

可以輸出到多個通過輸出到COLOR0(該semantic),用於所述第一目標,COLOR1用於第二,等等呈現在HLSL像素着色器的目標。

最後,您必須使用HiDef配置文件,該配置文件允許一次設置最多4個渲染目標。


編輯:我剛剛意識到我給了一個XNA答案 - 但實際上你沒有用API標記問題。對於DirectX,SlimDX等,HLSL應該是相同的。要在DirectX中設置渲染目標,我認爲您需要 IDirect3DDevice9::SetRenderTargetMSDN)。

+0

謝謝你,這正是我所需要的,但我一直在執行的問題。我開始提出一個新問題,因爲我必須粘貼相當數量的數據才能完成。它可以在這裏找到:http://stackoverflow.com/questions/6891194/multiple-render-targets-not-saving-data –