【问题标题】:How to optimize performance in xna for windows phone如何优化 xna for windows phone 的性能
【发布时间】:2012-01-08 04:09:50
【问题描述】:

在我的游戏的一个关卡中,我有很多大纹理要绘制。为了让您了解我在说什么,这些是纹理大小和关卡中的数量。 448x420 - 3、315x400-2、305x429 -3、366x167-1、356x265-4、401x343-2、387x251-1 加上大约 20 个纹理尺寸更小的元素。

我最初实现的性能是 20fps。然后我创建了一个包含关卡中使用的所有纹理的单个纹理贴图,这给了我大约 3-4 帧的额外帧数。 24fps 对我来说还不够,我还能尝试什么来优化我的性能?

【问题讨论】:

    标签: windows-phone-7 xna


    【解决方案1】:

    我可以在一分钟内想到的一些事情

    • 是否有专用的 GPU 和内存或使用共享内存?
    • 您是否尝试过将纹理扩展为两倍大小(尽管只有加载时间可能会有所改善)。
    • 您是否使用 mipmap 或其他类型的纹理过滤?
    • 它试图收集多少纹素?
    • 您是否尝试过使用 1 x 1 的纹理,只是为了看看这是否真的是您的瓶颈?

    根据我的经验,移动设备上的 texel 调用非常繁重。一定要尽量减少纹理的大小。看看你的项目,如果一个对象只占屏幕的 10% 左右,它真的需要 128x128 或更大的纹理吗? 我不知道您使用什么样的项目和目标设备,但是 448x420(非 2 的幂?!)的纹理对于手机游戏来说似乎有点过分了。事实上,我认为你会尝试保持低于 1024x1024 的总纹理使用率或其他什么?

    我是否理解正确,这是您的总纹理大小? (448 * 420 * 3) + (315 * 400 * 2) + (305 * 429 * 3) + (366 * 167) + (356 * 265 * 4) + (401 * 343 * 2) + (387 * 251 ) = 2.019.720 像素(忽略你提到的 ~20 个元素)

    这意味着假设 32 位纹理,理论上,您使用大约 64 MB 的内存,仅用于纹理存储(甚至不假设 mipmap 和 XNA 没有放大到两个纹理的幂)(不确定 XNA 是否在内部使用 dds/dxt 压缩(?))。我可以想象这对于移动设备来说是相当高的。

    希望这可能有助于解决您的瓶颈。

    【讨论】:

    • 1x1 纹理建议非常容易测试,并且说明它应该始终是第一个尝试的东西。事实上,使用纹理图集只能提高 3-4 fps 的速度,这让我怀疑程序的其余部分。
    【解决方案2】:

    您应该尝试分析您的应用程序,以检查问题实际上是在图形渲染中还是在其他地方。

    有一些可用的工具,尽管大多数在 WP7 中工作时都有限制。第一个建议是微软的Windows Phone profiler 和 PIX 用于图形监控,在帖子中提到。还有XNA Framework Remote Performance Monitor,但据我所知没有WP7兼容版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 2013-02-11
      • 2023-03-09
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多