在HLSL / Directx11中工作时,我看到有两种绑定3D渲染目标的方法:要么绑定整个目标,要么在指定图层时绑定它。
如果绑定整个目标,应如何在HLSL代码中指定要应用输出颜色的图层?
我怀疑这需要几何着色器...对吗?
是否有其他方法可以在顶点着色器或其他地方完成此操作?
如果绑定整个体积纹理(或TextureArray),则确实需要使用Geometry Shader写入特定的切片。
您的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中)知道绘图调用将呈现到哪个切片的情况下才有效。同样,您只能为此绘制调用渲染为单个切片。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句