Я пишу 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;
}
Edit - теперь у нас есть работать (неоптимизированная, чтобы сохранить его качество) образец:
float4 PS(PS_INPUT input) : SV_Target
{
float4 result=float4(1,1,1,0);
if(input.Col.r >= 0.999998f)
discard;
return result;
}
работает как очарование, я собирался «отбросить»; вместо «возврата»; в образце :) 10q – thewhiteambit
Используйте клип на совместимых с D3d10 картах, поскольку он имеет гораздо лучшую производительность, чем при управлении потоком. – MHGameWork