現在、Direct3D 11での実用的なレンダリングと計算を読んでいます。DirectX/OpenGLの経験がほとんどない人は、非常に参考になり、すべてが理にかなっていて、簡単です(非常に重いですが)。異なるシェーダプログラムを使用したDirectX 11レンダリングパイプ
しかし、私は現在第3章(130+ページ入り)にありますが、まだ簡単なことについては混乱しています。
シェイダープログラム、たとえば、リソースの一部に特定のシェーダープログラムを使用し、別のものに他のシェーダープログラムを使用する場合はどうなりますか?あるいは、すべての単一のリソースが同じように処理されますか?ここでのリソースは、頂点/インデックスデータ、またはテクスチャ1/2/3を参照してください。モデルを持っていれば、パイプラインで特定のシェーダプログラムを使用したいと思っています。
明らかに、いくつかの入力が異なるレンダリング結果のために異なるパスを下るようにするには何らかの方法が必要です。
これまでのところ、私は本では見たことがありません。
この質問がすでにどこかにある場合は謝罪、あまりにも確かではないような何かのためにGoogle検索をフレームする方法。
EDIT:明確にするため
は私がShaderA_vs.hlslと呼ばれる頂点シェーダ、および他と呼ばれるShaderB_vs.hlslを考えてみましょう。今度は、2つのオブジェクトモデル、ModelAとModelBをロードしました。このモデルは、Direct3Dの8.1で導入され、進化した
をレンダリング
プログラマブル:GPUのシェーダプログラミングのための2つの別個の経路が実際にあります私はMODELAがShaderA_vsを使いたい、とModelBはShaderB_vs
ありがとうございますが、私はこれが私の質問に答えるとは思わない。申し訳ありませんが、私は非常に明確ではなかった。 ShaderA_vs.hlslという名前の頂点シェーダと、ShaderB_vs.hlslという名前の頂点シェーダがあるとします。今度は、2つのオブジェクトモデル、ModelAとModelBをロードしました。私はModelAにShaderA_vsを使用し、ModelBにShaderB_vsを使用させたい。 – Mike5050
VS '' ShaderA_vs.hlsl''(および互換性のあるピクセルシェーダ)を設定します。 ModelAに対して1つ以上の '' DrawIndexed''呼び出しを送信します。その後、VS '' ShaderB_vs.hlsl''(および互換性のあるピクセルシェーダ)を設定します。 ModelBに対して1つ以上の '' DrawIndexed''呼び出しを送信します。各サブメスが状態とシェーダの単一の組み合わせである「サブメス」の一貫した典型的なモデル。ファンシー(Fancier)レンダリングシステムでは、すべてのサブメーションを素材別に並べ替えて、すべての「素材1」の素材を、次に「素材2」などを描画します。アルファブレンディングを使用するものを描画する前に、不透明素材を最初に描画することが重要です。 –
さようなら! DrawIndexごとに(GPU上の)リソースを設定して共有することはできますか?ワークフローは次のとおりです。すべてのリソース(テクスチャなど)を設定し、シェーダを設定し、モデルを送信します。次のモデルでは、他のシェーダを設定して、送信してください!本当に素敵なワークフローのためには、各オブジェクトのすべての同じマテリアル/シェーダをグループ化して、リソースを一度しか設定しないでください。 – Mike5050