暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ScreenPositionMaterialSlot.cs 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using UnityEditor.Graphing;
  3. using UnityEditor.ShaderGraph.Drawing.Slots;
  4. using UnityEngine;
  5. using UnityEngine.UIElements;
  6. namespace UnityEditor.ShaderGraph
  7. {
  8. [Serializable]
  9. class ScreenPositionMaterialSlot : Vector4MaterialSlot, IMayRequireScreenPosition, IMayRequireNDCPosition, IMayRequirePixelPosition
  10. {
  11. [SerializeField]
  12. ScreenSpaceType m_ScreenSpaceType;
  13. public ScreenSpaceType screenSpaceType
  14. {
  15. get { return m_ScreenSpaceType; }
  16. set { m_ScreenSpaceType = value; }
  17. }
  18. public override bool isDefaultValue => screenSpaceType == ScreenSpaceType.Default;
  19. public ScreenPositionMaterialSlot()
  20. { }
  21. public ScreenPositionMaterialSlot(int slotId, string displayName, string shaderOutputName, ScreenSpaceType screenSpaceType,
  22. ShaderStageCapability stageCapability = ShaderStageCapability.All, bool hidden = false)
  23. : base(slotId, displayName, shaderOutputName, SlotType.Input, Vector3.zero, stageCapability, hidden: hidden)
  24. {
  25. this.screenSpaceType = screenSpaceType;
  26. }
  27. public override VisualElement InstantiateControl()
  28. {
  29. return new ScreenPositionSlotControlView(this);
  30. }
  31. public override string GetDefaultValue(GenerationMode generationMode)
  32. {
  33. return m_ScreenSpaceType.ToValueAsVariable();
  34. }
  35. public bool RequiresScreenPosition(ShaderStageCapability stageCapability)
  36. {
  37. return !isConnected && screenSpaceType.RequiresScreenPosition();
  38. }
  39. public bool RequiresNDCPosition(ShaderStageCapability stageCapability)
  40. {
  41. return !isConnected && screenSpaceType.RequiresNDCPosition();
  42. }
  43. public bool RequiresPixelPosition(ShaderStageCapability stageCapability)
  44. {
  45. return !isConnected && screenSpaceType.RequiresPixelPosition();
  46. }
  47. public override void CopyValuesFrom(MaterialSlot foundSlot)
  48. {
  49. var slot = foundSlot as ScreenPositionMaterialSlot;
  50. if (slot != null)
  51. screenSpaceType = slot.screenSpaceType;
  52. }
  53. }
  54. }