From 6ce8b9e22fc13be34b442c7b6af48b42cd44275a Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Wed, 13 Mar 2024 11:00:58 +0800 Subject: +init --- UnityEngine.PostProcessing/RenderTextureFactory.cs | 57 ++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 UnityEngine.PostProcessing/RenderTextureFactory.cs (limited to 'UnityEngine.PostProcessing/RenderTextureFactory.cs') 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 m_TemporaryRTs; + + public RenderTextureFactory() + { + m_TemporaryRTs = new HashSet(); + } + + 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.Enumerator enumerator = m_TemporaryRTs.GetEnumerator(); + while (enumerator.MoveNext()) + { + RenderTexture.ReleaseTemporary(enumerator.Current); + } + m_TemporaryRTs.Clear(); + } + + public void Dispose() + { + ReleaseAll(); + } +} -- cgit v1.1-26-g67d0