halfmagic
10/16/2019 - 3:21 AM

Streaming render texture with rendering display(memory leak alert)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PreviewManager : MonoBehaviour {
    [Header ("Preview References")]
    public Camera[] renderCam = new Camera[3];
    public Renderer[] previewRenderer = new Renderer[3];
    Texture2D[] previewTex = new Texture2D[3];
    RenderTexture[] renderTex = new RenderTexture[3];
    bool isPreviewRendering = true;
    void LateUpdate () {
        OnPostRender ();
    }
    void OnPostRender () {
        if (!isPreviewRendering) return;
        for (int i = 0; i < renderCam.Length; i++) {
            renderTex[i] = GetCameraRT (renderCam[i]);
            previewTex[i] = toTexture2D (renderTex[i]);
            previewRenderer[i].material.SetTexture ("_BaseColorMap", previewTex[i]);
        }
    }
    public RenderTexture GetCameraRT (Camera cam) {
        var rt = RenderTexture.GetTemporary (Screen.width, Screen.height);
        cam.targetTexture = rt;
        cam.Render ();
        cam.targetTexture = null;
        return rt;
    }
    Texture2D toTexture2D (RenderTexture rTex) {
        Texture2D tex = new Texture2D (512, 512, TextureFormat.RGB24, false);
        RenderTexture.active = rTex;
        tex.ReadPixels (new Rect (0, 0, rTex.width, rTex.height), 0, 0);
        tex.Apply ();
        return tex;
    }
}