着色器指定的模具引用值(Direct3D 11 图形)

使像素着色器能够输出模具引用值,而不是使用 API 指定的引用值,可对模具作进行非常精细的控制。

着色器指定的值替换该调用的 API 指定的 模具引用值,这意味着更改会影响模具测试,当模具 op D3D11_STENCIL_OP_REPLACE(D3D11_STENCIL_OP的一个成员)用于将引用值写入模具缓冲区时。

在早期版本的 D3D11 中,模具引用值只能由 ID3D11DeviceContext::OMSetDepthStencilState 方法指定。 这意味着此值只能在每绘图粒度上定义。 此 D3D11.3 功能使开发人员能够读取和使用从像素着色器输出的模具引用值(SV_StencilRef),这意味着它可以在每像素或每样本粒度上指定。

此功能在 D3D11.3 中是可选的。 若要测试其支持,请使用 ID3D11Device::CheckFeatureSupport 检查 D3D11_FEATURE_DATA_D3D11_OPTIONS2PSSpecifiedStencilRefSupported 布尔字段

下面是在像素着色器中使用 SV_StencilRef 的示例:

uint main2(float4 c : COORD) : SV_StencilRef
{
    return uint(c.x);
}

Direct3D 11.3 功能

着色器模型 5.1