2009-05-08 15 views
2

私はDirectX 10で3dアプリケーションをコーディングしています。私はShadermanagementのタケリングがどのようになっているのだろうかと思います。Direct3D 10とシェーダ管理

アプリケーションの開始時にすべてのシェーダをプリロードしてから、必要に応じて使用するのが最も効果的ですか?ハードウェアのリソースが増えると、ハードウェアのリソースが鍛えられます。

またシェーダによるレンダリングを順序付けるための速度の検討が必要なのかもしれないので、シェーダスイッチが最小限に抑えられているのでしょうか。

答えて

2

私はDX10、DX9のみで作業していませんが、私はこれらのことがまだ同じであると推測しています。

アプリケーションによっては、実際に実行時にシェーダを生成することがあります(多くの現在の洗練された3Dゲームがこれを行います)。

シェーダをプリロードするのは悪いことではありません。シェーダを生成するかどうか、存在するメモリの数、メモリの考慮事項などによって異なります。しかし、シェーダをプリロードすると(ID3DXEffectインスタンスの作成を意味すると仮定します)、実行時にCPUの使用量がなくなります。

シェーダーによるオーダーをお勧めします。通常、マテリアルごとの並べ替えは良い考えです。シェーダの切り替えにはオーバーヘッドがあります(過度ではありませんが、アプリの複雑さに応じて目立ちます)。あなたのdrawcallsをソートするための

は、この読み:あなたがそれらのうち、実行されませんので、D3D10でhttp://realtimecollisiondetection.net/blog/?p=86

1

を、すべてのデバイスのリソースが仮想化されています。もちろん、カード上の物理リソースを使い果たして、何をしているのか注意を払わなければ、たくさんのスラッシングを引き起こすことができます。

さらに、デバイス状態を大幅に変更してシェーダーを含むスイッチング状態のコストを削減しました。

しかし、あなたが本当に求めているのは、「メソッドYがアプリケーションのメソッドYよりも速いのですか?」 D3D10は状態管理を簡素化してスイッチング状態を高速化することができますが、上記の質問に答える唯一の方法は、アプリケーションとデータでパフォーマンス測定を行うことです。

realtimecollectiondetection.netのブログ記事は、あなたのドローコールのソートについて話しています。これにより、状態の切り替えが少なくなります。どのくらい速い状態の切り替えが問題になるかは関係ありません。それは良い一般的なアドバイスです。

関連する問題