そういえば Direct3D10 使っていて AlphaTest が見当たりません。
もともと Direct3D9 の ShaderModel3.0 のときも、
Pixel を捨てるために次の2つの方法がありました。
(1) PixelShader の計算結果の値によって texkill する
(2) AlphaTest を Enable にして Alpha 値で出力する
(2) の方法だと、出力 Alpha を Blend に使ったり RenderTarget に
書き込みたい場合は複雑な計算式になってしまうことがあります。
結局 (1) の方法で (2) も実現できるのである意味重複した機能になっていました。
そういう意味では、D3D10 だと複数の方法から悩まなくて済むのでわかりやすく
なりました。
(それとももしかして AlphaToCoverage が AlphaTest 代わりになるのでしょうか?)
シェーダー側を
float4 PS_Main( PS_INPUT In ) : SV_Target
{
float4 color= diffuse.Sample( samplestate, In.Tex );
// AlphaTest
if( color.w <= 0.001 ){
clip( -1 );
}
return color;
}
のように書き換えて完了です。AlphaTest 相当になりました。
0.001 は AlphaRef に相当します。
clip() は texkill の HLSL 命令です。
値が負のときに pixel を捨てることができます。