Перезагрузить/сбросить Texture2D в XNA Windowsphone

Я манипулирую Texture2D с помощью Texture2D.Setdata и меняю его цвет.

Но я хочу снова сбросить Texture2D через некоторое время, в настоящее время у меня есть все данные текстуры в памяти, но теперь у меня есть OutOfMemoryExceptions в моем приложении.

Я пробовал это:

Color[] bla = new Color[thetexture.Width * thetexture.Height];
this.Content.Load<Texture2D>(".\\textures\\mytexture").GetData(bla);
thetexture.SetData(bla);

Но это ничего не меняет, текстура просто остается цветной.

Как мне сбросить текстуру, чтобы она выглядела как свежезагруженная, но с маленьким Памьюзусом?


person Jonathan    schedule 24.03.2013    source источник


Ответы (1)


ContentManager кэширует объекты. Ваш вызов Load возвращает предположительно тот же объект, что и ваш thetexture (тот, который вы уже изменили).

Вам нужно загрузить отдельный экземпляр вашей текстуры с исходными данными. Для этого вам нужен отдельный ContentManager. Возможно, тот, который был настроен на никогда не кэшируйте объекты.

В качестве альтернативы создайте объект new Texture2D и скопируйте в него исходные данные перед их изменением, оставив оригинал нетронутым.

person Andrew Russell    schedule 25.03.2013