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