質問

ファイルからピクセルシェーダーを動的にコンパイルし、メッシュに適用する可能性があるかどうか疑問に思っています。

まず、背景情報から始めます。私は、質問にとってあまり重要ではないさまざまなデータに基づいてHLSLピクセルシェーダーを作成するシステムを持っています。重要なのは、これらのシェーダーがテクニックやパスを使用しないことです。それらは.fxファイルとして使用されることを意図していないためです。

ShaderCompiler.CompileFromFile() メソッドはファイルを正常にコンパイルすることができます CompiledShader.

このシェーダーをメッシュに適用することは可能ですか?

私は各ファイルのエントリポイントを見つけたくないので、それをテクニックにラップして、それをとしてコンパイルすることができます Effect.

役に立ちましたか?

解決

まず第一に - シェーダーにエントリポイントがない場合、実際には何もコンパイルしていません! 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で効果を使用する必要があり、XNA 3.1に効果とPixelShaderの使用の間にあまり違いはないことを考えると、効果を使用して、コンパイルしてください。 Effect.CompileEffectFromSource, 、使用する代わりにXNA 3.1にとどまることを選択した場合 ShaderCompiler)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top