因此,通过查看示例和教程,在管道中放置缓冲区的最常见方法似乎是,每个模型对象都有自己的顶点缓冲区,然后在缓冲区被填充后,它们锁定、设置缓冲区、解锁、设置着色器、绘制和冲洗/重复每个模型单独的缓冲区。在我看来,所有锁定和解锁都会使事情变慢一点。
所以我想知道模型对象是否可以改为将它们的所有顶点聚合到一个大数组中,一个大数组中的所有索引,创建1个大缓冲区,锁定一次,设置一次缓冲区,解锁,然后切换着色器并绘制这些着色器需要尽可能多的多边形,并且只需像以前一样沿着缓冲区绘图和切换着色器工作,而不必每次在绘制之前都在管道中锁定和丢弃更多顶点。
这会更有效,还是您认为所有涉及的簿记的开销(例如,从索引 a 到索引 b,使用此着色器)只会使这比它的价值更多工作?
另外,如果我在这里错过了 d3d 的概念,请告诉我。( 我是新来的)
编辑
由于巨大的误解,我提到锁定和解锁的任何地方实际上应该只是调用 IASetVertexBuffer/IASetIndexBuffer。“修订”的问题或多或少是:
将场景中所有模型的顶点填充到一个缓冲区中,并且只需调用一次 IASetVertexBuffer 就可以提高性能吗?