我正在编写一个 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;
}
但这只会写出看不见的黑色像素(因为这里的黑色是背景色)。但在某些情况下,如果像素先前已着色,则像素会明显变黑。我的意图是跳过写入渲染目标。有没有办法跳过这个,例如代码可能看起来像这个不工作的:
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;
}