4

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

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

我怀疑这需要几何着色器……对吗?

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

4

1 回答 1

3

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

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

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

请注意,切片没有被插值,因此如果您需要发射到多个切片,则需要为每个切片推送一个图元。

不想使用几何着色器的第二种情况。

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

D3D11_RENDER_TARGET_VIEW_DESC rtvd;

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

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

请注意,这仅在您提前(在 CPU 中)知道您的绘图调用将渲染到哪个切片时才有效。您也可以仅为此绘制调用渲染到单个切片。

于 2013-09-29T05:20:22.080 回答