这是关于XNA中SpriteBatches的性能问题。当你想在XNA中开始绘图时,你必须使用spritebatch.Begin()。这就是你如何指定一堆东西,比如使用的着色器。这会产生问题,因为不同的精灵可以使用不同的着色器。我看到了一些教程,其中begin和end用于每个对象的绘制调用。我想这样做,因为我希望每个精灵都能够使用自己的着色器。如何在不造成性能问题的情况下执行此操作?
答案 0 :(得分:4)
如果你要让每个精灵都使用自己的着色器,大概有些人会共享同一个着色器。确保这些精灵进入同一批次,以获得最佳性能。
(这可能涉及一些相当丑陋或相当复杂的代码,通过着色器对对象进行排序,并检测何时更改批次。您只需要使用它。)
SpriteBatch
背后的想法是它在将精灵发送到GPU之前将它们拼凑在一起。更改开始/结束块中的纹理或启动新的开始/结束块将需要新的批处理。
每帧可以获得几百个批次。
有关此问题的深入讨论,请参阅游戏开发网站上的this answer和this answer。