summaryrefslogtreecommitdiff
path: root/VRCSDK3AvatarsLegacy/Assets/VRCSDK/Dependencies/VRChat/Scripts/MaterialFallback/FallbackMaterialCache.cs
diff options
context:
space:
mode:
Diffstat (limited to 'VRCSDK3AvatarsLegacy/Assets/VRCSDK/Dependencies/VRChat/Scripts/MaterialFallback/FallbackMaterialCache.cs')
-rw-r--r--VRCSDK3AvatarsLegacy/Assets/VRCSDK/Dependencies/VRChat/Scripts/MaterialFallback/FallbackMaterialCache.cs42
1 files changed, 42 insertions, 0 deletions
diff --git a/VRCSDK3AvatarsLegacy/Assets/VRCSDK/Dependencies/VRChat/Scripts/MaterialFallback/FallbackMaterialCache.cs b/VRCSDK3AvatarsLegacy/Assets/VRCSDK/Dependencies/VRChat/Scripts/MaterialFallback/FallbackMaterialCache.cs
new file mode 100644
index 00000000..5a65be9b
--- /dev/null
+++ b/VRCSDK3AvatarsLegacy/Assets/VRCSDK/Dependencies/VRChat/Scripts/MaterialFallback/FallbackMaterialCache.cs
@@ -0,0 +1,42 @@
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+public class FallbackMaterialCache
+{
+ private readonly Dictionary<Material, Material> _fallbackMaterialCache = new Dictionary<Material, Material>();
+
+ public void AddFallbackMaterial(Material material, Material fallbackMaterial)
+ {
+ if(!_fallbackMaterialCache.ContainsKey(material))
+ {
+ _fallbackMaterialCache.Add(material, fallbackMaterial);
+ }
+ else
+ {
+ Debug.LogError($"Attempted to add a duplicate fallback material '{fallbackMaterial.name}' for original material '{material.name}'.");
+ }
+ }
+
+ public bool TryGetFallbackMaterial(Material material, out Material fallbackMaterial)
+ {
+ if(material != null)
+ {
+ return _fallbackMaterialCache.TryGetValue(material, out fallbackMaterial);
+ }
+
+ fallbackMaterial = null;
+ return false;
+ }
+
+ public void Clear()
+ {
+ Material[] cachedFallbackMaterials = _fallbackMaterialCache.Values.ToArray();
+ for(int i = cachedFallbackMaterials.Length - 1; i >= 0; i--)
+ {
+ Object.Destroy(cachedFallbackMaterials[i]);
+ }
+
+ _fallbackMaterialCache.Clear();
+ }
+}