| using System; | 
| using System.Collections.Generic; | 
|   | 
| namespace UnityEngine.PostProcessing | 
| { | 
|     public sealed class RenderTextureFactory : IDisposable | 
|     { | 
|         HashSet<RenderTexture> m_TemporaryRTs; | 
|   | 
|         public RenderTextureFactory() | 
|         { | 
|             m_TemporaryRTs = new HashSet<RenderTexture>(); | 
|         } | 
|   | 
|         public RenderTexture Get(RenderTexture baseRenderTexture) | 
|         { | 
|             return Get( | 
|                 baseRenderTexture.width, | 
|                 baseRenderTexture.height, | 
|                 baseRenderTexture.depth, | 
|                 baseRenderTexture.format, | 
|                 baseRenderTexture.sRGB ? RenderTextureReadWrite.sRGB : RenderTextureReadWrite.Linear, | 
|                 baseRenderTexture.filterMode, | 
|                 baseRenderTexture.wrapMode | 
|                 ); | 
|         } | 
|   | 
|         public RenderTexture Get(int width, int height, int depthBuffer = 0, RenderTextureFormat format = RenderTextureFormat.ARGBHalf, RenderTextureReadWrite rw = RenderTextureReadWrite.Default, FilterMode filterMode = FilterMode.Bilinear, TextureWrapMode wrapMode = TextureWrapMode.Clamp, string name = "FactoryTempTexture") | 
|         { | 
|             var rt = RenderTexture.GetTemporary(width, height, depthBuffer, format, rw); // add forgotten param rw | 
|             rt.filterMode = filterMode; | 
|             rt.wrapMode = wrapMode; | 
|             rt.name = name; | 
|             m_TemporaryRTs.Add(rt); | 
|             return rt; | 
|         } | 
|   | 
|         public void Release(RenderTexture rt) | 
|         { | 
|             if (rt == null) | 
|                 return; | 
|   | 
|             if (!m_TemporaryRTs.Contains(rt)) | 
|                 throw new ArgumentException(string.Format("Attempting to remove a RenderTexture that was not allocated: {0}", rt)); | 
|   | 
|             m_TemporaryRTs.Remove(rt); | 
|             RenderTexture.ReleaseTemporary(rt); | 
|         } | 
|   | 
|         public void ReleaseAll() | 
|         { | 
|             var enumerator = m_TemporaryRTs.GetEnumerator(); | 
|             while (enumerator.MoveNext()) | 
|                 RenderTexture.ReleaseTemporary(enumerator.Current); | 
|   | 
|             m_TemporaryRTs.Clear(); | 
|         } | 
|   | 
|         public void Dispose() | 
|         { | 
|             ReleaseAll(); | 
|         } | 
|     } | 
| } |