111
This commit is contained in:
64
Assets/ThirdParty/PostProcessing/Runtime/Utils/RenderTextureFactory.cs
vendored
Normal file
64
Assets/ThirdParty/PostProcessing/Runtime/Utils/RenderTextureFactory.cs
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user