diff options
author | chai <215380520@qq.com> | 2024-03-13 11:00:58 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2024-03-13 11:00:58 +0800 |
commit | 6ce8b9e22fc13be34b442c7b6af48b42cd44275a (patch) | |
tree | b38119d2acf0a982cb67e381f146924b9bfc3b3f /UnityEngine.PostProcessing/RenderTextureFactory.cs |
+init
Diffstat (limited to 'UnityEngine.PostProcessing/RenderTextureFactory.cs')
-rw-r--r-- | UnityEngine.PostProcessing/RenderTextureFactory.cs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/UnityEngine.PostProcessing/RenderTextureFactory.cs b/UnityEngine.PostProcessing/RenderTextureFactory.cs new file mode 100644 index 0000000..51d9f15 --- /dev/null +++ b/UnityEngine.PostProcessing/RenderTextureFactory.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; + +namespace UnityEngine.PostProcessing; + +public sealed class RenderTextureFactory : IDisposable +{ + private 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.Linear : RenderTextureReadWrite.sRGB, 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") + { + RenderTexture temporary = RenderTexture.GetTemporary(width, height, depthBuffer, format, rw); + temporary.filterMode = filterMode; + temporary.wrapMode = wrapMode; + temporary.name = name; + m_TemporaryRTs.Add(temporary); + return temporary; + } + + public void Release(RenderTexture rt) + { + if (!(rt == null)) + { + if (!m_TemporaryRTs.Contains(rt)) + { + throw new ArgumentException($"Attempting to remove a RenderTexture that was not allocated: {rt}"); + } + m_TemporaryRTs.Remove(rt); + RenderTexture.ReleaseTemporary(rt); + } + } + + public void ReleaseAll() + { + HashSet<RenderTexture>.Enumerator enumerator = m_TemporaryRTs.GetEnumerator(); + while (enumerator.MoveNext()) + { + RenderTexture.ReleaseTemporary(enumerator.Current); + } + m_TemporaryRTs.Clear(); + } + + public void Dispose() + { + ReleaseAll(); + } +} |