Для этого у меня есть сценарий, который создает экземпляр текстуры рендеринга и необходимый мне материал, а затем применяет материал к существующей текстуре рендеринга и записывает результат в файл. созданная текстура рендеринга.
Вот что у меня есть:
Код: Выделить всё
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) текущей измеренной картой высот (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