したがって、例とチュートリアルを見てみると、パイプラインにバッファを配置する最も一般的な方法は、すべてのモデルオブジェクトが独自の頂点バッファを取得し、バッファがいっぱいになった後、ロック、バッファの設定、ロック解除、設定を行うことです。シェーダー、描画、およびすべてのモデルの個々のバッファーのリンス/リピート。すべてのロックとロック解除は物事を少し遅くするだろうと私には思えます。
したがって、モデルオブジェクトが代わりにすべての頂点を1つの大きな配列に集約し、すべてのインデックスを大きな配列に集約し、1つの大きなバッファーを作成し、1回ロックし、バッファーを1回設定し、ロックを解除してから、シェーダーを切り替えて描画できるかどうか疑問に思います。これらのシェーダーで必要な数のポリゴンを作成し、描画する前に毎回パイプラインでより多くの頂点をロックしてドロップする必要がなく、以前のようにバッファーの描画とシェーダーの切り替えに沿って作業します。
これはもっと効率的でしょうか、それとも、関連するすべての簿記からのオーバーヘッド(たとえば、インデックスaからインデックスbまで、このシェーダーを使用する)によって、これが価値以上に機能するようになると思いますか?
また、ここでd3dの概念を見逃した場合は、お知らせください。(私は新しいです)
編集
大きな誤解のために、私がロックとロック解除について言及したところはどこでも、実際にはIASetVertexBuffer/IASetIndexBufferを呼び出すだけであるはずでした。「改訂された」質問は多かれ少なかれ次のとおりです。
シーン内のすべてのモデルの頂点を1つの単一のバッファーに詰め込み、IASetVertexBufferを1回呼び出すだけで、パフォーマンスがまったく向上しますか?