SpriteBatch的效率

只有在屏幕上出现精灵时,XNA中的SpriteBatch才会画出屏幕?

假设我有5个完全相同的精灵,SpriteBatch能够确定它只需要绘制一个呢?

另外,假设我有一个大的地图,我已经从各个方向平铺了屏幕。 SpriteBatch是否处理它不需要画出这些离开屏幕的精灵。

(注:是的,我的代码应该处理这个,我只是好奇)

假设我有5个完全相同的精灵,SpriteBatch能够确定它只需要绘制一个呢?

能够吗? 当然 – 它有所有的信息可以让它作出决定。 但是,它会这样做,因为这样的计算通常是不平凡的,并且实际上会严重降低SpriteBatch接口的性能。

如果启用,深度testing将杀死不应该被看见的碎片,或者透支会隐藏它们,但是在这两种情况下,精灵顶点已经完全通过管道被转换了。

另外,假设我有一个大的地图,我已经从各个方向平铺了屏幕。 SpriteBatch是否处理它不需要画出这些离开屏幕的精灵。

它也不会试图剔除排队的精灵。 在任何其他几何graphics的转换阶段,它们都将被完全截断,但是它绝对不会出现因为它不在视图中而不会被绘制的精灵。

SpriteBatch实际上只是一个dynamic的顶点缓冲区的包装,可能会或可能不会做一些sorting,以最大限度地减less纹理阶段的变化等。 如果你好奇,你可以使用reflection器在内部徘徊,并看到它除了为你管理缓冲区之外几乎没有什么作用。

不,精灵批处理不会处理第一个实例(相互绘制精灵)。 无论如何,这并不总是理想的结果。 有时候,你会希望图像合并,因为透明与alpha混合。

我很确定精灵批处理不会裁剪不在视图端口的图像。 我不确定它们是否真的被绘制,但是不应该在精灵批处理中进行批处理。 这需要更多的时间,从你的问题我可以告诉你有一些瓦片引擎。

如果你告诉sprite批处理来绘制地图上的所有图块,而不是屏幕上的图块,那么游戏的运行速度就会比较慢(主要的帧速率),这是因为可能存在大量的图块。

告诉sprite批处理绘制不会显示的东西不是一个好主意。 但是,如果精灵完全被其他精灵所覆盖,我不会真正区分,特别是在使用透明度和alpha混合的情况下。 我认为这只是杀了一点点。