晚间/下午;
我正在努力为我个人使用编写一个小的自定义2D XNA引擎。在决定如何绘制2D精灵时,我陷入了僵局:
首先,我想在某个时候实现一些自定义着色器效果。我在互联网上阅读的每一个教程都说我被迫使用 SpriteSortMode.Immediate ,除了一个,它说在XNA 4.0中不再需要。
此外,我不确定哪种SpriteSortMode对我的方法来说是最快的,无论阴影效果如何。 对不同的精灵进行排序/分层绝对是必需的(即在游戏精灵面前进行HUD,并且在背景前面对游戏进行精灵等);但实现自定义排序列表并按顺序调用Draw()或使用 BackToFront / FrontToBack 选项会更快吗?
提前谢谢。
答案 0 :(得分:1)
从XNA 4.0开始,您可以在任何精灵排序模式下使用自定义着色器效果。 XNA 3.1中的立即精灵排序模式非常破碎。 (见http://blogs.msdn.com/b/shawnhar/archive/2010/04/05/spritesortmode-immediate-in-xna-game-studio-4-0.aspx)
关于排序,我会说它们将它们从前面排序为透明精灵,从前到后排序为不透明的精灵。见:http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.spritesortmode.aspx
那里有一个额外的有趣模式(至少对于2D引擎),这是纹理排序模式,它对需要纹理的绘制调用进行排序,从而减少状态变化。对于主要的精灵来说,这可能是一场巨大的表现。
在你的探查者说不然之前,我不会过分担心性能问题。 SpriteBatch进行了大量的批处理(是的,真的),这将是最大的性能提升,因为它可以最大限度地减少状态变化的数量。
我能想到提高性能的另一种方法是使用实例化,但我认为使用XNA可能是一个坏主意(理想情况下,你至少需要SM3.0硬件和自定义顶点着色器;我我不确定它是如何与SpriteBatch类一起播放的。)