1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- using UnityEditor.ShaderGraph.Drawing.Controls;
- using UnityEngine;
- using UnityEditor.Graphing;
- using UnityEditor.ShaderGraph.Internal;
- namespace UnityEditor.ShaderGraph
- {
- [Title("Input", "Geometry", "UV")]
- class UVNode : AbstractMaterialNode, IGeneratesBodyCode, IMayRequireMeshUV
- {
- public const int OutputSlotId = 0;
- private const string kOutputSlotName = "Out";
- [SerializeField]
- private UVChannel m_OutputChannel;
- [EnumControl("Channel")]
- public UVChannel uvChannel
- {
- get { return m_OutputChannel; }
- set
- {
- if (m_OutputChannel == value)
- return;
- m_OutputChannel = value;
- Dirty(ModificationScope.Graph);
- }
- }
- public override bool hasPreview { get { return true; } }
- public UVNode()
- {
- name = "UV";
- UpdateNodeAfterDeserialization();
- }
- public override void UpdateNodeAfterDeserialization()
- {
- AddSlot(new Vector4MaterialSlot(OutputSlotId, kOutputSlotName, kOutputSlotName, SlotType.Output, Vector2.zero));
- RemoveSlotsNameNotMatching(new[] { OutputSlotId });
- }
- public void GenerateNodeCode(ShaderStringBuilder sb, GenerationMode generationMode)
- {
- sb.AppendLine(string.Format("$precision4 {0} = IN.{1};", GetVariableNameForSlot(OutputSlotId), m_OutputChannel.GetUVName()));
- }
- public bool RequiresMeshUV(UVChannel channel, ShaderStageCapability stageCapability)
- {
- return channel == uvChannel;
- }
- }
- }
|