HelperParentNode.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // Amplify Shader Editor - Visual Shader Editing Tool
  2. // Copyright (c) Amplify Creations, Lda <info@amplify.pt>
  3. //https://docs.unity3d.com/Manual/SL-BuiltinFunctions.html
  4. using System;
  5. using UnityEngine;
  6. namespace AmplifyShaderEditor
  7. {
  8. [Serializable]
  9. public class HelperParentNode : ParentNode
  10. {
  11. [SerializeField]
  12. protected string m_funcType = string.Empty;
  13. [SerializeField]
  14. protected string m_funcLWFormatOverride = string.Empty;
  15. [SerializeField]
  16. protected string m_funcHDFormatOverride = string.Empty;
  17. protected string m_localVarName = null;
  18. protected override void CommonInit( int uniqueId )
  19. {
  20. base.CommonInit( uniqueId );
  21. AddInputPort( WirePortDataType.FLOAT, false, Constants.EmptyPortValue );
  22. AddOutputPort( WirePortDataType.FLOAT, Constants.EmptyPortValue );
  23. m_useInternalPortData = true;
  24. }
  25. public override string GetIncludes()
  26. {
  27. return Constants.UnityCgLibFuncs;
  28. }
  29. public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar )
  30. {
  31. if( m_outputPorts[ 0 ].IsLocalValue( dataCollector.PortCategory ) )
  32. return GetOutputVectorItem( 0, outputId, m_outputPorts[ 0 ].LocalValue( dataCollector.PortCategory ) );
  33. base.GenerateShaderForOutput( outputId, ref dataCollector, ignoreLocalvar );
  34. if( !( dataCollector.IsTemplate && dataCollector.IsSRP ) )
  35. dataCollector.AddToIncludes( UniqueId, Constants.UnityCgLibFuncs );
  36. string concatResults = string.Empty;
  37. bool first = true;
  38. for( int i = 0; i < m_inputPorts.Count; i++ )
  39. {
  40. if( m_inputPorts[ i ].Visible )
  41. {
  42. if( !first )
  43. {
  44. concatResults += " , ";
  45. }
  46. else
  47. {
  48. first = false;
  49. }
  50. string result = string.Empty;
  51. if( m_inputPorts[ i ].IsConnected )
  52. {
  53. result = m_inputPorts[ i ].GeneratePortInstructions( ref dataCollector );
  54. }
  55. else
  56. {
  57. result = m_inputPorts[ i ].WrappedInternalData;
  58. }
  59. concatResults += result;
  60. }
  61. }
  62. string finalResult = m_funcType + "( " + concatResults + " )";
  63. if( dataCollector.IsTemplate )
  64. {
  65. if( dataCollector.TemplateDataCollectorInstance.CurrentSRPType == TemplateSRPType.URP && !string.IsNullOrEmpty( m_funcLWFormatOverride ) )
  66. {
  67. finalResult = string.Format( m_funcLWFormatOverride, concatResults );
  68. }
  69. else if( dataCollector.TemplateDataCollectorInstance.CurrentSRPType == TemplateSRPType.HDRP && !string.IsNullOrEmpty( m_funcHDFormatOverride ) )
  70. {
  71. finalResult = string.Format( m_funcHDFormatOverride, concatResults );
  72. }
  73. }
  74. RegisterLocalVariable( 0, finalResult, ref dataCollector, m_localVarName );
  75. return GetOutputVectorItem( 0, outputId, m_outputPorts[ 0 ].LocalValue( dataCollector.PortCategory ) );
  76. }
  77. }
  78. }