Texture2D数组作为HLSL像素着色器中的渲染目标

时间:2011-07-31 12:41:44

标签: arrays textures hlsl texture2d pixel-shader

目前,我需要从渲染通道(法线,深度和颜色)中获得几个纹理的每像素数据。

不是使用基本相同的着色器(WorldViewPos乘法等)运行三次传递,而是每次向渲染目标中的纹理输出不同类型的数据(例如,一次传递颜色,一次传递深度,一次通过正常);我想使用Texture3D对象或理想情况下使用Texture2D数组作为我的像素着色器的渲染目标。这样我就可以将这三个渲染过程减少到一个并一次性输出所有数据。

不幸的是,我发现的唯一例子是几何着色器。有没有办法指定纹理数组中的哪个纹理将数据发送到像素着色器?

1 个答案:

答案 0 :(得分:2)

您正在寻找的是“多个渲染目标”。

您可以使用GraphicsDevice.SetRenderTargetsMSDNsee also)设置多个渲染目标。

您可以输出到HLSL像素着色器中的多个渲染目标,方法是输出第一个目标的COLOR0semantic),第二个目标COLOR1,依此类推。< / p>

最后,您必须使用HiDef个人资料,一次最多可以设置4个渲染目标。


编辑:我刚刚意识到我给了XNA答案 - 但实际上你并没有用API标记问题。对于DirectX,SlimDX等,HLSL应该是相同的。要在DirectX中设置渲染目标,我认为你想要 IDirect3DDevice9::SetRenderTargetMSDN)。