2011-07-31 72 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 –