ShaderInput.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System;
  2. using UnityEngine;
  3. namespace UnityEditor.ShaderGraph.Internal
  4. {
  5. public abstract class ShaderInput
  6. {
  7. [SerializeField]
  8. SerializableGuid m_Guid = new SerializableGuid();
  9. internal Guid guid => m_Guid.guid;
  10. [SerializeField]
  11. string m_Name;
  12. public string displayName
  13. {
  14. get
  15. {
  16. if (string.IsNullOrEmpty(m_Name))
  17. return $"{concreteShaderValueType}_{GuidEncoder.Encode(guid)}";
  18. return m_Name;
  19. }
  20. set => m_Name = value;
  21. }
  22. [SerializeField]
  23. string m_DefaultReferenceName;
  24. public string referenceName
  25. {
  26. get
  27. {
  28. if (string.IsNullOrEmpty(overrideReferenceName))
  29. {
  30. if (string.IsNullOrEmpty(m_DefaultReferenceName))
  31. m_DefaultReferenceName = GetDefaultReferenceName();
  32. return m_DefaultReferenceName;
  33. }
  34. return overrideReferenceName;
  35. }
  36. }
  37. // This is required to handle Material data serialized with "_Color_GUID" reference names
  38. // m_DefaultReferenceName expects to match the material data and previously used PropertyType
  39. // ColorShaderProperty is the only case where PropertyType doesnt match ConcreteSlotValueType
  40. public virtual string GetDefaultReferenceName()
  41. {
  42. return $"{concreteShaderValueType.ToString()}_{GuidEncoder.Encode(guid)}";
  43. }
  44. [SerializeField]
  45. string m_OverrideReferenceName;
  46. internal string overrideReferenceName
  47. {
  48. get => m_OverrideReferenceName;
  49. set => m_OverrideReferenceName = value;
  50. }
  51. [SerializeField]
  52. bool m_GeneratePropertyBlock = true;
  53. internal bool generatePropertyBlock
  54. {
  55. get => m_GeneratePropertyBlock;
  56. set => m_GeneratePropertyBlock = value;
  57. }
  58. internal abstract ConcreteSlotValueType concreteShaderValueType { get; }
  59. internal abstract bool isExposable { get; }
  60. internal abstract bool isRenamable { get; }
  61. internal abstract ShaderInput Copy();
  62. }
  63. }