XNA内存中加载了太多纹理

时间:2011-01-21 13:45:21

标签: memory xna loading textures

我正在为图形引擎开发一个关卡编辑器。最近,随着一个项目的扩展,我遇到了内存问题。特别是,水平相当大,需要加载大约300个不同大小的纹理。一些纹理非常像2048x2048,其他纹理更小,如256x256或512x512。无论如何,编辑器为此级别消耗了1.3gb的内存,并且因为它抛出内存异常而无法加载某些纹理。那么我有什么解决方案呢?

现在我能想到的唯一解决方案是将级别划分为更小的部分,并根据可见区域按需加载纹理。但我相信这会减慢在现场导航时的性能。有什么想法吗?在这个问题上,关于级别编辑应该有一些标准的方法。

2 个答案:

答案 0 :(得分:3)

你基本上有两个选择

  1. 切换到基于图块的方法。如果您正在使用磁贴,这意味着您可以反复使用相同的纹理,从而节省大量内存。
  2. 按照您的描述切换到按需。
  3. 我在想,如果您的艺术方向与基于图块的方法没有真正相符,那么您将需要开始考虑方法#2。需要考虑的一些事情

    • 它不一定非常慢,只要你的“活动”区域足够大,这样你就不会过于频繁地加载磁盘,你应该没事。
    • 衡量衡量标准,你可能需要更好地掌握你的记忆预算,并设计你的水平而不是设计,直到你碰壁。 : - )
    • 维护单独的内容管理员,请记住,您无法卸载通过contentmanager加载的单个内容,因此请保留一个管理器列表,以便在您移动时可以更换。

答案 1 :(得分:1)

使用不同质量的纹理可能是一个好主意,如果你在远处使用64x64纹理,那么当你靠近时,请将其交换为128x128,256x256,512x512等...同时重新考虑使用2056x2056的纹理,因为它最好有4个1024x1024纹理:)。

(注意:生成mip-maps会部分执行此操作,但不会释放计算机上的内存)

编辑:也尝试打开DXT5纹理压缩,这可能会节省大量内存!