这是一个关于SpriteBatches在XNA中的性能问题。当您想要开始在XNA中绘图时,您必须使用spritebatch.Begin()。这就是如何指定一堆东西,比如使用的着色器。这会产生问题,因为不同的精灵可能会使用不同的着色器。我看过一些教程,在每个对象的绘制调用中都使用了begin和end。我想这样做,因为我希望每个精灵都能使用自己的着色器。如何才能在不引起性能问题的情况下做到这一点?
发布于 2012-03-04 11:41:52
如果您打算让每个精灵使用自己的着色器,那么它们中的一些可能会共享相同的着色器。确保将这些精灵放入同一批处理中,以便获得可能的最高性能。
(这可能涉及一些相当难看或相当复杂的代码,以便按着色器对对象进行排序,并检测何时更改批处理。您将不得不接受这一点。)
SpriteBatch背后的想法是,在将精灵发送到图形处理器之前,它会将它们分批处理在一起。更改begin/end块中的纹理,或开始新的begin/end块将需要新的批处理。
每帧有几百个批次。
有关这一点的更深层次的讨论,请参阅游戏开发站点上的this answer和this answer。
https://stackoverflow.com/questions/9551811
复制相似问题