我正在 XNA 中制作 2d 游戏。
使用可绘制游戏组件时,哪一个性能更好?
1.当组件不在屏幕上时,将其从组件列表中删除;当组件在屏幕上时,将其添加。
2.当其离屏时,不运行其绘制函数(通过使用“awake”布尔字段和
if 语句围绕绘图函数中的所有内容)
我现在用的是方法2,效果很好。它很方便,因为组件的绘制顺序不会改变(如果我删除并重新添加它们,它会改变,并且我需要更多代码来管理它)
事实上,我突然想到,如果它不在组件列表中,它就不会更新,我需要其他东西来跟踪它是否在屏幕上。
另外,我没有带分析器的视觉工作室的精美版本,所以我只是在这里问人们对他们的经验有何看法
使用 SpriteBatch 时有时会被忽视的 CPU 性能概念是如何对精灵进行批处理。并且使用可绘制游戏组件并不容易有效地批处理精灵。
基本上,GPU 绘制精灵的速度并不慢,CPU 将所有精灵组织成批处理的速度也并不慢。缓慢的部分是 CPU 必须与 GPU 通信它需要绘制的内容(向其发送批次信息)。这个CPU到GPU的通信不会发生当你调用 spriteBatch.Draw() 时。当您调用 spriteBatch.End() 时会发生这种情况。因此,提高效率的最简单方法就是减少调用 spriteBatch.End() 的次数。 (当然,这也意味着调用 Begin() 的频率也会降低)。另外,请非常谨慎地使用 spriteSortMode.Imediate,因为它会立即导致 CPU 将每个精灵信息发送到 GPU(慢)。
因此,如果您在每个游戏组件类中调用 Begin() 和 End(),并且有许多组件,那么您会不必要地花费大量时间,并且与担心屏幕外精灵相比,您可能会节省更多时间来想出更好的批处理方案。
旁白:无论如何,GPU 都会自动忽略其像素着色器中的离屏精灵。因此,在 CPU 上剔除屏幕外精灵并不能节省 GPU 时间......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)