Aucune description
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

Vector1ShaderProperty.cs 6.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Text;
  5. using System.Linq;
  6. using UnityEditor.Graphing;
  7. using UnityEngine;
  8. namespace UnityEditor.ShaderGraph.Internal
  9. {
  10. [Serializable]
  11. [FormerName("UnityEditor.ShaderGraph.FloatShaderProperty")]
  12. [FormerName("UnityEditor.ShaderGraph.Vector1ShaderProperty")]
  13. [BlackboardInputInfo(0, "Float")]
  14. public sealed class Vector1ShaderProperty : AbstractShaderProperty<float>
  15. {
  16. internal Vector1ShaderProperty()
  17. {
  18. displayName = "Float";
  19. }
  20. public override PropertyType propertyType => PropertyType.Float;
  21. internal override bool isExposable => true;
  22. internal override bool isRenamable => true;
  23. public override float value
  24. {
  25. get
  26. {
  27. if (floatType == FloatType.Integer)
  28. {
  29. return (int)base.value;
  30. }
  31. return base.value;
  32. }
  33. set => base.value = value;
  34. }
  35. string enumTagString
  36. {
  37. get
  38. {
  39. switch (enumType)
  40. {
  41. case EnumType.CSharpEnum:
  42. return $"[Enum({m_CSharpEnumType.ToString()})]";
  43. case EnumType.KeywordEnum:
  44. return $"[KeywordEnum({string.Join(", ", enumNames)})]";
  45. default:
  46. string enumValuesString = "";
  47. for (int i = 0; i < enumNames.Count; i++)
  48. {
  49. int value = (i < enumValues.Count) ? enumValues[i] : i;
  50. enumValuesString += (enumNames[i] + ", " + value + ((i != enumNames.Count - 1) ? ", " : ""));
  51. }
  52. return $"[Enum({enumValuesString})]";
  53. }
  54. }
  55. }
  56. internal override string GetHLSLVariableName(bool isSubgraphProperty, GenerationMode mode)
  57. {
  58. HLSLDeclaration decl = GetDefaultHLSLDeclaration();
  59. if (decl == HLSLDeclaration.HybridPerInstance)
  60. return $"UNITY_ACCESS_HYBRID_INSTANCED_PROP({referenceName}, {concretePrecision.ToShaderString()})";
  61. else
  62. return base.GetHLSLVariableName(isSubgraphProperty, mode);
  63. }
  64. internal override string GetPropertyBlockString()
  65. {
  66. string valueString = NodeUtils.FloatToShaderValueShaderLabSafe(value);
  67. switch (floatType)
  68. {
  69. case FloatType.Slider:
  70. return $"{hideTagString}{referenceName}(\"{displayName}\", Range({NodeUtils.FloatToShaderValueShaderLabSafe(m_RangeValues.x)}, {NodeUtils.FloatToShaderValueShaderLabSafe(m_RangeValues.y)})) = {valueString}";
  71. case FloatType.Integer:
  72. return $"{hideTagString}{referenceName}(\"{displayName}\", Int) = {((int)value).ToString(CultureInfo.InvariantCulture)}";
  73. case FloatType.Enum:
  74. return $"{hideTagString}{enumTagString}{referenceName}(\"{displayName}\", Float) = {valueString}";
  75. default:
  76. return $"{hideTagString}{referenceName}(\"{displayName}\", Float) = {valueString}";
  77. }
  78. }
  79. internal override string GetPropertyAsArgumentString(string precisionString)
  80. {
  81. return $"{concreteShaderValueType.ToShaderString(precisionString)} {referenceName}";
  82. }
  83. internal override void ForeachHLSLProperty(Action<HLSLProperty> action)
  84. {
  85. HLSLDeclaration decl = GetDefaultHLSLDeclaration();
  86. action(new HLSLProperty(HLSLType._float, referenceName, decl, concretePrecision));
  87. }
  88. [SerializeField]
  89. FloatType m_FloatType = FloatType.Default;
  90. public FloatType floatType
  91. {
  92. get => m_FloatType;
  93. set => m_FloatType = value;
  94. }
  95. [SerializeField]
  96. Vector2 m_RangeValues = new Vector2(0, 1);
  97. public Vector2 rangeValues
  98. {
  99. get => m_RangeValues;
  100. set => m_RangeValues = value;
  101. }
  102. EnumType m_EnumType = EnumType.Enum;
  103. public EnumType enumType
  104. {
  105. get => m_EnumType;
  106. set => m_EnumType = value;
  107. }
  108. Type m_CSharpEnumType;
  109. public Type cSharpEnumType
  110. {
  111. get => m_CSharpEnumType;
  112. set => m_CSharpEnumType = value;
  113. }
  114. List<string> m_EnumNames = new List<string>();
  115. public List<string> enumNames
  116. {
  117. get => m_EnumNames;
  118. set => m_EnumNames = value;
  119. }
  120. List<int> m_EnumValues = new List<int>();
  121. public List<int> enumValues
  122. {
  123. get => m_EnumValues;
  124. set => m_EnumValues = value;
  125. }
  126. internal override AbstractMaterialNode ToConcreteNode()
  127. {
  128. switch (m_FloatType)
  129. {
  130. case FloatType.Slider:
  131. return new SliderNode { value = new Vector3(value, m_RangeValues.x, m_RangeValues.y) };
  132. case FloatType.Integer:
  133. return new IntegerNode { value = (int)value };
  134. default:
  135. var node = new Vector1Node();
  136. node.FindInputSlot<Vector1MaterialSlot>(Vector1Node.InputSlotXId).value = value;
  137. return node;
  138. }
  139. }
  140. internal override PreviewProperty GetPreviewMaterialProperty()
  141. {
  142. return new PreviewProperty(propertyType)
  143. {
  144. name = referenceName,
  145. floatValue = value
  146. };
  147. }
  148. internal override ShaderInput Copy()
  149. {
  150. return new Vector1ShaderProperty()
  151. {
  152. displayName = displayName,
  153. value = value,
  154. floatType = floatType,
  155. rangeValues = rangeValues,
  156. enumType = enumType,
  157. enumNames = enumNames,
  158. enumValues = enumValues,
  159. };
  160. }
  161. public override int latestVersion => 1;
  162. public override void OnAfterDeserialize(string json)
  163. {
  164. if (sgVersion == 0)
  165. {
  166. LegacyShaderPropertyData.UpgradeToHLSLDeclarationOverride(json, this);
  167. ChangeVersion(1);
  168. }
  169. }
  170. }
  171. public enum FloatType { Default, Slider, Integer, Enum }
  172. public enum EnumType { Enum, CSharpEnum, KeywordEnum, }
  173. }