私が直面している問題は単純ですが、インターネット上のどこにも答えが見つかりません。使用している RenderTarget から取得したソース テクスチャがあり、これをエフェクトに渡します。私のエフェクトには頂点シェーダーとピクセル シェーダーがありますが、重要なのはピクセル シェーダーです。頂点シェーダーが入力頂点に対してまったく何もしないようにします。出力は、画像に対して画像処理 (ぼかしなど) を実行するピクセル シェーダーに渡されます。この結果が画面に描画されます。
基本的には、テクスチャを取り込み、完全に変更せずに渡す頂点シェーダーが必要です。ここで話す 3D ジオメトリはありません。
これを行うために私が書いたコードは次のとおりです。
float4 VSBasic(float4 vin : POSITION) : POSITION
{
return vin;
}
そして、これが私のピクセルシェーダーで、すべてのピクセルを赤くするはずです:
float4 PS_GaussianBlur(float2 texCoord : TEXCOORD) : COLOR0
{
float4 color = float4(0.0f, 0.0f, 0.0f, 1.0f);
//int kernelLength = min(31, kernelRadius * 2 + 1);
//for (int i = 0; i < kernelLength; i++)
//color += tex2D(colorMap, texCoord + offsets[i]) * kernel[i];
color = float4(1.0f, 0.0f, 0.0f, 1.0f);
return color;
}
なお、ぼかし部分はテスト用にコメントアウトしています。
それで、私は何を間違っていますか??!
PS 頂点シェーダーを使用する唯一の理由は、PS_3_0 と VS_3_0 をコンパイルする必要があるという効果を指定しない限り、競合するピクセル/頂点シェーダー バージョンを使用していると XNA が文句を言うからです (PS_3_0 が必要なため、これは PS_2_0 で動作しています)。頂点シェーダーなし)。そのため、頂点シェーダーを実際に実装せずに頂点シェーダーのバージョンを指定する別の方法がある場合はお知らせください。
編集: 明確にするために、私のソリューションは PS_2_0 でうまく機能しますが、私の意見では、PS_2_0 には十分な定数レジスタがありません。私がやりたいことは、シェーダーを PS_3_0 に拡張して、より多くのレジスターを操作できるようにすることです。ただし、これを行うと、XNA は PS_3_0 が下位の頂点シェーダーと下位互換性がないことを訴えるので、独自の頂点シェーダーを作成する必要がありました。ただし、すべての作業はピクセル シェーダーで行われるため、この頂点シェーダーに何もさせたくありません。これで問題が解決することを願っています。