12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- using System;
- using System.Collections.Generic;
- namespace UnityEngine.PostProcessing
- {
- using UnityObject = Object;
- public sealed class MaterialFactory : IDisposable
- {
- Dictionary<string, Material> m_Materials;
- public MaterialFactory()
- {
- m_Materials = new Dictionary<string, Material>();
- }
- public Material Get(string shaderName)
- {
- Material material;
- if (!m_Materials.TryGetValue(shaderName, out material))
- {
- var shader = Shader.Find(shaderName);
- if (shader == null)
- throw new ArgumentException(string.Format("Shader not found ({0})", shaderName));
- material = new Material(shader)
- {
- name = string.Format("PostFX - {0}", shaderName.Substring(shaderName.LastIndexOf("/") + 1)),
- hideFlags = HideFlags.DontSave
- };
- m_Materials.Add(shaderName, material);
- }
- return material;
- }
- public void Dispose()
- {
- var enumerator = m_Materials.GetEnumerator();
- while (enumerator.MoveNext())
- {
- var material = enumerator.Current.Value;
- GraphicsUtils.Destroy(material);
- }
- m_Materials.Clear();
- }
- }
- }
|