Direct3D10およびシェーダー管理
-
20-08-2019 - |
質問
私は符号化の3dアプリDirectX10、私はどのようにtackelingのShadermanagementです。
で有効にプリロードすべてのシェーダーがアプリ起動して使用していくことが要求されていたがこの列車の資源のハードウェアの場合は番号を取得します。
ものか---速度を考慮するためにレンダリングによるシェーダーのシェーダースイッチは最小限におさえられています。
解決
私は、DX10でのみDX9を働いていませんでしたが、私はこれらの事はまだ同じです推測してます。
あなたのアプリケーションに応じて、あなたが実際に実行時にシェーダを生成する場合があります(現在の多くの洗練された3Dゲームは、これを行います)。
シェーダをプリロードあなたのメモリの考慮事項が何であるか、がいくつあるか、あなたはシェーダを生成する場合に応じて、悪い考えではありません - それは依存しています。しかし、シェーダをプリロード(私はあなたがID3DXEffectインスタンスを作成する意味と仮定したことで)のみ、実行時に何のCPU使用率をメモリを取りません。
シェーダによって注文は良いアイデアです。スイッチングシェーダは(過度に、しかし、あなたのアプリケーションの複雑さに応じて目立たない)いくつかのオーバーヘッドが発生しないため、一般的には、材料によってソートすることは、良いアイデアです。
あなたのdrawcallsをソートするために、この記事を読む: http://realtimecollisiondetection.net/blog/?p = 86 の
他のヒント
にD3D10、すべてのデバイス資源の仮想化できないのです。もちろん、または排気の物理的資源のカードが多く詰んだ意見を表明するものではない。
また、彼らのデバイス状態を大幅にコストを削減するスイッチング状態を含めたシェーダー.
もういっか"が法Xよりも早く法Yのために自分のか"がD3D10簡素化状態の管理をスイッチング状態、唯一の方法の質問に対する答えはな性能測定 ご 申請 ご データです。
のrealtimecollectiondetection.net プログラムだけを選別にお描きます。このうが状態でスイッチング時の値です。※ない状態に切り替えることので常に高速に行います。なので静な状態が心の本来の姿であると一般的です。