Как в Unity удалить RenderTexture из памяти при выгрузке сценыC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как в Unity удалить RenderTexture из памяти при выгрузке сцены

Сообщение Anonymous »

У меня есть Unity-сцена, в которой я выполняю некоторые вычисления с помощью шейдеров и RenderTextures.

Для этого у меня есть сценарий, который создает экземпляр текстуры рендеринга и необходимый мне материал, а затем применяет материал к существующей текстуре рендеринга и записывает результат в файл. созданная текстура рендеринга.

Вот что у меня есть:

Код: Выделить всё

public RenderTexture dstTex;
public RenderTexture srcTex1;
public RenderTexture srcTex2;
public Shader myComputeShader;
public Material myMaterial;

void Awake()
{

//Create result render Texture
dstTex = new RenderTexture(textureSizeX, textureSizeY, 16, RenderTextureFormat.ARGB32);
dstTex.Create();

//Create material
myMaterial = new Material(myComputeShader);
myMaterial.SetTexture("_srcTex2", srcTex2);
}

void Update()
{
//Apply material to srcTex1 and write result in dstTex
Graphics.Blit(srcTex1, dstTex, myMaterial);
}
Теперь это работает нормально. Моя проблема заключается в том, что когда я перезагружаю свою сцену или загружаю другую сцену, использующую тот же сценарий, dstTex не инициализируется повторно.

Какой мой сценарий? фактически обновляет карту высот комнаты (dstTex) текущей измеренной картой высот (srcTex). Таким образом, значения srcTex меняются со временем, а dstTex со временем заполняется.

Затем, когда я перезагружаю свою сцену, я ожидаю, что dstTex снова станет черным, поскольку он снова создается с помощью dstTex = new RenderTexture(textureSizeX,textSizeY, 16, RenderTextureFormat. ARGB32);. Но это не так, значения предыдущей сцены все еще находятся в текстуре.

Я пытался добавить следующие строки в свой скрипт, чтобы решить эту проблему, но это получилось не работает:

Код: Выделить всё

void OnDestroy()
{   srcTex1.Release();
srcTex2.Release();
dstTex.Release();

srcTex1.DiscardContents();
srcTex2.DiscardContents();
dstTex.DiscardContents();
}
Есть идеи, как удалить эти текстуры из памяти?

Подробнее здесь: https://stackoverflow.com/questions/458 ... s-unloaded
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»