まず第一に、シェーダーにエントリ ポイントがない場合、実際には何もコンパイルしていません! HLSL 関数 (あなたが作業しているように聞こえます) は、エントリ ポイントからインライン展開されます。エントリ ポイントがない場合、得られるのは空のシェーダーです。
(これは、コンパイル後に結果のシェーダーを逆アセンブルすることで確認できます。手順については、この質問と回答を確認してください。)
まず、テクニック ラッパーを生成するコードを作成する必要があります。ソースを大まかに解析して関数名を見つけるのはそれほど難しくありません。ソースをバッファにロードし、生成されたテクニック宣言を追加できます。次に、そのバッファから作成したバージョンの を使用しShaderCompiler.CompileFromFile
ます。Stream
このシェーダーをグラフィックス カードに設定するには、XNA 3.1 で次を使用できます。
CompiledShader cs = ShaderCompiler.CompileFromFile(...);
PixelShader ps = new PixelShader(graphicsDevice, cs.GetShaderCode());
graphicsDevice.PixelShader = ps;
XNA のビルトイン メッシュを使用する場合はModelMeshPart.Draw
、メッシュを描画するために使用します。Model
これにより、のビルトイン エフェクトがすべてバイパスされます。
ShaderCompiler
, CompiledShader
,PixelShader
システム全体が XNA 4.0 で XNA から削除されたことは指摘しておく価値があります。これについては、こちらで説明しています。XNA 4.0 でエフェクトを動的にコンパイルする方法については、こちらで説明しています。
(XNA 4.0 では Effect を使用する必要があり、XNA 3.1 では Effect と PixelShader の使用に大きな違いはないことを考えると、Effect.CompileEffectFromSource
XNA 3.1 にとどまることを選択した場合は、 を使用する代わりに、でコンパイルして Effect を使用することをお勧めしますShaderCompiler
)