gpt4 book ai didi

c# - 在屏幕边界之外绘制是否会影响性能

转载 作者:行者123 更新时间:2023-11-30 13:31:39 24 4
gpt4 key购买 nike

在我的 2D 游戏中,我有一个大 map ,我可以在它周围滚动(就像在《帝国时代》中一样)。

在绘制时,我绘制了所有元素(纹理/图像)。其中一些在屏幕上,但大部分不在屏幕上(因为您看到了大约 10% 的 map )。

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

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

最佳答案

在使用 SpriteBatch 时,一个有时被忽视的 CPU 性能概念是如何对 Sprite 进行批处理。使用可绘制游戏组件本身并不容易有效地批处理 Sprite 。

基本上,GPU 绘制 Sprite 并不慢,CPU 将所有 Sprite 组织成一个批处理也不慢。缓慢的部分是当 CPU 必须向 GPU 传达它需要绘制的内容时(向它发送批处理信息)。当您调用 spriteBatch.Draw() 时,这种 CPU 到 GPU 的通信不会发生。它发生在您调用 spriteBatch.End() 时。因此,提高效率的最简单方法是减少调用 spriteBatch.End() 的次数。 (当然,这也意味着更少地调用 Begin())。此外,请非常谨慎地使用 spriteSortMode.Immediate,因为它会立即导致 CPU 将每个 Sprite 信息发送到 GPU(慢)。

因此,如果您在每个游戏组件类中调用 Begin()End(),并且有很多组件,那么您将花费很多不必要的时间,而且您与担心屏幕外 Sprite 相比,提出更好的批处理方案可能会节省更多时间。

旁白:无论如何,GPU 都会自动忽略其像素着色器中的屏幕外 Sprite 。因此,在 CPU 上剔除屏幕外 Sprite 不会节省 GPU 时间。

引用 here .

关于c# - 在屏幕边界之外绘制是否会影响性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19477347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com