SamplerStateNode.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using System;
  2. using UnityEditor.ShaderGraph.Drawing.Controls;
  3. using UnityEngine;
  4. using UnityEditor.Graphing;
  5. using UnityEditor.ShaderGraph.Internal;
  6. namespace UnityEditor.ShaderGraph
  7. {
  8. [Title("Input", "Texture", "Sampler State")]
  9. class SamplerStateNode : AbstractMaterialNode, IPropertyFromNode
  10. {
  11. [SerializeField]
  12. private TextureSamplerState.FilterMode m_filter = TextureSamplerState.FilterMode.Linear;
  13. [EnumControl]
  14. public TextureSamplerState.FilterMode filter
  15. {
  16. get { return m_filter; }
  17. set
  18. {
  19. if (m_filter == value)
  20. return;
  21. m_filter = value;
  22. Dirty(ModificationScope.Graph);
  23. }
  24. }
  25. [SerializeField]
  26. private TextureSamplerState.WrapMode m_wrap = TextureSamplerState.WrapMode.Repeat;
  27. [EnumControl]
  28. public TextureSamplerState.WrapMode wrap
  29. {
  30. get { return m_wrap; }
  31. set
  32. {
  33. if (m_wrap == value)
  34. return;
  35. m_wrap = value;
  36. Dirty(ModificationScope.Graph);
  37. }
  38. }
  39. public SamplerStateNode()
  40. {
  41. name = "Sampler State";
  42. UpdateNodeAfterDeserialization();
  43. }
  44. public override bool hasPreview { get { return false; } }
  45. private const int kOutputSlotId = 0;
  46. private const string kOutputSlotName = "Out";
  47. public sealed override void UpdateNodeAfterDeserialization()
  48. {
  49. AddSlot(new SamplerStateMaterialSlot(kOutputSlotId, kOutputSlotName, kOutputSlotName, SlotType.Output));
  50. RemoveSlotsNameNotMatching(new[] { kOutputSlotId });
  51. }
  52. public override string GetVariableNameForSlot(int slotId)
  53. {
  54. return GetVariableNameForNode();
  55. }
  56. public override void CollectShaderProperties(PropertyCollector properties, GenerationMode generationMode)
  57. {
  58. properties.AddShaderProperty(new SamplerStateShaderProperty()
  59. {
  60. overrideReferenceName = string.Format("{0}_{1}_{2}", NodeUtils.GetHLSLSafeName(name), m_filter, m_wrap),
  61. generatePropertyBlock = false,
  62. value = new TextureSamplerState()
  63. {
  64. filter = m_filter,
  65. wrap = m_wrap
  66. }
  67. });
  68. }
  69. public override string GetVariableNameForNode()
  70. {
  71. return string.Format(@"{0}_{1}_{2}", NodeUtils.GetHLSLSafeName(name),
  72. Enum.GetName(typeof(TextureSamplerState.FilterMode), filter),
  73. Enum.GetName(typeof(TextureSamplerState.WrapMode), wrap));
  74. }
  75. public AbstractShaderProperty AsShaderProperty()
  76. {
  77. return new SamplerStateShaderProperty
  78. {
  79. value = new TextureSamplerState()
  80. {
  81. filter = this.filter,
  82. wrap = this.wrap
  83. }
  84. };
  85. }
  86. public int outputSlotId { get { return kOutputSlotId; } }
  87. }
  88. }