現在、私はWindows 8ストア、Windows 8デスクトップ、およびWindows7用のアプリを開発しています。アプリはタブレットでも「通常の」Windows7/8デバイスでもスムーズに実行されるはずです。だから、私は自分の仕事からタブレットを入手し、それにWindows 8をインストールしましたが、気味の悪いIntel Graphics Media Accellerator(600)はDirectX9.0cしかサポートしていないことに気づきました。
そこで、DirectX10 / 11エフェクト/シェーダーをDirectX9で動作させるために何時間も試しましたが、何も動作しないようです。NVidiaのFxComposerを使用したテストでは、DirectX9エフェクトが正常に動作することがわかりました。
私はSharpDX/C#でプログラミングしていますが、technique10とtechnique11はどちらも有効です(MyTechnique.IsValid == true)。エフェクトをロードするには、次のコード行を使用します。
var EffectByteCode = ShaderBytecode.CompileFromFile("DirectX/Shaders/"+FxFile, "fx_5_0", ShaderFlags.None, EffectFlags.None);
var Effect = new Effect(GraphicsProvider.Device, EffectByteCode, EffectFlags.None);
mEffect = FxEffect;
mTechnique11 = mEffect.GetTechniqueByName("main_11"); //works
mTechnique10 = mEffect.GetTechniqueByName("main_10"); //works
mTechnique9 = mEffect.GetTechniqueByName("main_9"); //doesn't work
エフェクトのソースコードをここに貼り付けました:http://pastebin.com/KPxBN1DD ..「main_11」と「main_10」を除外しました。テストではコメントアウトしたので、コメントブロックを削除しました。dx9を削除する必要があります。この非常に単純なコードを理解してください。
したがって、私の最後の質問は次のとおりです。-パラメータ「fx_5_0」は、technique、technique10、technique11の読み込みに有効ですか?-私のシェーダーコードは正しいですか?または私はひどく間違ったことをしましたか?-DX9テクニックをロードするために、他の/追加情報/機能/パラメーターを指定する必要がありますか?-多分それはSharpDXのバグですか?これについては、今からコードを見ていきます。
編集:質問を少し明確にしようとしました。