IsFrontFaceNode.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. using UnityEngine;
  2. using UnityEditor.Graphing;
  3. namespace UnityEditor.ShaderGraph
  4. {
  5. [Title("Utility", "Logic", "Is Front Face")]
  6. class IsFrontFaceNode : AbstractMaterialNode, IGeneratesBodyCode, IMayRequireFaceSign
  7. {
  8. public IsFrontFaceNode()
  9. {
  10. name = "Is Front Face";
  11. UpdateNodeAfterDeserialization();
  12. }
  13. public override bool hasPreview { get { return false; } }
  14. public const int OutputSlotId = 0;
  15. private const string kOutputSlotName = "Out";
  16. public override void UpdateNodeAfterDeserialization()
  17. {
  18. AddSlot(new BooleanMaterialSlot(OutputSlotId, kOutputSlotName, kOutputSlotName, SlotType.Output, true, ShaderStageCapability.Fragment));
  19. RemoveSlotsNameNotMatching(new[] { OutputSlotId });
  20. }
  21. public void GenerateNodeCode(ShaderStringBuilder sb, GenerationMode generationMode)
  22. {
  23. sb.AppendLine(string.Format("$precision {0} = max(0, IN.{1});", GetVariableNameForSlot(OutputSlotId), ShaderGeneratorNames.FaceSign));
  24. }
  25. public bool RequiresFaceSign(ShaderStageCapability stageCapability = ShaderStageCapability.Fragment)
  26. {
  27. return true;
  28. }
  29. }
  30. }