在屏幕边界外绘图是否会影响性能

时间:2013-10-20 12:32:49

标签: c# performance xna

在我的2D游戏中,我有大型地图,我可以滚动它(就像帝国时代一样)。

在绘制时,我绘制所有元素(纹理/图像)。其中一些在屏幕上,但大多数都没有(因为你看到大约10%的地图)。

XNA是否知道不通过检查目标矩形是否会落在屏幕上来绘制它们?

或者我应该手动检查它并避免绘制它们?

2 个答案:

答案 0 :(得分:6)

使用SpriteBatch时,有时会忽略CPU性能的概念,就是如何批量精灵。使用可绘制的游戏组件并不容易有效地批量精灵。

基本上,绘制精灵的GPU并不慢将所有精灵组织成批处理的CPU并不慢。缓慢的部分是当CPU必须与GPU通信时需要绘制的内容(向其发送批处理信息)。当您致电spriteBatch.Draw()时,此CPU与GPU之间的通信不会发生。当你致电spriteBatch.End()时就会发生这种情况。因此,效率低下的结果是减少spriteBatch.End()的频率。 (当然这意味着更少地调用Begin())。另外,非常谨慎地使用spriteSortMode.Immediate,因为它会立即导致CPU将每个sprite信息发送到GPU(慢))。

所以,如果你致电Begin()& End()在每个游戏组件类中,并且有很多组件,你花费了很多时间在不必要的时间,你可能会节省更多的时间来提供更好的批处理方案,而不是担心屏幕外的精灵。

除此之外:GPU无论如何都会自动忽略其像素着色器中的屏幕外精灵。因此,剔除CPU上的屏幕外精灵将无法节省GPU时间。

参考here

答案 1 :(得分:5)

你必须手动解释这个问题,它会在游戏增长时大大影响游戏的性能,这也称为剔除。剔除不仅仅是因为从屏幕上绘制内容会降低性能,这是因为调用Draw许多额外的时间很慢。还应排除您不需要更新的任何超出视口的内容。您可以详细了解如何执行此操作以及SpriteBatch如何处理此here