A game about forced loneliness, made by TACStudios
at master 2.2 kB view raw
1using UnityEngine; 2using UnityEditor.Graphing; 3using UnityEditor.ShaderGraph.Drawing.Controls; 4 5namespace UnityEditor.ShaderGraph 6{ 7 [Title("Input", "Geometry", "Screen Position")] 8 class ScreenPositionNode : AbstractMaterialNode, IGeneratesBodyCode, IMayRequireScreenPosition, IMayRequireNDCPosition, IMayRequirePixelPosition 9 { 10 public ScreenPositionNode() 11 { 12 name = "Screen Position"; 13 UpdateNodeAfterDeserialization(); 14 } 15 16 [SerializeField] 17 private ScreenSpaceType m_ScreenSpaceType = ScreenSpaceType.Default; 18 19 [EnumControl("Mode")] 20 public ScreenSpaceType screenSpaceType 21 { 22 get { return m_ScreenSpaceType; } 23 set 24 { 25 if (m_ScreenSpaceType == value) 26 return; 27 28 m_ScreenSpaceType = value; 29 Dirty(ModificationScope.Graph); 30 } 31 } 32 33 private const int kOutputSlotId = 0; 34 private const string kOutputSlotName = "Out"; 35 36 public override bool hasPreview { get { return true; } } 37 38 public sealed override void UpdateNodeAfterDeserialization() 39 { 40 AddSlot(new Vector4MaterialSlot(kOutputSlotId, kOutputSlotName, kOutputSlotName, SlotType.Output, Vector4.zero)); 41 RemoveSlotsNameNotMatching(new[] { kOutputSlotId }); 42 } 43 44 public void GenerateNodeCode(ShaderStringBuilder sb, GenerationMode generationMode) 45 { 46 sb.AppendLine(string.Format("$precision4 {0} = {1};", GetVariableNameForSlot(kOutputSlotId), m_ScreenSpaceType.ToValueAsVariable())); 47 } 48 49 bool IMayRequireScreenPosition.RequiresScreenPosition(ShaderStageCapability stageCapability) 50 { 51 return screenSpaceType.RequiresScreenPosition(); 52 } 53 54 bool IMayRequireNDCPosition.RequiresNDCPosition(ShaderStageCapability stageCapability) 55 { 56 return screenSpaceType.RequiresNDCPosition(); 57 } 58 59 bool IMayRequirePixelPosition.RequiresPixelPosition(ShaderStageCapability stageCapability) 60 { 61 return screenSpaceType.RequiresPixelPosition(); 62 } 63 } 64}