summaryrefslogtreecommitdiff
path: root/UnityEngine.PostProcessing/MaterialFactory.cs
diff options
context:
space:
mode:
Diffstat (limited to 'UnityEngine.PostProcessing/MaterialFactory.cs')
-rw-r--r--UnityEngine.PostProcessing/MaterialFactory.cs43
1 files changed, 43 insertions, 0 deletions
diff --git a/UnityEngine.PostProcessing/MaterialFactory.cs b/UnityEngine.PostProcessing/MaterialFactory.cs
new file mode 100644
index 0000000..dbbed34
--- /dev/null
+++ b/UnityEngine.PostProcessing/MaterialFactory.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+
+namespace UnityEngine.PostProcessing;
+
+public sealed class MaterialFactory : IDisposable
+{
+ private Dictionary<string, Material> m_Materials;
+
+ public MaterialFactory()
+ {
+ m_Materials = new Dictionary<string, Material>();
+ }
+
+ public Material Get(string shaderName)
+ {
+ if (!m_Materials.TryGetValue(shaderName, out var value))
+ {
+ Shader shader = Shader.Find(shaderName);
+ if (shader == null)
+ {
+ throw new ArgumentException($"Shader not found ({shaderName})");
+ }
+ Material material = new Material(shader);
+ material.name = string.Format("PostFX - {0}", shaderName.Substring(shaderName.LastIndexOf("/") + 1));
+ material.hideFlags = HideFlags.DontSave;
+ value = material;
+ m_Materials.Add(shaderName, value);
+ }
+ return value;
+ }
+
+ public void Dispose()
+ {
+ Dictionary<string, Material>.Enumerator enumerator = m_Materials.GetEnumerator();
+ while (enumerator.MoveNext())
+ {
+ Material value = enumerator.Current.Value;
+ GraphicsUtils.Destroy(value);
+ }
+ m_Materials.Clear();
+ }
+}