C# XNA SpriteSortMode速度和着色器(4.0)

C# XNA SpriteSortMode速度和着色器(4.0),c#,xna,shader,C#,Xna,Shader,晚上/下午 我正在着手编写一个供我个人使用的定制2D XNA引擎。在决定如何绘制2D精灵时,我陷入了一个困境: 首先,我想在某个时候实现一些自定义着色器效果。我在互联网上读到的每一篇教程都说,因此我不得不使用SpriteSortMode.Immediate,只有一篇说在XNA 4.0中不再需要 此外,我不确定哪种SpriteSortMode对于我的方法最快,而不管阴影效果如何。不同精灵的排序/分层绝对是必要的(即在游戏精灵前面有一个HUD,在背景前有游戏精灵等);但是,实现自定义排序列表并按顺序

晚上/下午

我正在着手编写一个供我个人使用的定制2D XNA引擎。在决定如何绘制2D精灵时,我陷入了一个困境:

首先,我想在某个时候实现一些自定义着色器效果。我在互联网上读到的每一篇教程都说,因此我不得不使用SpriteSortMode.Immediate,只有一篇说在XNA 4.0中不再需要

此外,我不确定哪种SpriteSortMode对于我的方法最快,而不管阴影效果如何。不同精灵的排序/分层绝对是必要的(即在游戏精灵前面有一个HUD,在背景前有游戏精灵等);但是,实现自定义排序列表并按顺序调用Draw()会更快吗,或者使用BackToFront/FrontToBack选项会更快吗


提前感谢。

从XNA 4.0开始,您可以在任何精灵排序模式下使用自定义着色器效果。XNA3.1中的即时精灵排序模式被破坏了。(见附件)

关于排序,我要说的是,对于透明的精灵,将它们前后排序,对于不透明的精灵,将它们前后排序。请参阅:
这里有一个特别有趣的模式(至少对于2D引擎而言),这是纹理排序模式,它对需要纹理的绘制调用进行排序,从而减少状态更改。这可能是主要游戏《精灵》的一大性能胜利

我不会太担心性能,除非你的剖析器另有说明。SpriteBatch进行了大量的批处理(是的,真的),这将是最大的性能改进,因为它最大限度地减少了状态更改的数量


我能想到的提高性能的唯一其他方法是使用实例化,但我认为使用XNA可能不是一个好主意(理想情况下,您至少需要SM3.0硬件和自定义顶点着色器;我不确定SpriteBatch类如何使用它)。

您好,就纹理排序模式而言。。。它说,它可以提高所有相似深度的非重叠精灵的性能。。。那么有两个问题:第一,如果我把抽签程序分成几个批次,我还会得到好处吗?第二,这还会保持深度吗?谢谢你是的,我正试图为它找到一个用例(我通常不做2D引擎),并打算说你可以为背景精灵设置一个深度,为前景精灵设置一个深度。但是前景精灵可能会重叠,因此如果没有z重叠,将它们拆分为多个批次的系统可以更好地工作。从性能角度看,我认为使用几十个批次是安全的(但只有探查器才能真正判断)。在这种模式下,你真正受益的地方是:1)使用了不同的纹理2)许多精灵使用相同的纹理。非常感谢你的帮助。:)