XNA Слишком много текстур загружено в память - PullRequest
1 голос
/ 21 января 2011

Я работаю над редактором уровней для графического движка. Недавно, когда один проект расширился, у меня возникли проблемы с памятью. В частности, уровень довольно большой, и необходимо загрузить около 300 текстур разного размера. Некоторые текстуры довольно большие, например, 2048x2048, другие меньше, например, 256x256 или 512x512. В любом случае, редактор потребляет 1,3 ГБ памяти для этого уровня, и некоторые текстуры не могут быть загружены, поскольку он выбрасывает исключения из памяти. Итак, какие решения у меня здесь?

Сейчас единственное решение, которое я могу придумать, - это разделить уровень на более мелкие части и загрузить текстуры по требованию, в зависимости от видимой области. Но я считаю, что это сильно замедлит работу при навигации по сцене. Какие-нибудь мысли? В этом отношении должен быть какой-то стандартный подход для редакторов уровней.

Ответы [ 2 ]

3 голосов
/ 21 января 2011

У вас есть два варианта

  1. Переключитесь на подход на основе тайлов. Если вы используете плитки, это означает, что вы можете снова и снова использовать одну и ту же текстуру, что экономит много памяти.
  2. Переключитесь на по требованию, как вы описали.

Я думаю, что если ваше художественное направление не совпадает с подходом, основанным на плитке, то вы захотите начать думать о подходе №2. Несколько вещей, чтобы подумать о

  • Это не обязательно должно быть медленно, если ваши «активные» области достаточно велики, чтобы вы не перегружали диск при слишком частой загрузке, с вами все будет в порядке.
  • Мера мера мера, вы, вероятно, должны лучше понять, каков ваш бюджет памяти, и планировать свои уровни вокруг этого, а не проектировать, пока не столкнетесь с стеной. : -)
  • Поддерживайте отдельные менеджеры контента, помните, что вы не можете выгружать отдельные фрагменты контента, загруженные с помощью Contentmanager, поэтому держите список менеджеров, которые вы можете поменять при перемещении.
1 голос
/ 22 января 2011

Это может быть хорошей идеей для использования с текстурами разного качества, если вы далеко используете текстуру 64x64, тогда, когда вы приблизитесь, продолжайте менять ее на 128x128, 256x256, 512x512 и т. Д. Также пересмотрите с использованием текстур 2056x2056, так как лучше иметь 4 текстуры 1024x1024:).

(примечание: генерация mip-карт частично делает это, но не освобождает память на вашем компьютере)

Редактировать: также попробуйте включить сжатие текстур DXT5, что может сэкономить много памяти!

...