unity/Assets/PostProcessingV2/Runtime/Utils/PropertySheetFactory.cs (40 lines of code) (raw):
using System;
using System.Collections.Generic;
namespace UnityEngine.Rendering.PostProcessing
{
public sealed class PropertySheetFactory
{
readonly Dictionary<Shader, PropertySheet> m_Sheets;
public PropertySheetFactory()
{
m_Sheets = new Dictionary<Shader, PropertySheet>();
}
public PropertySheet Get(string shaderName)
{
return Get(Shader.Find(shaderName));
}
public PropertySheet Get(Shader shader)
{
PropertySheet sheet;
if (m_Sheets.TryGetValue(shader, out sheet))
return sheet;
if (shader == null)
throw new ArgumentException(string.Format("Invalid shader ({0})", shader));
var shaderName = shader.name;
var material = new Material(shader)
{
name = string.Format("PostProcess - {0}", shaderName.Substring(shaderName.LastIndexOf('/') + 1)),
hideFlags = HideFlags.DontSave
};
sheet = new PropertySheet(material);
m_Sheets.Add(shader, sheet);
return sheet;
}
public void Release()
{
foreach (var sheet in m_Sheets.Values)
sheet.Release();
m_Sheets.Clear();
}
}
}