問題は、組み込みのSpriteBatch
シェーダーが 2.0 であることです。ピクセル シェーダのみを指定した場合SpriteBatch
でも、組み込みの頂点シェーダが使用されます。したがって、バージョンの不一致。
したがって、解決策は、頂点シェーダーも自分で指定することです。幸いなことに、Microsoft はXNA の組み込みシェーダーのソースを提供しています。関係するのは、マトリックス変換だけです。直接使用できるように変更されたコードを次に示します。
float4x4 MatrixTransform;
void SpriteVertexShader(inout float4 color : COLOR0,
inout float2 texCoord : TEXCOORD0,
inout float4 position : SV_Position)
{
position = mul(position, MatrixTransform);
}
そして、あなたのためSpriteBatch
にそれを設定しないので、あなたの効果をMatrixTransform
正しく設定します。これは、「クライアント」空間の単純な投影です (ソースはこのブログ投稿から)。コードは次のとおりです。
Matrix projection = Matrix.CreateOrthographicOffCenter(0,
GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height, 0, 0, 1);
Matrix halfPixelOffset = Matrix.CreateTranslation(-0.5f, -0.5f, 0);
effect.Parameters["MatrixTransform"].SetValue(halfPixelOffset * projection);