using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
  
 | 
public class RenderTextureCreator : MonoBehaviour 
 | 
{ 
 | 
    [SerializeField] Vector2 m_Size; 
 | 
    [SerializeField] Camera m_TargetCamera; 
 | 
    [SerializeField] bool m_Reuse = false; 
 | 
  
 | 
    static Dictionary<Vector2, RenderTexture> m_RenderTexDict = new Dictionary<Vector2, RenderTexture>(); 
 | 
  
 | 
    private void Awake() 
 | 
    { 
 | 
        if (m_TargetCamera != null && m_TargetCamera.targetTexture == null) 
 | 
        { 
 | 
            RenderTexture rt; 
 | 
            if (m_Reuse && GetRenderTexture(m_Size, out rt)) 
 | 
            { 
 | 
                m_TargetCamera.targetTexture = rt; 
 | 
                return; 
 | 
            } 
 | 
  
 | 
            rt = new RenderTexture(Mathf.RoundToInt(m_Size.x), Mathf.RoundToInt(m_Size.y), 16); 
 | 
            switch (Application.platform) 
 | 
            { 
 | 
                case RuntimePlatform.OSXEditor: 
 | 
                case RuntimePlatform.WindowsEditor: 
 | 
                case RuntimePlatform.WindowsPlayer: 
 | 
                    rt.format = RenderTextureFormat.ARGB32; 
 | 
                    break; 
 | 
                default: 
 | 
                    rt.format = RenderTextureFormat.ARGB4444; 
 | 
                    break; 
 | 
            } 
 | 
  
 | 
            rt.useMipMap = false; 
 | 
            rt.wrapMode = TextureWrapMode.Clamp; 
 | 
            rt.filterMode = FilterMode.Bilinear; 
 | 
  
 | 
            m_TargetCamera.targetTexture = rt; 
 | 
  
 | 
            if (!m_RenderTexDict.ContainsKey(m_Size)) 
 | 
            { 
 | 
                m_RenderTexDict.Add(m_Size, rt); 
 | 
            } 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    public static bool GetRenderTexture(Vector2 _Size, out RenderTexture _tex) 
 | 
    { 
 | 
        return m_RenderTexDict.TryGetValue(_Size, out _tex); 
 | 
    } 
 | 
  
 | 
} 
 |