2

ある種の3Dの世界のために、いくつかの3Dモデルを画面に描画するコードを書いています。各モデルには、レンダリングに異なるシェーダーを使用するメッシュを含めることができます。物事を効率的に実行するという点では、OpenGL呼び出し、つまり、多くのオーバーヘッドがあると想定されるVAOの切り替えとシェーダーの切り替えを最小限に抑えるように努める必要があることを私は知っています。

私の実装では、各モデルのジオメトリがVAOに編成されています。VAOは、マテリアル設定が異なるメッシュを持つことができますが、必ずしもシェーダーである必要はありません。

私の質問:VAOをバインドして完全に一度にレンダリングし、途中で必要に応じてシェーダーを切り替えるか、1つのシェーダーをバインドしてその質問を使用するすべての(サブセットの)VAOを実行する方がよいでしょうか。1つ目はシェーダーを冗長にバインドし、2つ目はVAOを冗長にバインドするので、シェーダーバインディング呼び出しまたはVAOバインディング呼び出しを最小限に抑える方がよいでしょうか。

これはかなりオープンエンドであり、アプリケーションに依存する可能性があることを認識していますが、gl操作のコスト(オーバーヘッド?依存関係?)をどのように知ることができるか、またはそれらをどのように把握できるかについても知りたいと思います。それは、シナリオが何であれ、適切な応答を構築するために必要な情報を提供するからです。また、最初に私のプロジェクトを整理するためのより良い方法があれば、その洞察を大いに歓迎します。

4

0 に答える 0