私はシェーダー (XNA を使用) に慣れていないので、説明できない非常に奇妙なバグが発生しています。次のピクセル シェーダー関数を検討してください。
float4 BasicTest(float2 coords: TEXCOORD0) : COLOR0
{
float4 src=tex2D(s0, coords);
float4 dst=tex2D(s1, coords);
float4 color=src;
if (coords.x>0.5) color=dst;
return color;
}
src
これにより、期待どおり、画面の左側と右側にテクスチャが表示dst
されます。ただし、代わりに単に使用する場合:
float4 BasicTest(float2 coords: TEXCOORD0) : COLOR0
{
float4 src=tex2D(s0, coords);
float4 dst=tex2D(s1, coords);
float4 color=dst;
return color;
}
src
画面いっぱいに乗ります!
どうやら、シェーダーdst
は、何らかの式でない限り、表示をまったく拒否します (color=src*0.5+dst*0.5
これも正常に動作します)。私はその問題をごまかすことができるif (coords.x>=0)
と思いますが(多分)、何が原因なのかを本当に知りたいです!
私のコードについてさらに詳細が必要な場合は、教えてください。