是否可以跳过像素着色器中的颜色输出?

时间:2013-05-21 15:23:36

标签: shader direct3d hlsl

我正在编写PixelShader(HLSL,SM40)并尝试在某些情况下完全跳过输出。我目前的代码如下:

float4 PS( PS_INPUT input) : SV_Target
{
    float4 result=float4(1,1,1,0);
    if(input.Col.r >= 0.999998f)
        result=float4(0,0,0,0);
    return result;
}

但是这只会写出未见过的黑色像素(这里的黑色是backgroundcolor)。但在某些情况下,像素之前是彩色的,像素变得明显变黑。我的意图是跳过写入rendertarget。有没有办法跳过这个,例如代码看起来像这个非工作的:

float4 PS( PS_INPUT input) : SV_Target
{
    float4 result=float4(1,1,1,0);
    if(input.Col.r >= 0.999998f)
        return; //or 'return null;'
    return result;
}

编辑 - 现在我们有一个工作(未优化以保持可比性)样本:

float4 PS( PS_INPUT input) : SV_Target
{
    float4 result=float4(1,1,1,0);
    if(input.Col.r >= 0.999998f)
        discard;
    return result;
}

1 个答案:

答案 0 :(得分:4)

这可以通过内在函数clipdoc)或流控制状态discarddoc)来实现。在您的情况下,clip应该是最适合的:)