我正在编写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;
}