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