ゲーム用に独自のレンダラーを作成しています。ジオメトリデータをVBO(頂点バッファオブジェクト)の形式でカプセル化するGeometryクラスがあります。Geometryには、ジオメトリデータに関する情報を格納するInputLayoutタイプのオブジェクトへの参照もあります。InputLayoutインスタンスは、Geometryインスタンス間で共有されます。「描画呼び出し」(glDrawArrays()など)の前に、InputLayoutを使用してパイプライン(glVertexAttribPointer()など)を正しく構成しています。アクティブな頂点シェーダーでアクティブな属性をスキャンしてから、アクティブなInputLayoutインスタンスでこれらの属性を探す必要があるため、ルーチンの構成は少し非効率的です。VAOを使用してプロセス全体を自動化したいと思います。
そして、ここに質問があります。シェーダー/InputLayoutペアごとに1つのVAOを作成する必要がありますか、それともシェーダー/ジオメトリペアごとに1つのVAOを作成する必要がありますか?シェーダー/InputLayoutペアごとにVAOを作成することにより、すべての描画呼び出しの前にVAOのバッファーバインディングを変更する必要があります。レンダラーを再利用して、シェーダーとジオメトリのペアごとにVAOを作成する価値はありますか?