TextureCache.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #if UNITY_EDITOR
  2. using UnityEngine;
  3. using UnityEditor;
  4. using System;
  5. using System.Collections.Generic;
  6. namespace O3DWB
  7. {
  8. public class TextureCache
  9. {
  10. #region Private Variables
  11. private Dictionary<string, Texture2D> _pathToTexture = new Dictionary<string, Texture2D>(StringComparer.Ordinal);
  12. #endregion
  13. #region Public Static Functions
  14. public static TextureCache Get()
  15. {
  16. return Octave3DWorldBuilder.ActiveInstance.ToolResources.TextureCache;
  17. }
  18. #endregion
  19. #region Public Methods
  20. public bool IsTextureAvailableForRelativePath(string relativeTexturePath)
  21. {
  22. return _pathToTexture.ContainsKey(relativeTexturePath);
  23. }
  24. public Texture2D GetTextureAtRelativePath(string relativeTexturePath)
  25. {
  26. if (IsTextureAvailableForRelativePath(relativeTexturePath)) return _pathToTexture[relativeTexturePath];
  27. return LoadTextureAtPathAndStore(relativeTexturePath);
  28. }
  29. public void DisposeTextures()
  30. {
  31. foreach (var pair in _pathToTexture)
  32. {
  33. if (pair.Value != null) Octave3DWorldBuilder.DestroyImmediate(pair.Value, true);
  34. }
  35. _pathToTexture.Clear();
  36. }
  37. #endregion
  38. #region Private Methods
  39. private Texture2D LoadTextureAtPathAndStore(string relativeTexturePath)
  40. {
  41. Texture2D loadedTexture = ProjectAssetDatabase.LoadTextureAtPath(FileSystem.GetToolFolderName() + relativeTexturePath);
  42. if (loadedTexture != null)
  43. {
  44. Texture2D clonedTexture = loadedTexture.Clone(PlayerSettings.colorSpace != ColorSpace.Linear);
  45. _pathToTexture.Add(relativeTexturePath, clonedTexture);
  46. return clonedTexture;
  47. }
  48. return null;
  49. }
  50. #endregion
  51. }
  52. }
  53. #endif