| 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); | 
|     } | 
|   | 
| } |