在 HLSL/Directx11 中工作时,我发现有两种绑定 3D 渲染目标的方法:要么绑定整个目标,要么在指定图层时绑定它。
如果绑定整个目标,如何在 HLSL 代码中指定应用输出颜色的图层?
我怀疑这需要几何着色器......这是正确的吗?
是否有任何其他方法可以允许在顶点着色器或其他地方完成此操作?
如果您绑定整个体积纹理(或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 中)知道绘图调用将渲染到哪个切片时,这才有效。您也可以仅针对此绘制调用渲染到单个切片。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)