统一 - 拍摄照片后不会释放 GPU RAM



拍照后如何释放GPU RAM内存达到~1000张照片时,我的电脑卡住了,因为我使用了所有的GPU RAM现在我正在使用下面的代码来创建照片:

IEnumerator takePhoto(字符串文件名( { yield return new WaitForEndOfFrame((;

    // Debug.Log(gameObject.name + " Save Color Photo");
    Texture2D screenImage = new Texture2D(Screen.width, Screen.height);
    //Get Image from screen
    screenImage.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
    screenImage.Apply();
    if(resolution == Resolution.Half)
    {
        screenImage = Utils.Resize(screenImage, Screen.width / 2, Screen.height / 2);
        // screenImage.Apply();
    }
    //Convert to png
    byte[] imageBytes = screenImage.EncodeToPNG();
    //Save image to file
    System.IO.File.WriteAllBytes(filename + "_scene.png", imageBytes);
}

Textur2D是一个 Unity 对象,这意味着它将在脚本范围之外持久存在(它存在于场景中(。 要么使用单例模式,这样你只需要内存中的一个纹理块,要么你需要Destroy它:

    //Save image to file
    System.IO.File.WriteAllBytes(filename + "_scene.png", imageBytes);
    // Destroy Textur2D Object
    Destroy(screenImage);
}

就个人而言,我推荐单例模式:

// Create texture as class-level field, outside of function
Texture2D screenImage = new Texture2D(Screen.width, Screen.height);
IEnumerator takePhoto(string filename) { yield return new WaitForEndOfFrame();
    // Debug.Log(gameObject.name + " Save Color Photo");
    //Get Image from screen
    screenImage.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
    screenImage.Apply();

最新更新