在顶点着色器中指定3D渲染目标的目标图层? [HLSL]

时间:2013-09-24 22:05:51

标签: hlsl directx-11 3d-texture

在HLSL / Directx11中工作时,我看到有两种方法可以绑定3D渲染目标:要么绑定整个目标,要么在指定图层时绑定它。

如果绑定整个目标,如何在HLSL代码中指定应用输出颜色的图层?

我怀疑这需要几何着色器......这是正确的吗?

是否有其他方法可以在顶点着色器或其他地方完成此操作?

1 个答案:

答案 0 :(得分:3)

如果绑定整个体积纹理(或TextureArray),则确实需要使用几何着色器来写入特定切片。

您的GS输出结构如下所示:

struct GSOutput
{
    float4 pos : SV_Position;
    uint slice : SV_RenderTargetArrayIndex;
    //Add anything else you need for your triangle
};

请不要对切片进行插值,因此如果需要发射到多个切片,则需要在每个切片上推送一个基元。

您不想使用Geometry Shader的第二种情况。

使用与前一个相同的参数创建rendertargetview描述,但是对于每个切片,更改这些参数(这适用于Texture2DArray,但如果使用Texture3D则大致相同):

D3D11_RENDER_TARGET_VIEW_DESC rtvd;

rtvd.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
rtvd.Texture2DArray.ArraySize = 1;
rtvd.Texture2DArray.FirstArraySlice = yourslice;

现在您只有切片的渲染目标,因此您可以直接绑定管道中的单个切片。

请注意,只有事先知道(在CPU中)您的绘制调用将呈现哪个切片,这才有效。此外,您只能为此绘制调用渲染到单个切片。

相关问题