diff options
author | chai <chaifix@163.com> | 2020-10-23 13:08:43 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2020-10-23 13:08:43 +0800 |
commit | b82da95b5181ac8bbae38efb13e950d5e88a4caa (patch) | |
tree | 48a6f3269276484bbc7cfc95f0651f40a2176aa1 /Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master | |
parent | 917e9e0b320775634dc2e710f7deac74fd0822f0 (diff) |
*移动amplify shader editor到third party目录
Diffstat (limited to 'Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master')
60 files changed, 0 insertions, 15238 deletions
diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalDefinesHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalDefinesHelper.cs deleted file mode 100644 index 7aa08d96..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalDefinesHelper.cs +++ /dev/null @@ -1,140 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; - -namespace AmplifyShaderEditor -{ - [Serializable] - public class AdditionalDefinesHelper - { - private const string AdditionalDefinesStr = " Additional Defines"; - private const float ShaderKeywordButtonLayoutWidth = 15; - private ParentNode m_currentOwner; - - [SerializeField] - private List<string> m_additionalDefines = new List<string>(); - public List<string> DefineList { get { return m_additionalDefines; } set { m_additionalDefines = value; } } - - [SerializeField] - private List<string> m_outsideDefines = new List<string>(); - public List<string> OutsideList { get { return m_outsideDefines; } set { m_outsideDefines = value; } } - - public void Draw( ParentNode owner ) - { - m_currentOwner = owner; - bool value = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalDefines; - NodeUtils.DrawPropertyGroup( ref value, AdditionalDefinesStr, DrawMainBody, DrawButtons ); - owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalDefines = value; - } - - void DrawButtons() - { - EditorGUILayout.Separator(); - - // Add keyword - if( GUILayout.Button( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - m_additionalDefines.Add( string.Empty ); - EditorGUI.FocusTextInControl( null ); - } - - //Remove keyword - if( GUILayout.Button( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - if( m_additionalDefines.Count > 0 ) - { - m_additionalDefines.RemoveAt( m_additionalDefines.Count - 1 ); - EditorGUI.FocusTextInControl( null ); - } - } - } - - void DrawMainBody() - { - EditorGUILayout.Separator(); - int itemCount = m_additionalDefines.Count; - int markedToDelete = -1; - for( int i = 0; i < itemCount; i++ ) - { - EditorGUILayout.BeginHorizontal(); - { - EditorGUI.BeginChangeCheck(); - m_additionalDefines[ i ] = EditorGUILayout.TextField( m_additionalDefines[ i ] ); - if( EditorGUI.EndChangeCheck() ) - { - m_additionalDefines[ i ] = UIUtils.RemoveShaderInvalidCharacters( m_additionalDefines[ i ] ); - } - - // Add new port - if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - m_additionalDefines.Insert( i + 1, string.Empty ); - EditorGUI.FocusTextInControl( null ); - } - - //Remove port - if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - markedToDelete = i; - } - } - EditorGUILayout.EndHorizontal(); - } - - if( markedToDelete > -1 ) - { - if( m_additionalDefines.Count > markedToDelete ) - { - m_additionalDefines.RemoveAt( markedToDelete ); - EditorGUI.FocusTextInControl( null ); - } - } - EditorGUILayout.Separator(); - EditorGUILayout.HelpBox( "Please add your defines without the #define keywords", MessageType.Info ); - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - int count = Convert.ToInt32( nodeParams[ index++ ] ); - for( int i = 0; i < count; i++ ) - { - m_additionalDefines.Add( nodeParams[ index++ ] ); - } - } - - public void WriteToString( ref string nodeInfo ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_additionalDefines.Count ); - for( int i = 0; i < m_additionalDefines.Count; i++ ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_additionalDefines[ i ] ); - } - } - - public void AddToDataCollector( ref MasterNodeDataCollector dataCollector ) - { - for( int i = 0; i < m_additionalDefines.Count; i++ ) - { - if( !string.IsNullOrEmpty( m_additionalDefines[ i ] ) ) - dataCollector.AddToDefines( -1, m_additionalDefines[ i ] ); - } - - for( int i = 0; i < m_outsideDefines.Count; i++ ) - { - if( !string.IsNullOrEmpty( m_outsideDefines[ i ] ) ) - dataCollector.AddToDefines( -1, m_outsideDefines[ i ] ); - } - } - - public void Destroy() - { - m_additionalDefines.Clear(); - m_additionalDefines = null; - m_currentOwner = null; - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalDefinesHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalDefinesHelper.cs.meta deleted file mode 100644 index 6839c0e6..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalDefinesHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 0801a5994efb46142ad8dcc0fe3c47f8 -timeCreated: 1513252939 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalIncludesHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalIncludesHelper.cs deleted file mode 100644 index 542b586f..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalIncludesHelper.cs +++ /dev/null @@ -1,154 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; - -namespace AmplifyShaderEditor -{ - [Serializable] - public class AdditionalIncludesHelper - { - private const string AdditionalIncludesStr = " Additional Includes"; - private const float ShaderKeywordButtonLayoutWidth = 15; - private ParentNode m_currentOwner; - - [SerializeField] - private List<string> m_additionalIncludes = new List<string>(); - public List<string> IncludeList { get { return m_additionalIncludes; } set { m_additionalIncludes = value; } } - - [SerializeField] - private List<string> m_outsideIncludes = new List<string>(); - public List<string> OutsideList { get { return m_outsideIncludes; } set { m_outsideIncludes = value; } } - - public void Draw( ParentNode owner ) - { - m_currentOwner = owner; - bool value = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalIncludes; - NodeUtils.DrawPropertyGroup( ref value, AdditionalIncludesStr, DrawMainBody, DrawButtons ); - owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalIncludes = value; - - } - - void DrawButtons() - { - EditorGUILayout.Separator(); - - // Add keyword - if( GUILayout.Button( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - m_additionalIncludes.Add( string.Empty ); - EditorGUI.FocusTextInControl( null ); - } - - //Remove keyword - if( GUILayout.Button( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - if( m_additionalIncludes.Count > 0 ) - { - m_additionalIncludes.RemoveAt( m_additionalIncludes.Count - 1 ); - EditorGUI.FocusTextInControl( null ); - } - } - } - - void DrawMainBody() - { - EditorGUILayout.Separator(); - //if( OutsideList != null && OutsideList.Count > 0 ) - //{ - // m_drawElements.Clear(); - // EditorGUI.BeginDisabledGroup( true ); - // int outsideCount = OutsideList.Count; - // for( int i = 0; i < outsideCount; i++ ) - // { - // if( !m_drawElements.Contains( OutsideList[ i ] ) ) - // { - // m_drawElements.Add( OutsideList[ i ] ); - // EditorGUILayout.TextField( OutsideList[ i ] ); - // } - // } - // EditorGUI.EndDisabledGroup(); - // EditorGUILayout.Separator(); - //} - int itemCount = m_additionalIncludes.Count; - int markedToDelete = -1; - for( int i = 0; i < itemCount; i++ ) - { - EditorGUILayout.BeginHorizontal(); - { - EditorGUI.BeginChangeCheck(); - m_additionalIncludes[ i ] = EditorGUILayout.TextField( m_additionalIncludes[ i ] ); - if( EditorGUI.EndChangeCheck() ) - { - m_additionalIncludes[ i ] = UIUtils.RemoveShaderInvalidCharacters( m_additionalIncludes[ i ] ); - } - - // Add new port - if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - m_additionalIncludes.Insert( i + 1, string.Empty ); - EditorGUI.FocusTextInControl( null ); - } - - //Remove port - if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - markedToDelete = i; - } - } - EditorGUILayout.EndHorizontal(); - } - - if( markedToDelete > -1 ) - { - if( m_additionalIncludes.Count > markedToDelete ) - { - m_additionalIncludes.RemoveAt( markedToDelete ); - EditorGUI.FocusTextInControl( null ); - } - } - EditorGUILayout.Separator(); - EditorGUILayout.HelpBox( "Please add your includes without the #include \"\" keywords", MessageType.Info ); - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - int count = Convert.ToInt32( nodeParams[ index++ ] ); - for( int i = 0; i < count; i++ ) - { - m_additionalIncludes.Add( nodeParams[ index++ ] ); - } - } - - public void WriteToString( ref string nodeInfo ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_additionalIncludes.Count ); - for( int i = 0; i < m_additionalIncludes.Count; i++ ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_additionalIncludes[ i ] ); - } - } - - public void AddToDataCollector( ref MasterNodeDataCollector dataCollector ) - { - for( int i = 0; i < m_additionalIncludes.Count; i++ ) - { - if( !string.IsNullOrEmpty( m_additionalIncludes[ i ] ) ) - dataCollector.AddToIncludes( -1, m_additionalIncludes[ i ] ); - } - - for( int i = 0; i < m_outsideIncludes.Count; i++ ) - { - if( !string.IsNullOrEmpty( m_outsideIncludes[ i ] ) ) - dataCollector.AddToIncludes( -1, m_outsideIncludes[ i ] ); - } - } - - public void Destroy() - { - m_additionalIncludes.Clear(); - m_additionalIncludes = null; - m_currentOwner = null; - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalIncludesHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalIncludesHelper.cs.meta deleted file mode 100644 index 0997164e..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalIncludesHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 74ff3d342e013f64198aaf767e623962 -timeCreated: 1498123240 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalPragmasHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalPragmasHelper.cs deleted file mode 100644 index a7e89707..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalPragmasHelper.cs +++ /dev/null @@ -1,141 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; - -namespace AmplifyShaderEditor -{ - [Serializable] - public class AdditionalPragmasHelper - { - private const string AdditionalPragmasStr = " Additional Pragmas"; - private const float ShaderKeywordButtonLayoutWidth = 15; - private ParentNode m_currentOwner; - - [SerializeField] - private List<string> m_additionalPragmas = new List<string>(); - public List<string> PragmaList { get { return m_additionalPragmas; } set { m_additionalPragmas = value; } } - - [SerializeField] - private List<string> m_outsidePragmas = new List<string>(); - public List<string> OutsideList { get { return m_outsidePragmas; } set { m_outsidePragmas = value; } } - - public void Draw( ParentNode owner ) - { - m_currentOwner = owner; - bool value = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalPragmas; - NodeUtils.DrawPropertyGroup( ref value, AdditionalPragmasStr, DrawMainBody, DrawButtons ); - owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalPragmas = value; - - } - - void DrawButtons() - { - EditorGUILayout.Separator(); - - // Add keyword - if( GUILayout.Button( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - m_additionalPragmas.Add( string.Empty ); - EditorGUI.FocusTextInControl( null ); - } - - //Remove keyword - if( GUILayout.Button( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - if( m_additionalPragmas.Count > 0 ) - { - m_additionalPragmas.RemoveAt( m_additionalPragmas.Count - 1 ); - EditorGUI.FocusTextInControl( null ); - } - } - } - - void DrawMainBody() - { - EditorGUILayout.Separator(); - int itemCount = m_additionalPragmas.Count; - int markedToDelete = -1; - for( int i = 0; i < itemCount; i++ ) - { - EditorGUILayout.BeginHorizontal(); - { - EditorGUI.BeginChangeCheck(); - m_additionalPragmas[ i ] = EditorGUILayout.TextField( m_additionalPragmas[ i ] ); - if( EditorGUI.EndChangeCheck() ) - { - m_additionalPragmas[ i ] = UIUtils.RemoveShaderInvalidCharacters( m_additionalPragmas[ i ] ); - } - - // Add new port - if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - m_additionalPragmas.Insert( i + 1, string.Empty ); - EditorGUI.FocusTextInControl( null ); - } - - //Remove port - if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - markedToDelete = i; - } - } - EditorGUILayout.EndHorizontal(); - } - - if( markedToDelete > -1 ) - { - if( m_additionalPragmas.Count > markedToDelete ) - { - m_additionalPragmas.RemoveAt( markedToDelete ); - EditorGUI.FocusTextInControl( null ); - } - } - EditorGUILayout.Separator(); - EditorGUILayout.HelpBox( "Please add your pragmas without the #pragma keywords", MessageType.Info ); - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - int count = Convert.ToInt32( nodeParams[ index++ ] ); - for( int i = 0; i < count; i++ ) - { - m_additionalPragmas.Add( nodeParams[ index++ ] ); - } - } - - public void WriteToString( ref string nodeInfo ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_additionalPragmas.Count ); - for( int i = 0; i < m_additionalPragmas.Count; i++ ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_additionalPragmas[ i ] ); - } - } - - public void AddToDataCollector( ref MasterNodeDataCollector dataCollector ) - { - for( int i = 0; i < m_additionalPragmas.Count; i++ ) - { - if( !string.IsNullOrEmpty( m_additionalPragmas[ i ] ) ) - dataCollector.AddToPragmas( -1, m_additionalPragmas[ i ] ); - } - - for( int i = 0; i < m_outsidePragmas.Count; i++ ) - { - if( !string.IsNullOrEmpty( m_outsidePragmas[ i ] ) ) - dataCollector.AddToPragmas( -1, m_outsidePragmas[ i ] ); - } - } - - public void Destroy() - { - m_additionalPragmas.Clear(); - m_additionalPragmas = null; - m_currentOwner = null; - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalPragmasHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalPragmasHelper.cs.meta deleted file mode 100644 index 3f245aaf..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalPragmasHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 3153b4d10effd174988d75b84b12d281 -timeCreated: 1504515475 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalSurfaceOptionsHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalSurfaceOptionsHelper.cs deleted file mode 100644 index cd3efae7..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalSurfaceOptionsHelper.cs +++ /dev/null @@ -1,153 +0,0 @@ -using System; -using UnityEngine; -using UnityEditor; -using System.Collections.Generic; - -namespace AmplifyShaderEditor -{ - - [Serializable] - public class AdditionalSurfaceOptionsHelper - { - private const string AdditionalOptionsStr = " Additional Surface Options"; - - - private const float ShaderKeywordButtonLayoutWidth = 15; - private ParentNode m_currentOwner; - - [SerializeField] - private List<string> m_availableOptions = new List<string>(); - - public void Draw( ParentNode owner ) - { - m_currentOwner = owner; - bool value = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalSurfaceOptions; - NodeUtils.DrawPropertyGroup( ref value, AdditionalOptionsStr, DrawMainBody, DrawButtons ); - owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalSurfaceOptions = value; - } - - void DrawButtons() - { - EditorGUILayout.Separator(); - - // Add tag - if( GUILayout.Button( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - m_availableOptions.Add( string.Empty ); - EditorGUI.FocusTextInControl( null ); - } - - //Remove tag - if( GUILayout.Button( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - if( m_availableOptions.Count > 0 ) - { - m_availableOptions.RemoveAt( m_availableOptions.Count - 1 ); - EditorGUI.FocusTextInControl( null ); - } - } - } - - void DrawMainBody() - { - EditorGUILayout.Separator(); - int itemCount = m_availableOptions.Count; - - if( itemCount == 0 ) - { - EditorGUILayout.HelpBox( "Your list is Empty!\nUse the plus button to add one.", MessageType.Info ); - } - - int markedToDelete = -1; - float originalLabelWidth = EditorGUIUtility.labelWidth; - for( int i = 0; i < itemCount; i++ ) - { - - EditorGUI.indentLevel += 1; - EditorGUIUtility.labelWidth = 62; - EditorGUILayout.BeginHorizontal(); - //Option - EditorGUI.BeginChangeCheck(); - m_availableOptions[ i ] = EditorGUILayout.TextField( "["+i+"] -", m_availableOptions[ i ] ); - if( EditorGUI.EndChangeCheck() ) - { - m_availableOptions[ i ] = UIUtils.RemoveShaderInvalidCharacters( m_availableOptions[ i ] ); - } - - EditorGUIUtility.labelWidth = originalLabelWidth; - - { - // Add new port - if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - m_availableOptions.Insert( i + 1, string.Empty ); - EditorGUI.FocusTextInControl( null ); - } - - //Remove port - if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - markedToDelete = i; - } - } - EditorGUILayout.EndHorizontal(); - EditorGUI.indentLevel -= 1; - } - - if( markedToDelete > -1 ) - { - if( m_availableOptions.Count > markedToDelete ) - { - m_availableOptions.RemoveAt( markedToDelete ); - EditorGUI.FocusTextInControl( null ); - } - } - EditorGUILayout.Separator(); - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - int count = Convert.ToInt32( nodeParams[ index++ ] ); - for( int i = 0; i < count; i++ ) - { - m_availableOptions.Add( nodeParams[ index++ ] ); - } - } - - public void WriteToString( ref string nodeInfo ) - { - int optionsCount = m_availableOptions.Count; - IOUtils.AddFieldValueToString( ref nodeInfo, optionsCount ); - for( int i = 0; i < optionsCount; i++ ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_availableOptions[ i ].ToString() ); - } - } - - public void WriteToOptionalSurfaceOptions( ref string currentOptions ) - { - int tagsCount = m_availableOptions.Count; - if( tagsCount == 0 ) - return; - - string result = " "; - - for( int i = 0; i < tagsCount; i++ ) - { - result += m_availableOptions[ i ]; - if( i < tagsCount - 1 ) - { - result += " "; - } - } - currentOptions = currentOptions + result; - } - - public void Destroy() - { - m_availableOptions.Clear(); - m_availableOptions = null; - m_currentOwner = null; - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalSurfaceOptionsHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalSurfaceOptionsHelper.cs.meta deleted file mode 100644 index ccd630e4..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/AdditionalSurfaceOptionsHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d830b2cc8bc5e174485077319135fc1e -timeCreated: 1528881842 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/BillboardOpHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/BillboardOpHelper.cs deleted file mode 100644 index d1391d95..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/BillboardOpHelper.cs +++ /dev/null @@ -1,242 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -// Billboard based on: -// https://gist.github.com/renaudbedard/7a90ec4a5a7359712202 -using System; -using UnityEngine; -using System.Collections.Generic; - -namespace AmplifyShaderEditor -{ - public enum BillboardType - { - Cylindrical, - Spherical - } - - [Serializable] - public class BillboardOpHelper - { - public static readonly string BillboardTitleStr = " Billboard"; - public static readonly string BillboardTypeStr = "Type"; - public static readonly string BillboardRotIndStr = "Ignore Rotation"; - - public static readonly string[] BillboardCylindricalInstructions = { "//Calculate new billboard vertex position and normal", - "float3 upCamVec = float3( 0, 1, 0 )"}; - - public static readonly string[] BillboardSphericalInstructions = { "//Calculate new billboard vertex position and normal", - "float3 upCamVec = normalize ( UNITY_MATRIX_V._m10_m11_m12 )"}; - - - public static readonly string[] BillboardCommonInstructions = { "float3 forwardCamVec = -normalize ( UNITY_MATRIX_V._m20_m21_m22 )", - "float3 rightCamVec = normalize( UNITY_MATRIX_V._m00_m01_m02 )", - "float4x4 rotationCamMatrix = float4x4( rightCamVec, 0, upCamVec, 0, forwardCamVec, 0, 0, 0, 0, 1 )", - "{0} = normalize( mul( float4( {0} , 0 ), rotationCamMatrix )).xyz"}; - - public static readonly string[] BillboardRotDependent = { "//This unfortunately must be made to take non-uniform scaling into account", - "//Transform to world coords, apply rotation and transform back to local", - "{0} = mul( {1} , unity_ObjectToWorld ){2}", - "{0} = mul( {1} , rotationCamMatrix ){2}", - "{0} = mul( {1} , unity_WorldToObject ){2}"}; - - - public static readonly string[] BillboardRotIndependent = { "{0}.x *= length( unity_ObjectToWorld._m00_m10_m20 )", - "{0}.y *= length( unity_ObjectToWorld._m01_m11_m21 )", - "{0}.z *= length( unity_ObjectToWorld._m02_m12_m22 )", - "{0} = mul( {0}, rotationCamMatrix )", - "{0}.xyz += unity_ObjectToWorld._m03_m13_m23", - "//Need to nullify rotation inserted by generated surface shader", - "{0} = mul( unity_WorldToObject, {0} )"}; - - - - public static readonly string[] BillboardHDRotDependent = { "//This unfortunately must be made to take non-uniform scaling into account", - "//Transform to world coords, apply rotation and transform back to local", - "{0} = mul( {1} , GetObjectToWorldMatrix() ){2}", - "{0} = mul( {1} , rotationCamMatrix ){2}", - "{0} = mul( {1} , GetWorldToObjectMatrix() ){2}"}; - - - public static readonly string[] BillboardHDRotIndependent = { "{0}.x *= length( GetObjectToWorldMatrix()._m00_m10_m20 )", - "{0}.y *= length( GetObjectToWorldMatrix()._m01_m11_m21 )", - "{0}.z *= length( GetObjectToWorldMatrix()._m02_m12_m22 )", - "{0} = mul( {0}, rotationCamMatrix )", - "{0}.xyz += GetObjectToWorldMatrix()._m03_m13_m23", - "//Need to nullify rotation inserted by generated surface shader", - "{0} = mul( GetWorldToObjectMatrix(), {0} )"}; - - - [SerializeField] - private bool m_isBillboard = false; - - [SerializeField] - private BillboardType m_billboardType = BillboardType.Cylindrical; - - [SerializeField] - private bool m_rotationIndependent = false; - - public void Draw( ParentNode owner ) - { - bool visible = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedVertexOptions; - bool enabled = m_isBillboard; - NodeUtils.DrawPropertyGroup( owner, ref visible, ref m_isBillboard, BillboardTitleStr, () => - { - m_billboardType = (BillboardType)owner.EditorGUILayoutEnumPopup( BillboardTypeStr, m_billboardType ); - m_rotationIndependent = owner.EditorGUILayoutToggle( BillboardRotIndStr, m_rotationIndependent ); - } ); - - owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedVertexOptions = visible; - if( m_isBillboard != enabled ) - { - UIUtils.RequestSave(); - } - } - public void FillDataCollectorWithInternalData( ref MasterNodeDataCollector dataCollector ) - { - if( m_isBillboard ) - { - FillDataCollector( ref dataCollector, m_billboardType, m_rotationIndependent, "v.vertex", "v.normal", false ); - } - } - // This should be called after the Vertex Offset and Vertex Normal ports are analised - public static void FillDataCollector( ref MasterNodeDataCollector dataCollector, BillboardType billboardType, bool rotationIndependent, string vertexPosValue, string vertexNormalValue, bool vertexIsFloat3 ) - { - switch( billboardType ) - { - case BillboardType.Cylindrical: - { - for( int i = 0; i < BillboardCylindricalInstructions.Length; i++ ) - { - dataCollector.AddVertexInstruction( BillboardCylindricalInstructions[ i ] + ( dataCollector.IsTemplate ? ";" : string.Empty ), -1, true ); - } - } - break; - - case BillboardType.Spherical: - { - for( int i = 0; i < BillboardCylindricalInstructions.Length; i++ ) - { - dataCollector.AddVertexInstruction( BillboardSphericalInstructions[ i ] + ( dataCollector.IsTemplate ? ";" : string.Empty ), -1, true ); - } - } - break; - } - - for( int i = 0; i < BillboardCommonInstructions.Length; i++ ) - { - string value = ( i == 3 ) ? string.Format( BillboardCommonInstructions[ i ], vertexNormalValue ) : BillboardCommonInstructions[ i ]; - dataCollector.AddVertexInstruction( value + ( dataCollector.IsTemplate ? ";" : string.Empty ), -1, true ); - } - - if( rotationIndependent ) - { - for( int i = 0; i < BillboardRotIndependent.Length; i++ ) - { - string value = string.Empty; - if( dataCollector.IsTemplate && dataCollector.TemplateDataCollectorInstance.CurrentSRPType != TemplateSRPType.BuiltIn ) - { - value = ( i != 5 ) ? string.Format( BillboardHDRotIndependent[ i ], vertexPosValue ) : BillboardHDRotIndependent[ i ]; - } - else - { - value = ( i != 5 ) ? string.Format( BillboardRotIndependent[ i ], vertexPosValue ) : BillboardRotIndependent[ i ]; - } - dataCollector.AddVertexInstruction( value + ( dataCollector.IsTemplate ? ";" : string.Empty ), -1, true ); - } - } - else - { - string vertexPosConverted = vertexIsFloat3 ? string.Format( "float4({0},0)", vertexPosValue ) : vertexPosValue; - for( int i = 0; i < BillboardRotDependent.Length; i++ ) - { - string value = string.Empty; - if( dataCollector.IsTemplate && dataCollector.TemplateDataCollectorInstance.CurrentSRPType == TemplateSRPType.HD ) - { - value = ( i > 1 ) ? string.Format( BillboardHDRotDependent[ i ], vertexPosValue, vertexPosConverted, ( vertexIsFloat3 ? ".xyz" : string.Empty ) ) : BillboardHDRotDependent[ i ]; - } - else - { - value = ( i > 1 ) ? string.Format( BillboardRotDependent[ i ], vertexPosValue, vertexPosConverted, ( vertexIsFloat3 ? ".xyz" : string.Empty ) ) : BillboardRotDependent[ i ]; - } - dataCollector.AddVertexInstruction( value + ( dataCollector.IsTemplate ? ";" : string.Empty ), -1, true ); - } - } - } - - public string[] GetInternalMultilineInstructions() - { - // This method is only used on Surface ... no HD variation is needed - return GetMultilineInstructions( m_billboardType, m_rotationIndependent, "v.vertex", "v.normal" ); - } - - public static string[] GetMultilineInstructions( BillboardType billboardType, bool rotationIndependent, string vertexPosValue, string vertexNormalValue ) - { - // This method is only used on Surface ... no HD variation is needed - List<string> body = new List<string>(); - switch( billboardType ) - { - case BillboardType.Cylindrical: - { - for( int i = 0; i < BillboardCylindricalInstructions.Length; i++ ) - { - body.Add( BillboardCylindricalInstructions[ i ] ); - } - } - break; - - case BillboardType.Spherical: - { - for( int i = 0; i < BillboardCylindricalInstructions.Length; i++ ) - { - body.Add( BillboardSphericalInstructions[ i ] ); - } - } - break; - } - - for( int i = 0; i < BillboardCommonInstructions.Length; i++ ) - { - string value = ( i == 3 ) ? string.Format( BillboardCommonInstructions[ i ], vertexNormalValue ) : BillboardCommonInstructions[ i ]; - body.Add( value ); - } - - if( rotationIndependent ) - { - for( int i = 0; i < BillboardRotIndependent.Length; i++ ) - { - string value = ( i != 5 ) ? string.Format( BillboardRotIndependent[ i ], vertexPosValue ) : BillboardRotIndependent[ i ]; - body.Add( value ); - } - } - else - { - for( int i = 0; i < BillboardRotDependent.Length; i++ ) - { - string value = ( i > 1 ) ? string.Format( BillboardRotDependent[ i ], vertexPosValue ) : BillboardRotDependent[ i ]; - body.Add( value ); - } - } - return body.ToArray(); - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - m_isBillboard = Convert.ToBoolean( nodeParams[ index++ ] ); - m_billboardType = (BillboardType)Enum.Parse( typeof( BillboardType ), nodeParams[ index++ ] ); - if( UIUtils.CurrentShaderVersion() > 11007 ) - { - m_rotationIndependent = Convert.ToBoolean( nodeParams[ index++ ] ); - } - } - - public void WriteToString( ref string nodeInfo ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_isBillboard ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_billboardType ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_rotationIndependent ); - } - - public bool IsBillboard { get { return m_isBillboard; } } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/BillboardOpHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/BillboardOpHelper.cs.meta deleted file mode 100644 index 812475f8..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/BillboardOpHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 837b906a268babc49ac733573c5b3394 -timeCreated: 1489159407 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/BlendOpsHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/BlendOpsHelper.cs deleted file mode 100644 index 989ace5f..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/BlendOpsHelper.cs +++ /dev/null @@ -1,447 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using System; -using UnityEngine; -using UnityEditor; -using System.Collections.Generic; - -namespace AmplifyShaderEditor -{ - public enum AvailableBlendFactor - { - One = 1, - Zero = 0, - SrcColor = 3, - SrcAlpha = 5, - DstColor = 2, - DstAlpha = 7, - OneMinusSrcColor = 6, - OneMinusSrcAlpha = 10, - OneMinusDstColor = 4, - OneMinusDstAlpha = 8, - SrcAlphaSaturate = 9 - }; - - public enum AvailableBlendOps - { - OFF = 0, - Add, - Sub, - RevSub, - Min, - Max, - //Direct X11 only - LogicalClear, - LogicalSet, - LogicalCopy, - LogicalCopyInverted, - LogicalNoop, - LogicalInvert, - LogicalAnd, - LogicalNand, - LogicalOr, - LogicalNor, - LogicalXor, - LogicalEquiv, - LogicalAndReverse, - LogicalAndInverted, - LogicalOrReverse, - LogicalOrInverted - }; - - public class CommonBlendTypes - { - public string Name; - public AvailableBlendFactor SourceFactor; - public AvailableBlendFactor DestFactor; - public CommonBlendTypes( string name, AvailableBlendFactor sourceFactor, AvailableBlendFactor destFactor ) - { - Name = name; - SourceFactor = sourceFactor; - DestFactor = destFactor; - } - } - - [Serializable] - public class BlendOpsHelper - { - public static readonly string[] BlendOpsLabels = - { - "<OFF>", - "Add", - "Sub", - "RevSub", - "Min", - "Max", - "LogicalClear ( DX11.1 Only )", - "LogicalSet ( DX11.1 Only )", - "LogicalCopy ( DX11.1 Only )", - "LogicalCopyInverted ( DX11.1 Only )", - "LogicalNoop ( DX11.1 Only )", - "LogicalInvert ( DX11.1 Only )", - "LogicalAnd ( DX11.1 Only )", - "LogicalNand ( DX11.1 Only )", - "LogicalOr ( DX11.1 Only )", - "LogicalNor ( DX11.1 Only )", - "LogicalXor ( DX11.1 Only )", - "LogicalEquiv ( DX11.1 Only )", - "LogicalAndReverse ( DX11.1 Only )", - "LogicalAndInverted ( DX11.1 Only )", - "LogicalOrReverse ( DX11.1 Only )", - "LogicalOrInverted ( DX11.1 Only )" - }; - - private const string BlendModesRGBStr = "Blend RGB"; - private const string BlendModesAlphaStr = "Blend Alpha"; - - private const string BlendOpsRGBStr = "Blend Op RGB"; - private const string BlendOpsAlphaStr = "Blend Op Alpha"; - - private const string SourceFactorStr = "Src"; - private const string DstFactorStr = "Dst"; - - private const string SingleBlendFactorStr = "Blend {0} {1}"; - private const string SeparateBlendFactorStr = "Blend {0} {1} , {2} {3}"; - - private const string SingleBlendOpStr = "BlendOp {0}"; - private const string SeparateBlendOpStr = "BlendOp {0} , {1}"; - - private string[] m_commonBlendTypesArr; - private List<CommonBlendTypes> m_commonBlendTypes = new List<CommonBlendTypes> { new CommonBlendTypes("<OFF>", AvailableBlendFactor.Zero, AvailableBlendFactor.Zero ), - new CommonBlendTypes("Custom", AvailableBlendFactor.Zero, AvailableBlendFactor.Zero ) , - new CommonBlendTypes("Alpha Blend", AvailableBlendFactor.SrcAlpha, AvailableBlendFactor.OneMinusSrcAlpha ) , - new CommonBlendTypes("Premultiplied", AvailableBlendFactor.One, AvailableBlendFactor.OneMinusSrcAlpha ), - new CommonBlendTypes("Additive", AvailableBlendFactor.One, AvailableBlendFactor.One ), - new CommonBlendTypes("Soft Additive", AvailableBlendFactor.OneMinusDstColor, AvailableBlendFactor.One ), - new CommonBlendTypes("Multiplicative", AvailableBlendFactor.DstColor, AvailableBlendFactor.Zero ), - new CommonBlendTypes("2x Multiplicative", AvailableBlendFactor.DstColor, AvailableBlendFactor.SrcColor ), - new CommonBlendTypes("Particle Additive", AvailableBlendFactor.SrcAlpha, AvailableBlendFactor.One ),}; - - [SerializeField] - private bool m_enabled = false; - - // Blend Factor - // RGB - [SerializeField] - private int m_currentIndex = 0; - - - [SerializeField] - private InlineProperty m_sourceFactorRGB = new InlineProperty( 0 ); - - [SerializeField] - private InlineProperty m_destFactorRGB = new InlineProperty( 0 ); - - // Alpha - [SerializeField] - private int m_currentAlphaIndex = 0; - - [SerializeField] - private InlineProperty m_sourceFactorAlpha = new InlineProperty( 0 ); - - [SerializeField] - private InlineProperty m_destFactorAlpha = new InlineProperty( 0 ); - - //Blend Ops - [SerializeField] - private bool m_blendOpEnabled = false; - - [SerializeField] - private InlineProperty m_blendOpRGB = new InlineProperty( 0 ); - - [SerializeField] - private InlineProperty m_blendOpAlpha = new InlineProperty( 0 ); - - public BlendOpsHelper() - { - m_commonBlendTypesArr = new string[ m_commonBlendTypes.Count ]; - for( int i = 0; i < m_commonBlendTypesArr.Length; i++ ) - { - m_commonBlendTypesArr[ i ] = m_commonBlendTypes[ i ].Name; - } - } - - public void Draw( UndoParentNode owner, bool customBlendAvailable ) - { - m_enabled = customBlendAvailable; - - // RGB - EditorGUI.BeginChangeCheck(); - m_currentIndex = owner.EditorGUILayoutPopup( BlendModesRGBStr, m_currentIndex, m_commonBlendTypesArr ); - if( EditorGUI.EndChangeCheck() ) - { - if( m_currentIndex > 1 ) - { - m_sourceFactorRGB.IntValue = (int)m_commonBlendTypes[ m_currentIndex ].SourceFactor; - m_sourceFactorRGB.SetInlineNodeValue(); - - m_destFactorRGB.IntValue = (int)m_commonBlendTypes[ m_currentIndex ].DestFactor; - m_destFactorRGB.SetInlineNodeValue(); - } - } - EditorGUI.BeginDisabledGroup( m_currentIndex == 0 ); - - EditorGUI.BeginChangeCheck(); - float cached = EditorGUIUtility.labelWidth; - EditorGUIUtility.labelWidth = 40; - - EditorGUILayout.BeginHorizontal(); - AvailableBlendFactor tempCast = (AvailableBlendFactor)m_sourceFactorRGB.IntValue; - m_sourceFactorRGB.CustomDrawer( ref owner, ( x ) => { tempCast = (AvailableBlendFactor)x.EditorGUILayoutEnumPopup( SourceFactorStr, tempCast ); }, SourceFactorStr ); - m_sourceFactorRGB.IntValue = (int)tempCast; - EditorGUI.indentLevel--; - EditorGUIUtility.labelWidth = 25; - tempCast = (AvailableBlendFactor)m_destFactorRGB.IntValue; - m_destFactorRGB.CustomDrawer( ref owner, ( x ) => { tempCast = (AvailableBlendFactor)x.EditorGUILayoutEnumPopup( DstFactorStr, tempCast ); }, DstFactorStr ); - m_destFactorRGB.IntValue = (int)tempCast; - EditorGUI.indentLevel++; - EditorGUILayout.EndHorizontal(); - - EditorGUIUtility.labelWidth = cached; - if( EditorGUI.EndChangeCheck() ) - { - CheckRGBIndex(); - } - - // Both these tests should be removed on a later stage - // ASE v154dev004 changed AvailableBlendOps.OFF value from -1 to 0 - // If importing the new package into an already opened ASE window makes - // hotcode to preserve the -1 value on these variables - if( m_blendOpRGB.FloatValue < 0 ) - m_blendOpRGB.FloatValue = 0; - - if( m_blendOpAlpha.FloatValue < 0 ) - m_blendOpAlpha.FloatValue = 0; - - EditorGUI.BeginChangeCheck(); - //AvailableBlendOps tempOpCast = (AvailableBlendOps)m_blendOpRGB.IntValue; - m_blendOpRGB.CustomDrawer( ref owner, ( x ) => { m_blendOpRGB.IntValue = x.EditorGUILayoutPopup( BlendOpsRGBStr, m_blendOpRGB.IntValue, BlendOpsLabels ); }, BlendOpsRGBStr ); - //m_blendOpRGB.IntValue = (int)tempOpCast; - if( EditorGUI.EndChangeCheck() ) - { - m_blendOpEnabled = ( !m_blendOpRGB.Active && m_blendOpRGB.IntValue > -1 ) || ( m_blendOpRGB.Active && m_blendOpRGB.NodeId > -1 );//AvailableBlendOps.OFF; - m_blendOpRGB.SetInlineNodeValue(); - } - - EditorGUI.EndDisabledGroup(); - - // Alpha - EditorGUILayout.Separator(); - - EditorGUI.BeginChangeCheck(); - m_currentAlphaIndex = owner.EditorGUILayoutPopup( BlendModesAlphaStr, m_currentAlphaIndex, m_commonBlendTypesArr ); - if( EditorGUI.EndChangeCheck() ) - { - if( m_currentAlphaIndex > 0 ) - { - m_sourceFactorAlpha.IntValue = (int)m_commonBlendTypes[ m_currentAlphaIndex ].SourceFactor; - m_sourceFactorAlpha.SetInlineNodeValue(); - - m_destFactorAlpha.IntValue = (int)m_commonBlendTypes[ m_currentAlphaIndex ].DestFactor; - m_destFactorAlpha.SetInlineNodeValue(); - } - } - EditorGUI.BeginDisabledGroup( m_currentAlphaIndex == 0 ); - - EditorGUI.BeginChangeCheck(); - cached = EditorGUIUtility.labelWidth; - EditorGUIUtility.labelWidth = 40; - EditorGUILayout.BeginHorizontal(); - tempCast = (AvailableBlendFactor)m_sourceFactorAlpha.IntValue; - m_sourceFactorAlpha.CustomDrawer( ref owner, ( x ) => { tempCast = (AvailableBlendFactor)x.EditorGUILayoutEnumPopup( SourceFactorStr, tempCast ); }, SourceFactorStr ); - m_sourceFactorAlpha.IntValue = (int)tempCast; - EditorGUI.indentLevel--; - EditorGUIUtility.labelWidth = 25; - tempCast = (AvailableBlendFactor)m_destFactorAlpha.IntValue; - m_destFactorAlpha.CustomDrawer( ref owner, ( x ) => { tempCast = (AvailableBlendFactor)x.EditorGUILayoutEnumPopup( DstFactorStr, tempCast ); }, DstFactorStr ); - m_destFactorAlpha.IntValue = (int)tempCast; - EditorGUI.indentLevel++; - EditorGUILayout.EndHorizontal(); - EditorGUIUtility.labelWidth = cached; - - if( EditorGUI.EndChangeCheck() ) - { - CheckAlphaIndex(); - } - EditorGUI.BeginChangeCheck(); - //tempOpCast = (AvailableBlendOps)m_blendOpAlpha.IntValue; - m_blendOpAlpha.CustomDrawer( ref owner, ( x ) => { m_blendOpAlpha.IntValue = x.EditorGUILayoutPopup( BlendOpsAlphaStr, m_blendOpAlpha.IntValue, BlendOpsLabels ); }, BlendOpsAlphaStr ); - //m_blendOpAlpha.IntValue = (int)tempOpCast; - if( EditorGUI.EndChangeCheck() ) - { - m_blendOpAlpha.SetInlineNodeValue(); - } - EditorGUI.EndDisabledGroup(); - EditorGUILayout.Separator(); - } - - void CheckRGBIndex() - { - int count = m_commonBlendTypes.Count; - m_currentIndex = 1; - for( int i = 1; i < count; i++ ) - { - if( m_commonBlendTypes[ i ].SourceFactor == (AvailableBlendFactor)m_sourceFactorRGB.IntValue && m_commonBlendTypes[ i ].DestFactor == (AvailableBlendFactor)m_destFactorRGB.IntValue ) - { - m_currentIndex = i; - return; - } - } - - } - - void CheckAlphaIndex() - { - int count = m_commonBlendTypes.Count; - m_currentAlphaIndex = 1; - for( int i = 1; i < count; i++ ) - { - if( m_commonBlendTypes[ i ].SourceFactor == (AvailableBlendFactor)m_sourceFactorAlpha.IntValue && m_commonBlendTypes[ i ].DestFactor == (AvailableBlendFactor)m_destFactorAlpha.IntValue ) - { - m_currentAlphaIndex = i; - if( m_currentAlphaIndex > 0 && m_currentIndex == 0 ) - m_currentIndex = 1; - return; - } - } - - if( m_currentAlphaIndex > 0 && m_currentIndex == 0 ) - m_currentIndex = 1; - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - m_currentIndex = Convert.ToInt32( nodeParams[ index++ ] ); - if( UIUtils.CurrentShaderVersion() > 15103 ) - { - m_sourceFactorRGB.ReadFromString( ref index, ref nodeParams ); - m_destFactorRGB.ReadFromString( ref index, ref nodeParams ); - } - else - { - m_sourceFactorRGB.IntValue = (int)(AvailableBlendFactor)Enum.Parse( typeof( AvailableBlendFactor ), nodeParams[ index++ ] ); - m_destFactorRGB.IntValue = (int)(AvailableBlendFactor)Enum.Parse( typeof( AvailableBlendFactor ), nodeParams[ index++ ] ); - } - - m_currentAlphaIndex = Convert.ToInt32( nodeParams[ index++ ] ); - if( UIUtils.CurrentShaderVersion() > 15103 ) - { - m_sourceFactorAlpha.ReadFromString( ref index, ref nodeParams ); - m_destFactorAlpha.ReadFromString( ref index, ref nodeParams ); - - m_blendOpRGB.ReadFromString( ref index, ref nodeParams ); - m_blendOpAlpha.ReadFromString( ref index, ref nodeParams ); - if( UIUtils.CurrentShaderVersion() < 15404 ) - { - // Now BlendOps enum starts at 0 and not -1 - m_blendOpRGB.FloatValue += 1; - m_blendOpAlpha.FloatValue += 1; - } - } - else - { - m_sourceFactorAlpha.IntValue = (int)(AvailableBlendFactor)Enum.Parse( typeof( AvailableBlendFactor ), nodeParams[ index++ ] ); - m_destFactorAlpha.IntValue = (int)(AvailableBlendFactor)Enum.Parse( typeof( AvailableBlendFactor ), nodeParams[ index++ ] ); - m_blendOpRGB.IntValue = (int)(AvailableBlendOps)Enum.Parse( typeof( AvailableBlendOps ), nodeParams[ index++ ] ); - m_blendOpAlpha.IntValue = (int)(AvailableBlendOps)Enum.Parse( typeof( AvailableBlendOps ), nodeParams[ index++ ] ); - } - - m_enabled = ( m_currentIndex > 0 || m_currentAlphaIndex > 0 ); - m_blendOpEnabled = ( !m_blendOpRGB.Active && m_blendOpRGB.IntValue > -1 ) || ( m_blendOpRGB.Active && m_blendOpRGB.NodeId > -1 ); - } - - - public void WriteToString( ref string nodeInfo ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_currentIndex ); - m_sourceFactorRGB.WriteToString( ref nodeInfo ); - m_destFactorRGB.WriteToString( ref nodeInfo ); - - IOUtils.AddFieldValueToString( ref nodeInfo, m_currentAlphaIndex ); - m_sourceFactorAlpha.WriteToString( ref nodeInfo ); - m_destFactorAlpha.WriteToString( ref nodeInfo ); - - m_blendOpRGB.WriteToString( ref nodeInfo ); - m_blendOpAlpha.WriteToString( ref nodeInfo ); - } - - public void SetBlendOpsFromBlendMode( AlphaMode mode, bool customBlendAvailable ) - { - switch( mode ) - { - case AlphaMode.Transparent: - m_currentIndex = 2; - m_sourceFactorRGB.IntValue = (int)m_commonBlendTypes[ m_currentIndex ].SourceFactor; - m_destFactorRGB.IntValue = (int)m_commonBlendTypes[ m_currentIndex ].DestFactor; - break; - case AlphaMode.Masked: - case AlphaMode.Translucent: - m_currentIndex = 0; - break; - case AlphaMode.Premultiply: - m_currentIndex = 3; - m_sourceFactorRGB.IntValue = (int)m_commonBlendTypes[ m_currentIndex ].SourceFactor; - m_destFactorRGB.IntValue = (int)m_commonBlendTypes[ m_currentIndex ].DestFactor; - break; - } - m_enabled = customBlendAvailable; - } - - public string CreateBlendOps() - { - - string result = "\t\t" + CurrentBlendFactor + "\n"; - if( m_blendOpEnabled ) - { - result += "\t\t" + CurrentBlendOp + "\n"; - } - return result; - } - - public string CurrentBlendRGB { get { return m_commonBlendTypes[ m_currentIndex ].Name; } } - - public string CurrentBlendFactorSingle { get { return string.Format( SingleBlendFactorStr, m_sourceFactorRGB.GetValueOrProperty( ( (AvailableBlendFactor)m_sourceFactorRGB.IntValue ).ToString() ), m_destFactorRGB.GetValueOrProperty( ( (AvailableBlendFactor)m_destFactorRGB.IntValue ).ToString() ) ); } } - //public string CurrentBlendFactorSingleAlpha { get { return string.Format(SeparateBlendFactorStr, m_sourceFactorRGB, m_destFactorRGB, m_sourceFactorAlpha, m_destFactorAlpha); } } - public string CurrentBlendFactorSeparate - { - get - { - string src = ( m_currentIndex > 0 ? m_sourceFactorRGB.GetValueOrProperty( ( (AvailableBlendFactor)m_sourceFactorRGB.IntValue ).ToString() ) : AvailableBlendFactor.One.ToString() ); - string dst = ( m_currentIndex > 0 ? m_destFactorRGB.GetValueOrProperty( ( (AvailableBlendFactor)m_destFactorRGB.IntValue ).ToString() ) : AvailableBlendFactor.Zero.ToString() ); - string srca = m_sourceFactorAlpha.GetValueOrProperty( ( (AvailableBlendFactor)m_sourceFactorAlpha.IntValue ).ToString() ); - string dsta = m_destFactorAlpha.GetValueOrProperty( ( (AvailableBlendFactor)m_destFactorAlpha.IntValue ).ToString() ); - return string.Format( SeparateBlendFactorStr, src, dst, srca, dsta ); - } - } - public string CurrentBlendFactor { get { return ( ( m_currentAlphaIndex > 0 ) ? CurrentBlendFactorSeparate : CurrentBlendFactorSingle ); } } - - public string CurrentBlendOpSingle - { - get - { - string value = m_blendOpRGB.GetValueOrProperty( ( (AvailableBlendOps)m_blendOpRGB.IntValue ).ToString() ); - if( value.Equals( ( AvailableBlendOps.OFF ).ToString() ) ) - return string.Empty; - - return string.Format( SingleBlendOpStr, value ); - } - } - public string CurrentBlendOpSeparate - { - get - { - string rgbValue = m_blendOpRGB.GetValueOrProperty( ( (AvailableBlendOps)m_blendOpRGB.IntValue ).ToString() ); - - if( rgbValue.Equals( ( AvailableBlendOps.OFF ).ToString() )) - rgbValue = "Add"; - - string alphaValue = m_blendOpAlpha.GetValueOrProperty( ( (AvailableBlendOps)m_blendOpAlpha.IntValue ).ToString() ); - return string.Format( SeparateBlendOpStr, ( m_currentIndex > 0 ? rgbValue : AvailableBlendOps.Add.ToString() ), alphaValue ); - } - } - public string CurrentBlendOp { get { return ( ( m_currentAlphaIndex > 0 && m_blendOpAlpha.GetValueOrProperty( ( (AvailableBlendOps)m_blendOpAlpha.IntValue ).ToString() ) != AvailableBlendOps.OFF.ToString() ) ? CurrentBlendOpSeparate : CurrentBlendOpSingle ); } } - - public bool Active { get { return m_enabled && ( m_currentIndex > 0 || m_currentAlphaIndex > 0 ); } } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/BlendOpsHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/BlendOpsHelper.cs.meta deleted file mode 100644 index 95ea7b51..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/BlendOpsHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8b59649a5f829e24cb4de8c1a715f8b4 -timeCreated: 1485530925 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/CodeGenerationData.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/CodeGenerationData.cs deleted file mode 100644 index 5245c9f4..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/CodeGenerationData.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using UnityEngine; -namespace AmplifyShaderEditor -{ - [System.Serializable] - public class CodeGenerationData - { - [SerializeField] - public bool IsActive; - [SerializeField] - public string Name; - [SerializeField] - public string Value; - - public CodeGenerationData( string name, string value ) - { - IsActive = false; - Name = name; - Value = value; - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/CodeGenerationData.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/CodeGenerationData.cs.meta deleted file mode 100644 index 2c5d759e..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/CodeGenerationData.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 7a47d8101acb2e94d95016b69a1c2e41 -timeCreated: 1481126957 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ColorMaskHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ColorMaskHelper.cs deleted file mode 100644 index 2280c9f0..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ColorMaskHelper.cs +++ /dev/null @@ -1,107 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> -using System; -using UnityEngine; -using UnityEditor; - -namespace AmplifyShaderEditor -{ - [Serializable] - class ColorMaskHelper - { - private GUIContent ColorMaskContent = new GUIContent( "Color Mask", "Sets color channel writing mask, turning all off makes the object completely invisible\nDefault: RGBA" ); - private readonly char[] m_colorMaskChar = { 'R', 'G', 'B', 'A' }; - - private GUIStyle m_leftToggleColorMask; - private GUIStyle m_middleToggleColorMask; - private GUIStyle m_rightToggleColorMask; - - - [SerializeField] - private bool[] m_colorMask = { true, true, true, true }; - - [SerializeField] - private InlineProperty m_inlineMask = new InlineProperty(); - - public void Draw( UndoParentNode owner ) - { - m_inlineMask.CustomDrawer( ref owner, DrawColorMaskControls, ColorMaskContent.text ); - } - - private void DrawColorMaskControls( UndoParentNode owner ) - { - if( m_leftToggleColorMask == null || m_leftToggleColorMask.normal.background == null ) - { - m_leftToggleColorMask = GUI.skin.GetStyle( "miniButtonLeft" ); - } - - if( m_middleToggleColorMask == null || m_middleToggleColorMask.normal.background == null ) - { - m_middleToggleColorMask = GUI.skin.GetStyle( "miniButtonMid" ); - } - - if( m_rightToggleColorMask == null || m_rightToggleColorMask.normal.background == null ) - { - m_rightToggleColorMask = GUI.skin.GetStyle( "miniButtonRight" ); - } - - - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.LabelField( ColorMaskContent, GUILayout.Width( 90 ) ); - - m_colorMask[ 0 ] = owner.GUILayoutToggle( m_colorMask[ 0 ], "R", m_leftToggleColorMask ); - m_colorMask[ 1 ] = owner.GUILayoutToggle( m_colorMask[ 1 ], "G", m_middleToggleColorMask ); - m_colorMask[ 2 ] = owner.GUILayoutToggle( m_colorMask[ 2 ], "B", m_middleToggleColorMask ); - m_colorMask[ 3 ] = owner.GUILayoutToggle( m_colorMask[ 3 ], "A", m_rightToggleColorMask ); - - EditorGUILayout.EndHorizontal(); - } - - public void BuildColorMask( ref string ShaderBody, bool customBlendAvailable ) - { - int count = 0; - string colorMask = string.Empty; - for( int i = 0; i < m_colorMask.Length; i++ ) - { - if( m_colorMask[ i ] ) - { - count++; - colorMask += m_colorMaskChar[ i ]; - } - } - - if( ( count != m_colorMask.Length && customBlendAvailable ) || m_inlineMask.Active ) - { - MasterNode.AddRenderState( ref ShaderBody, "ColorMask", m_inlineMask.GetValueOrProperty( ( ( count == 0 ) ? "0" : colorMask ) ) ); - } - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - for( int i = 0; i < m_colorMask.Length; i++ ) - { - m_colorMask[ i ] = Convert.ToBoolean( nodeParams[ index++ ] ); - } - - if( UIUtils.CurrentShaderVersion() > 14501 ) - m_inlineMask.ReadFromString( ref index, ref nodeParams ); - } - - public void WriteToString( ref string nodeInfo ) - { - for( int i = 0; i < m_colorMask.Length; i++ ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_colorMask[ i ] ); - } - - m_inlineMask.WriteToString( ref nodeInfo ); - } - - public void Destroy() - { - m_leftToggleColorMask = null; - m_middleToggleColorMask = null; - m_rightToggleColorMask = null; - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ColorMaskHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ColorMaskHelper.cs.meta deleted file mode 100644 index 69c24b06..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ColorMaskHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: bf65efd881afd1b4cbd2b27f3f17251b -timeCreated: 1488903773 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/CustomTagsHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/CustomTagsHelper.cs deleted file mode 100644 index 11a3ee49..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/CustomTagsHelper.cs +++ /dev/null @@ -1,436 +0,0 @@ -using System; -using UnityEngine; -using UnityEditor; -using System.Collections.Generic; - -namespace AmplifyShaderEditor -{ - [Serializable] - public class CustomTagData - { - private const string TagFormat = "\"{0}\"=\"{1}\""; - public string TagName; - public string TagValue; - public int TagId = -1; - public bool TagFoldout = true; - - [SerializeField] - private TemplateSpecialTags m_specialTag = TemplateSpecialTags.None; - [SerializeField] - private RenderType m_renderType = RenderType.Opaque; - [SerializeField] - private RenderQueue m_renderQueue = RenderQueue.Geometry; - [SerializeField] - private int m_renderQueueOffset = 0; - - public CustomTagData() - { - TagName = string.Empty; - TagValue = string.Empty; - m_specialTag = TemplateSpecialTags.None; - m_renderType = RenderType.Opaque; - m_renderQueue = RenderQueue.Geometry; - m_renderQueueOffset = 0; - } - - public CustomTagData( CustomTagData other ) - { - TagName = other.TagName; - TagValue = other.TagValue; - TagId = other.TagId; - TagFoldout = other.TagFoldout; - - m_specialTag = other.m_specialTag; - m_renderType = other.m_renderType; - m_renderQueue = other.m_renderQueue; - m_renderQueueOffset = other.m_renderQueueOffset; - } - - public void SetTagValue( params string[] value ) - { - TagValue = value[ 0 ]; - switch( m_specialTag ) - { - case TemplateSpecialTags.RenderType: - { - if( !TemplateHelperFunctions.StringToRenderType.TryGetValue( value[ 0 ], out m_renderType ) ) - { - m_renderType = RenderType.Custom; - TagValue = value[ 0 ]; - } - } - break; - case TemplateSpecialTags.Queue: - { - if( value.Length == 2 ) - { - m_renderQueue = TemplateHelperFunctions.StringToRenderQueue[ value[ 0 ] ]; - int.TryParse( value[ 1 ], out m_renderQueueOffset ); - } - else - { - int indexPlus = value[ 0 ].IndexOf( '+' ); - if( indexPlus > 0 ) - { - string[] args = value[ 0 ].Split( '+' ); - m_renderQueue = TemplateHelperFunctions.StringToRenderQueue[ args[ 0 ] ]; - int.TryParse( args[ 1 ], out m_renderQueueOffset ); - } - else - { - int indexMinus = value[ 0 ].IndexOf( '-' ); - if( indexMinus > 0 ) - { - string[] args = value[ 0 ].Split( '-' ); - m_renderQueue = TemplateHelperFunctions.StringToRenderQueue[ args[ 0 ] ]; - int.TryParse( args[ 1 ], out m_renderQueueOffset ); - m_renderQueueOffset *= -1; - } - else - { - m_renderQueue = TemplateHelperFunctions.StringToRenderQueue[ value[ 0 ] ]; - m_renderQueueOffset = 0; - } - } - } - BuildQueueTagValue(); - } - break; - - } - } - - void CheckSpecialTag() - { - if( TagName.Equals( Constants.RenderTypeHelperStr ) ) - { - m_specialTag = TemplateSpecialTags.RenderType; - if( !TemplateHelperFunctions.StringToRenderType.TryGetValue( TagValue, out m_renderType )) - { - m_renderType = RenderType.Custom; - } - } - else if( TagName.Equals( Constants.RenderQueueHelperStr ) ) - { - m_specialTag = TemplateSpecialTags.Queue; - SetTagValue( TagValue ); - } - else - { - m_specialTag = TemplateSpecialTags.None; - } - } - - public CustomTagData( string name, string value, int id ) - { - TagName = name; - TagValue = value; - TagId = id; - CheckSpecialTag(); - } - - //Used on Template based shaders loading - public CustomTagData( string data, int id ) - { - TagId = id; - string[] arr = data.Split( IOUtils.VALUE_SEPARATOR ); - if( arr.Length > 1 ) - { - TagName = arr[ 0 ]; - TagValue = arr[ 1 ]; - } - - if( arr.Length > 2 ) - { - m_specialTag = (TemplateSpecialTags)Enum.Parse( typeof( TemplateSpecialTags ), arr[ 2 ] ); - switch( m_specialTag ) - { - case TemplateSpecialTags.RenderType: - { - if( !TemplateHelperFunctions.StringToRenderType.TryGetValue( TagValue, out m_renderType ) ) - { - m_renderType = RenderType.Custom; - } - } - break; - case TemplateSpecialTags.Queue: - { - if( arr.Length == 4 ) - { - m_renderQueue = (RenderQueue)Enum.Parse( typeof( RenderQueue ), TagValue ); - int.TryParse( arr[ 3 ], out m_renderQueueOffset ); - } - BuildQueueTagValue(); - } - break; - } - } - else if( UIUtils.CurrentShaderVersion() < 15600 ) - { - CheckSpecialTag(); - } - } - - //Used on Standard Surface shaders loading - public CustomTagData( string data ) - { - string[] arr = data.Split( IOUtils.VALUE_SEPARATOR ); - if( arr.Length > 1 ) - { - TagName = arr[ 0 ]; - TagValue = arr[ 1 ]; - } - } - - public override string ToString() - { - switch( m_specialTag ) - { - case TemplateSpecialTags.RenderType: - return TagName + IOUtils.VALUE_SEPARATOR + - ( RenderType != RenderType.Custom? RenderType.ToString(): TagValue ) + IOUtils.VALUE_SEPARATOR + - m_specialTag; - case TemplateSpecialTags.Queue: - return TagName + IOUtils.VALUE_SEPARATOR + - m_renderQueue.ToString() + IOUtils.VALUE_SEPARATOR + - m_specialTag + IOUtils.VALUE_SEPARATOR + - m_renderQueueOffset; - } - - return TagName + IOUtils.VALUE_SEPARATOR + TagValue; - } - - public string GenerateTag() - { - switch( m_specialTag ) - { - case TemplateSpecialTags.RenderType: - return string.Format( TagFormat, TagName, ( RenderType != RenderType.Custom ? RenderType.ToString() : TagValue ) ); - case TemplateSpecialTags.Queue: - case TemplateSpecialTags.None: - default: - return string.Format( TagFormat, TagName, TagValue ); - } - } - - public void BuildQueueTagValue() - { - TagValue = m_renderQueue.ToString(); - if( m_renderQueueOffset > 0 ) - { - TagValue += "+" + m_renderQueueOffset; - } - else if( m_renderQueueOffset < 0 ) - { - TagValue += m_renderQueueOffset; - } - } - - public TemplateSpecialTags SpecialTag - { - get { return m_specialTag; } - set - { - m_specialTag = value; - switch( value ) - { - case TemplateSpecialTags.RenderType: - { - //if( m_renderType != RenderType.Custom ) - // TagValue = m_renderType.ToString(); - } - break; - case TemplateSpecialTags.Queue: - { - BuildQueueTagValue(); - } - break; - } - } - } - - public RenderType RenderType - { - get { return m_renderType; } - set - { - m_renderType = value; - //if( m_renderType != RenderType.Custom ) - // TagValue = value.ToString(); - } - } - - public RenderQueue RenderQueue - { - get { return m_renderQueue; } - set { m_renderQueue = value; } - } - public int RenderQueueOffset - { - get { return m_renderQueueOffset; } - set { m_renderQueueOffset = value; } - } - - public bool IsValid { get { return ( !string.IsNullOrEmpty( TagValue ) && !string.IsNullOrEmpty( TagName ) ); } } - } - - [Serializable] - public class CustomTagsHelper - { - private const string CustomTagsStr = " Custom SubShader Tags"; - private const string TagNameStr = "Name"; - private const string TagValueStr = "Value"; - - private const float ShaderKeywordButtonLayoutWidth = 15; - private ParentNode m_currentOwner; - - [SerializeField] - private List<CustomTagData> m_availableTags = new List<CustomTagData>(); - - public void Draw( ParentNode owner ) - { - m_currentOwner = owner; - bool value = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedCustomTags; - NodeUtils.DrawPropertyGroup( ref value, CustomTagsStr, DrawMainBody, DrawButtons ); - owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedCustomTags = value; - } - - void DrawButtons() - { - EditorGUILayout.Separator(); - - // Add tag - if( GUILayout.Button( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - m_availableTags.Add( new CustomTagData() ); - EditorGUI.FocusTextInControl( null ); - } - - //Remove tag - if( GUILayout.Button( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - if( m_availableTags.Count > 0 ) - { - m_availableTags.RemoveAt( m_availableTags.Count - 1 ); - EditorGUI.FocusTextInControl( null ); - } - } - } - - void DrawMainBody() - { - EditorGUILayout.Separator(); - int itemCount = m_availableTags.Count; - - if( itemCount == 0 ) - { - EditorGUILayout.HelpBox( "Your list is Empty!\nUse the plus button to add one.", MessageType.Info ); - } - - int markedToDelete = -1; - float originalLabelWidth = EditorGUIUtility.labelWidth; - for( int i = 0; i < itemCount; i++ ) - { - m_availableTags[ i ].TagFoldout = m_currentOwner.EditorGUILayoutFoldout( m_availableTags[ i ].TagFoldout, string.Format( "[{0}] - {1}", i, m_availableTags[ i ].TagName ) ); - if( m_availableTags[ i ].TagFoldout ) - { - EditorGUI.indentLevel += 1; - EditorGUIUtility.labelWidth = 70; - //Tag Name - EditorGUI.BeginChangeCheck(); - m_availableTags[ i ].TagName = EditorGUILayout.TextField( TagNameStr, m_availableTags[ i ].TagName ); - if( EditorGUI.EndChangeCheck() ) - { - m_availableTags[ i ].TagName = UIUtils.RemoveShaderInvalidCharacters( m_availableTags[ i ].TagName ); - } - - //Tag Value - EditorGUI.BeginChangeCheck(); - m_availableTags[ i ].TagValue = EditorGUILayout.TextField( TagValueStr, m_availableTags[ i ].TagValue ); - if( EditorGUI.EndChangeCheck() ) - { - m_availableTags[ i ].TagValue = UIUtils.RemoveShaderInvalidCharacters( m_availableTags[ i ].TagValue ); - } - - EditorGUIUtility.labelWidth = originalLabelWidth; - - EditorGUILayout.BeginHorizontal(); - { - GUILayout.Label( " " ); - // Add new port - if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - m_availableTags.Insert( i + 1, new CustomTagData() ); - EditorGUI.FocusTextInControl( null ); - } - - //Remove port - if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - markedToDelete = i; - } - } - EditorGUILayout.EndHorizontal(); - - EditorGUI.indentLevel -= 1; - } - - } - if( markedToDelete > -1 ) - { - if( m_availableTags.Count > markedToDelete ) - { - m_availableTags.RemoveAt( markedToDelete ); - EditorGUI.FocusTextInControl( null ); - } - } - EditorGUILayout.Separator(); - } - - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - int count = Convert.ToInt32( nodeParams[ index++ ] ); - for( int i = 0; i < count; i++ ) - { - m_availableTags.Add( new CustomTagData( nodeParams[ index++ ] ) ); - } - } - - public void WriteToString( ref string nodeInfo ) - { - int tagsCount = m_availableTags.Count; - IOUtils.AddFieldValueToString( ref nodeInfo, tagsCount ); - for( int i = 0; i < tagsCount; i++ ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_availableTags[ i ].ToString() ); - } - } - - public string GenerateCustomTags() - { - int tagsCount = m_availableTags.Count; - string result = tagsCount == 0 ? string.Empty : " "; - - for( int i = 0; i < tagsCount; i++ ) - { - if( m_availableTags[ i ].IsValid ) - { - result += m_availableTags[ i ].GenerateTag(); - if( i < tagsCount - 1 ) - { - result += " "; - } - } - } - return result; - } - - public void Destroy() - { - m_availableTags.Clear(); - m_availableTags = null; - m_currentOwner = null; - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/CustomTagsHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/CustomTagsHelper.cs.meta deleted file mode 100644 index de6b426c..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/CustomTagsHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 5ed32be99aefda24483c9e3499a5cd23 -timeCreated: 1500400244 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/DependenciesHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/DependenciesHelper.cs deleted file mode 100644 index 915f173c..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/DependenciesHelper.cs +++ /dev/null @@ -1,210 +0,0 @@ -using System; -using UnityEngine; -using UnityEditor; -using System.Collections.Generic; - -namespace AmplifyShaderEditor -{ - [Serializable] - public class DependenciesData - { - private string DependencyFormat = "Dependency \"{0}\"=\"{1}\"\n"; - public string DependencyName; - public string DependencyValue; - public bool DependencyFoldout = true; - - public DependenciesData() - { - DependencyName = string.Empty; - DependencyValue = string.Empty; - } - - public DependenciesData( string data ) - { - string[] arr = data.Split( IOUtils.VALUE_SEPARATOR ); - if( arr.Length > 1 ) - { - DependencyName = arr[ 0 ]; - DependencyValue = arr[ 1 ]; - } - } - - public override string ToString() - { - return DependencyName + IOUtils.VALUE_SEPARATOR + DependencyValue; - } - - public string GenerateDependency() - { - return string.Format( DependencyFormat, DependencyName, DependencyValue ); - } - - public bool IsValid { get { return ( !string.IsNullOrEmpty( DependencyValue ) && !string.IsNullOrEmpty( DependencyName ) ); } } - } - - [Serializable] - public class DependenciesHelper - { - private const string CustomDependencysStr = " Dependencies"; - private const string DependencyNameStr = "Name"; - private const string DependencyValueStr = "Value"; - - private const float ShaderKeywordButtonLayoutWidth = 15; - private ParentNode m_currentOwner; - - [SerializeField] - private List<DependenciesData> m_availableDependencies = new List<DependenciesData>(); - - public void Draw( ParentNode owner, bool isNested = false ) - { - m_currentOwner = owner; - bool value = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDependencies; - if( isNested ) - { - NodeUtils.DrawNestedPropertyGroup( ref value, CustomDependencysStr, DrawMainBody, DrawButtons ); - } - else - { - NodeUtils.DrawPropertyGroup( ref value, CustomDependencysStr, DrawMainBody, DrawButtons ); - } - owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDependencies = value; - } - - void DrawButtons() - { - EditorGUILayout.Separator(); - - // Add Dependency - if( GUILayout.Button( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - m_availableDependencies.Add( new DependenciesData() ); - EditorGUI.FocusTextInControl( null ); - } - - //Remove Dependency - if( GUILayout.Button( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - if( m_availableDependencies.Count > 0 ) - { - m_availableDependencies.RemoveAt( m_availableDependencies.Count - 1 ); - EditorGUI.FocusTextInControl( null ); - } - } - } - - void DrawMainBody() - { - EditorGUILayout.Separator(); - int itemCount = m_availableDependencies.Count; - - if( itemCount == 0 ) - { - EditorGUILayout.HelpBox( "Your list is Empty!\nUse the plus button to add one.", MessageType.Info ); - } - - int markedToDelete = -1; - float originalLabelWidth = EditorGUIUtility.labelWidth; - for( int i = 0; i < itemCount; i++ ) - { - m_availableDependencies[ i ].DependencyFoldout = m_currentOwner.EditorGUILayoutFoldout( m_availableDependencies[ i ].DependencyFoldout, string.Format( "[{0}] - {1}", i, m_availableDependencies[ i ].DependencyName ) ); - if( m_availableDependencies[ i ].DependencyFoldout ) - { - EditorGUI.indentLevel += 1; - EditorGUIUtility.labelWidth = 70; - //Dependency Name - EditorGUI.BeginChangeCheck(); - m_availableDependencies[ i ].DependencyName = EditorGUILayout.TextField( DependencyNameStr, m_availableDependencies[ i ].DependencyName ); - if( EditorGUI.EndChangeCheck() ) - { - m_availableDependencies[ i ].DependencyName = UIUtils.RemoveShaderInvalidCharacters( m_availableDependencies[ i ].DependencyName ); - } - - //Dependency Value - EditorGUI.BeginChangeCheck(); - m_availableDependencies[ i ].DependencyValue = EditorGUILayout.TextField( DependencyValueStr, m_availableDependencies[ i ].DependencyValue ); - if( EditorGUI.EndChangeCheck() ) - { - m_availableDependencies[ i ].DependencyValue = UIUtils.RemoveShaderInvalidCharacters( m_availableDependencies[ i ].DependencyValue ); - } - - EditorGUIUtility.labelWidth = originalLabelWidth; - - EditorGUILayout.BeginHorizontal(); - { - GUILayout.Label( " " ); - // Add new port - if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - m_availableDependencies.Insert( i + 1, new DependenciesData() ); - EditorGUI.FocusTextInControl( null ); - } - - //Remove port - if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - markedToDelete = i; - } - } - EditorGUILayout.EndHorizontal(); - - EditorGUI.indentLevel -= 1; - } - - } - if( markedToDelete > -1 ) - { - if( m_availableDependencies.Count > markedToDelete ) - { - m_availableDependencies.RemoveAt( markedToDelete ); - EditorGUI.FocusTextInControl( null ); - } - } - EditorGUILayout.Separator(); - } - - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - int count = Convert.ToInt32( nodeParams[ index++ ] ); - for( int i = 0; i < count; i++ ) - { - m_availableDependencies.Add( new DependenciesData( nodeParams[ index++ ] ) ); - } - } - - public void WriteToString( ref string nodeInfo ) - { - int dependencyCount = m_availableDependencies.Count; - IOUtils.AddFieldValueToString( ref nodeInfo, dependencyCount ); - for( int i = 0; i < dependencyCount; i++ ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_availableDependencies[ i ].ToString() ); - } - } - - public string GenerateDependencies() - { - int dependencyCount = m_availableDependencies.Count; - string result = dependencyCount == 0 ? string.Empty : "\n"; - UIUtils.ShaderIndentLevel++; - for( int i = 0; i < dependencyCount; i++ ) - { - if( m_availableDependencies[ i ].IsValid ) - { - result += UIUtils.ShaderIndentTabs + m_availableDependencies[ i ].GenerateDependency(); - } - } - UIUtils.ShaderIndentLevel--; - return result; - } - - public void Destroy() - { - m_availableDependencies.Clear(); - m_availableDependencies = null; - m_currentOwner = null; - } - - public bool HasDependencies { get { return m_availableDependencies.Count > 0; } } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/DependenciesHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/DependenciesHelper.cs.meta deleted file mode 100644 index 92e4d819..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/DependenciesHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 2daff2983fe91ac43953017a8be984a7 -timeCreated: 1512404972 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FallbackPickerHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FallbackPickerHelper.cs deleted file mode 100644 index 6d006a96..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FallbackPickerHelper.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using UnityEngine; -using UnityEditor; - -namespace AmplifyShaderEditor -{ - [Serializable] - public class FallbackPickerHelper : ScriptableObject - { - private const string FallbackFormat = "Fallback \"{0}\""; - private const string FallbackShaderStr = "Fallback"; - private const string ShaderPoputContext = "CONTEXT/ShaderPopup"; - - private Material m_dummyMaterial; - private MenuCommand m_dummyCommand; - - [SerializeField] - private string m_fallbackShader = string.Empty; - - public void Init() - { - hideFlags = HideFlags.HideAndDontSave; - m_dummyMaterial = null; - m_dummyCommand = null; - } - - public void Draw( ParentNode owner ) - { - EditorGUILayout.BeginHorizontal(); - m_fallbackShader = owner.EditorGUILayoutTextField( FallbackShaderStr, m_fallbackShader ); - if ( GUILayout.Button( string.Empty, UIUtils.InspectorPopdropdownFallback, GUILayout.Width( 17 ), GUILayout.Height( 19 ) ) ) - { - EditorGUI.FocusTextInControl( null ); - GUI.FocusControl( null ); - DisplayShaderContext( owner, GUILayoutUtility.GetRect( GUIContent.none, EditorStyles.popup ) ); - } - EditorGUILayout.EndHorizontal(); - } - - private void DisplayShaderContext( ParentNode node, Rect r ) - { - if ( m_dummyCommand == null ) - m_dummyCommand = new MenuCommand( this, 0 ); - - if ( m_dummyMaterial == null ) - m_dummyMaterial = new Material( Shader.Find( "Hidden/ASESShaderSelectorUnlit" ) ); - -#pragma warning disable 0618 - UnityEditorInternal.InternalEditorUtility.SetupShaderMenu( m_dummyMaterial ); -#pragma warning restore 0618 - EditorUtility.DisplayPopupMenu( r, ShaderPoputContext, m_dummyCommand ); - } - - private void OnSelectedShaderPopup( string command, Shader shader ) - { - if ( shader != null ) - { - UIUtils.MarkUndoAction(); - Undo.RecordObject( this, "Selected fallback shader" ); - m_fallbackShader = shader.name; - } - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - m_fallbackShader = nodeParams[ index++ ]; - } - - public void WriteToString( ref string nodeInfo ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_fallbackShader ); - } - - public void Destroy() - { - GameObject.DestroyImmediate( m_dummyMaterial ); - m_dummyMaterial = null; - m_dummyCommand = null; - } - - public string TabbedFallbackShader - { - get - { - if( string.IsNullOrEmpty( m_fallbackShader ) ) - return string.Empty; - - return "\t" + string.Format( FallbackFormat, m_fallbackShader ) + "\n"; - } - } - - public string FallbackShader - { - get - { - if( string.IsNullOrEmpty( m_fallbackShader ) ) - return string.Empty; - - return string.Format( FallbackFormat, m_fallbackShader ); - } - } - - public string RawFallbackShader - { - get - { - return m_fallbackShader; - } - set - { - m_fallbackShader = value; - } - } - - - public bool Active { get { return !string.IsNullOrEmpty( m_fallbackShader ); } } - - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FallbackPickerHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FallbackPickerHelper.cs.meta deleted file mode 100644 index 2336aa83..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FallbackPickerHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: cd5a03cee1255ba438e2062d215b70b6 -timeCreated: 1490378537 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionInput.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionInput.cs deleted file mode 100644 index a253a5a8..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionInput.cs +++ /dev/null @@ -1,523 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using UnityEngine; -using UnityEditor; -using System; -using System.Collections.Generic; - -namespace AmplifyShaderEditor -{ - [Serializable] - [NodeAttributes( "Function Input", "Functions", "Function Input adds an input port to the shader function", NodeAvailabilityFlags = (int)NodeAvailability.ShaderFunction )] - public sealed class FunctionInput : ParentNode - { - private const string InputTypeStr = "Input Type"; - private readonly string[] m_inputValueTypes ={ "Int", - "Float", - "Vector2", - "Vector3", - "Vector4", - "Color", - "Matrix 3x3", - "Matrix 4x4", - "Sampler 1D", - "Sampler 2D", - "Sampler 3D", - "Sampler Cube"}; - - [SerializeField] - private int m_selectedInputTypeInt = 1; - - private WirePortDataType m_selectedInputType = WirePortDataType.FLOAT; - - [SerializeField] - private FunctionNode m_functionNode; - - [SerializeField] - private string m_inputName = "Input"; - - [SerializeField] - private bool m_autoCast = false; - - [SerializeField] - private int m_orderIndex = -1; - - private int m_typeId = -1; - - public bool m_ignoreConnection = false; - - public delegate string PortGeneration( ref MasterNodeDataCollector dataCollector, int index, ParentGraph graph ); - public PortGeneration OnPortGeneration = null; - - //Title editing - [SerializeField] - private string m_uniqueName; - - private bool m_isEditing; - private bool m_stopEditing; - private bool m_startEditing; - private double m_clickTime; - private double m_doubleClickTime = 0.3; - private Rect m_titleClickArea; - private bool m_showTitleWhenNotEditing = true; - - - protected override void CommonInit( int uniqueId ) - { - base.CommonInit( uniqueId ); - AddInputPort( WirePortDataType.FLOAT, false, Constants.EmptyPortValue ); - m_inputPorts[ 0 ].AutoDrawInternalData = true; - //m_inputPorts[ 0 ].Visible = false; - AddOutputPort( WirePortDataType.FLOAT, Constants.EmptyPortValue ); - m_autoWrapProperties = true; - m_textLabelWidth = 100; - SetTitleText( m_inputName ); - UpdatePorts(); - SetAdditonalTitleText( "( " + m_inputValueTypes[ m_selectedInputTypeInt ] + " )" ); - m_previewShaderGUID = "04bc8e7b317dccb4d8da601680dd8140"; - } - - public override void SetPreviewInputs() - { - if( Fnode == null ) - { - m_ignoreConnection = false; - CheckSpherePreview(); - } - else - { - var input = Fnode.GetInput( this ); - if( input != null && ( !InputPorts[ 0 ].IsConnected || input.IsConnected ) ) - { - m_ignoreConnection = true; - InputPorts[ 0 ].PreparePortCacheID(); - Fnode.SetPreviewInput( input ); - if( input.ExternalReferences.Count > 0 ) - { - SpherePreview = Fnode.ContainerGraph.GetNode( input.ExternalReferences[ 0 ].NodeId ).SpherePreview; - } - else - { - SpherePreview = false; - } - PreviewMaterial.SetTexture( InputPorts[ 0 ].CachedPropertyId, input.InputPreviewTexture( Fnode.ContainerGraph ) ); - } - else - { - m_ignoreConnection = false; - CheckSpherePreview(); - } - } - - if( !m_ignoreConnection ) - base.SetPreviewInputs(); - - for( int i = 0; i < OutputPorts[ 0 ].ExternalReferences.Count; i++ ) - { - ContainerGraph.GetNode( OutputPorts[ 0 ].ExternalReferences[ i ].NodeId ).OnNodeChange(); - } - - if( m_typeId == -1 ) - m_typeId = Shader.PropertyToID( "_Type" ); - - if( m_inputPorts[ 0 ].DataType == WirePortDataType.FLOAT || m_inputPorts[ 0 ].DataType == WirePortDataType.INT ) - PreviewMaterial.SetInt( m_typeId, 1 ); - else if( m_inputPorts[ 0 ].DataType == WirePortDataType.FLOAT2 ) - PreviewMaterial.SetInt( m_typeId, 2 ); - else if( m_inputPorts[ 0 ].DataType == WirePortDataType.FLOAT3 ) - PreviewMaterial.SetInt( m_typeId, 3 ); - else - PreviewMaterial.SetInt( m_typeId, 0 ); - - } - - public override bool RecursivePreviewUpdate( Dictionary<string, bool> duplicatesDict = null ) - { - if( duplicatesDict == null ) - { - duplicatesDict = ContainerGraph.ParentWindow.VisitedChanged; - } - - for( int i = 0; i < InputPorts.Count; i++ ) - { - ParentNode outNode = null; - if( Fnode != null ) - { - var input = Fnode.GetInput( this ); - if( input.ExternalReferences.Count > 0 ) - { - outNode = Fnode.ContainerGraph.GetNode( input.ExternalReferences[ 0 ].NodeId ); - } - else if( InputPorts[ i ].ExternalReferences.Count > 0 ) - { - outNode = ContainerGraph.GetNode( InputPorts[ i ].ExternalReferences[ 0 ].NodeId ); - } - } - else - { - if( InputPorts[ i ].ExternalReferences.Count > 0 ) - { - outNode = ContainerGraph.GetNode( InputPorts[ i ].ExternalReferences[ 0 ].NodeId ); - } - } - if( outNode != null ) - { - if( !duplicatesDict.ContainsKey( outNode.OutputId ) ) - { - bool result = outNode.RecursivePreviewUpdate(); - if( result ) - PreviewIsDirty = true; - } - else if( duplicatesDict[ outNode.OutputId ] ) - { - PreviewIsDirty = true; - } - } - } - - bool needsUpdate = PreviewIsDirty; - RenderNodePreview(); - if( !duplicatesDict.ContainsKey( OutputId ) ) - duplicatesDict.Add( OutputId, needsUpdate ); - return needsUpdate; - } - - protected override void OnUniqueIDAssigned() - { - base.OnUniqueIDAssigned(); - UIUtils.RegisterFunctionInputNode( this ); - if( m_nodeAttribs != null ) - m_uniqueName = m_nodeAttribs.Name + UniqueId; - } - - public override void Destroy() - { - base.Destroy(); - OnPortGeneration = null; - UIUtils.UnregisterFunctionInputNode( this ); - } - - public override void OnInputPortConnected( int portId, int otherNodeId, int otherPortId, bool activateNode = true ) - { - base.OnInputPortConnected( portId, otherNodeId, otherPortId, activateNode ); - if( AutoCast ) - { - m_inputPorts[ 0 ].MatchPortToConnection(); - SetIntTypeFromPort(); - UpdatePorts(); - SetAdditonalTitleText( "( " + m_inputValueTypes[ m_selectedInputTypeInt ] + " )" ); - } - } - - public override void OnConnectedOutputNodeChanges( int portId, int otherNodeId, int otherPortId, string name, WirePortDataType type ) - { - base.OnConnectedOutputNodeChanges( portId, otherNodeId, otherPortId, name, type ); - if( AutoCast ) - { - m_inputPorts[ 0 ].MatchPortToConnection(); - SetIntTypeFromPort(); - UpdatePorts(); - SetAdditonalTitleText( "( " + m_inputValueTypes[ m_selectedInputTypeInt ] + " )" ); - } - } - - public void SetIntTypeFromPort() - { - switch( m_inputPorts[ 0 ].DataType ) - { - case WirePortDataType.INT: m_selectedInputTypeInt = 0; break; - default: - case WirePortDataType.FLOAT: m_selectedInputTypeInt = 1; break; - case WirePortDataType.FLOAT2: m_selectedInputTypeInt = 2; break; - case WirePortDataType.FLOAT3: m_selectedInputTypeInt = 3; break; - case WirePortDataType.FLOAT4: m_selectedInputTypeInt = 4; break; - case WirePortDataType.COLOR: m_selectedInputTypeInt = 5; break; - case WirePortDataType.FLOAT3x3: m_selectedInputTypeInt = 6; break; - case WirePortDataType.FLOAT4x4: m_selectedInputTypeInt = 7; break; - case WirePortDataType.SAMPLER1D: m_selectedInputTypeInt = 8; break; - case WirePortDataType.SAMPLER2D: m_selectedInputTypeInt = 9; break; - case WirePortDataType.SAMPLER3D: m_selectedInputTypeInt = 10; break; - case WirePortDataType.SAMPLERCUBE: m_selectedInputTypeInt = 11; break; - } - } - - public override void Draw( DrawInfo drawInfo ) - { - base.Draw( drawInfo ); - // Custom Editable Title - if( ContainerGraph.LodLevel <= ParentGraph.NodeLOD.LOD3 ) - { - if( !m_isEditing && ( ( !ContainerGraph.ParentWindow.MouseInteracted && drawInfo.CurrentEventType == EventType.MouseDown && m_titleClickArea.Contains( drawInfo.MousePosition ) ) ) ) - { - if( ( EditorApplication.timeSinceStartup - m_clickTime ) < m_doubleClickTime ) - m_startEditing = true; - else - GUI.FocusControl( null ); - m_clickTime = EditorApplication.timeSinceStartup; - } - else if( m_isEditing && ( ( drawInfo.CurrentEventType == EventType.MouseDown && !m_titleClickArea.Contains( drawInfo.MousePosition ) ) || !EditorGUIUtility.editingTextField ) ) - { - m_stopEditing = true; - } - - if( m_isEditing || m_startEditing ) - { - EditorGUI.BeginChangeCheck(); - GUI.SetNextControlName( m_uniqueName ); - m_inputName = EditorGUITextField( m_titleClickArea, string.Empty, m_inputName, UIUtils.GetCustomStyle( CustomStyle.NodeTitle ) ); - if( EditorGUI.EndChangeCheck() ) - { - SetTitleText( m_inputName ); - UIUtils.UpdateFunctionInputData( UniqueId, m_inputName ); - } - - if( m_startEditing ) - EditorGUI.FocusTextInControl( m_uniqueName ); - - } - - if( drawInfo.CurrentEventType == EventType.Repaint ) - { - if( m_startEditing ) - { - m_startEditing = false; - m_isEditing = true; - } - - if( m_stopEditing ) - { - m_stopEditing = false; - m_isEditing = false; - GUI.FocusControl( null ); - } - } - - - } - } - - public override void OnNodeLayout( DrawInfo drawInfo ) - { - // RUN LAYOUT CHANGES AFTER TITLES CHANGE - base.OnNodeLayout( drawInfo ); - m_titleClickArea = m_titlePos; - m_titleClickArea.height = Constants.NODE_HEADER_HEIGHT; - } - - public override void OnNodeRepaint( DrawInfo drawInfo ) - { - base.OnNodeRepaint( drawInfo ); - - if( !m_isVisible ) - return; - - // Fixed Title ( only renders when not editing ) - if( m_showTitleWhenNotEditing && !m_isEditing && !m_startEditing && ContainerGraph.LodLevel <= ParentGraph.NodeLOD.LOD3 ) - { - GUI.Label( m_titleClickArea, m_content, UIUtils.GetCustomStyle( CustomStyle.NodeTitle ) ); - } - } - - public override void OnNodeDoubleClicked( Vector2 currentMousePos2D ) - { - if( currentMousePos2D.y - m_globalPosition.y > ( Constants.NODE_HEADER_HEIGHT + Constants.NODE_HEADER_EXTRA_HEIGHT ) * ContainerGraph.ParentWindow.CameraDrawInfo.InvertedZoom ) - { - ContainerGraph.ParentWindow.ParametersWindow.IsMaximized = !ContainerGraph.ParentWindow.ParametersWindow.IsMaximized; - } - } - - public override void DrawProperties() - { - base.DrawProperties(); - EditorGUILayout.BeginVertical(); - EditorGUI.BeginChangeCheck(); - m_inputName = EditorGUILayoutTextField( "Name", m_inputName ); - if( EditorGUI.EndChangeCheck() ) - { - SetTitleText( m_inputName ); - UIUtils.UpdateFunctionInputData( UniqueId, m_inputName ); - } - EditorGUI.BeginChangeCheck(); - m_selectedInputTypeInt = EditorGUILayoutPopup( InputTypeStr, m_selectedInputTypeInt, m_inputValueTypes ); - if( EditorGUI.EndChangeCheck() ) - { - UpdatePorts(); - SetAdditonalTitleText( "( " + m_inputValueTypes[ m_selectedInputTypeInt ] + " )" ); - } - - m_autoCast = EditorGUILayoutToggle( "Auto Cast", m_autoCast ); - - EditorGUILayout.Separator(); - if( !m_inputPorts[ 0 ].IsConnected && m_inputPorts[ 0 ].ValidInternalData ) - { - m_inputPorts[ 0 ].ShowInternalData( this, true, "Default Value" ); - } - - - EditorGUILayout.EndVertical(); - } - - void UpdatePorts() - { - //switch( m_inputPorts[ 0 ].DataType ) - //{ - // case WirePortDataType.INT: m_selectedInputTypeInt = 0; break; - // default: - // case WirePortDataType.FLOAT: m_selectedInputTypeInt = 1; break; - // case WirePortDataType.FLOAT2: m_selectedInputTypeInt = 2; break; - // case WirePortDataType.FLOAT3: m_selectedInputTypeInt = 3; break; - - // //case 2: m_selectedInputType = WirePortDataType.FLOAT2; break; - // //case 3: m_selectedInputType = WirePortDataType.FLOAT3; break; - // //case 4: m_selectedInputType = WirePortDataType.FLOAT4; break; - // //case 5: m_selectedInputType = WirePortDataType.COLOR; break; - // //case 6: m_selectedInputType = WirePortDataType.FLOAT3x3; break; - // //case 7: m_selectedInputType = WirePortDataType.FLOAT4x4; break; - // //case 8: m_selectedInputType = WirePortDataType.SAMPLER1D; break; - // //case 9: m_selectedInputType = WirePortDataType.SAMPLER2D; break; - // //case 10: m_selectedInputType = WirePortDataType.SAMPLER3D; break; - // //case 11: m_selectedInputType = WirePortDataType.SAMPLERCUBE; break; - //} - - switch( m_selectedInputTypeInt ) - { - case 0: m_selectedInputType = WirePortDataType.INT; break; - default: - case 1: m_selectedInputType = WirePortDataType.FLOAT; break; - case 2: m_selectedInputType = WirePortDataType.FLOAT2; break; - case 3: m_selectedInputType = WirePortDataType.FLOAT3; break; - case 4: m_selectedInputType = WirePortDataType.FLOAT4; break; - case 5: m_selectedInputType = WirePortDataType.COLOR; break; - case 6: m_selectedInputType = WirePortDataType.FLOAT3x3; break; - case 7: m_selectedInputType = WirePortDataType.FLOAT4x4; break; - case 8: m_selectedInputType = WirePortDataType.SAMPLER1D; break; - case 9: m_selectedInputType = WirePortDataType.SAMPLER2D; break; - case 10: m_selectedInputType = WirePortDataType.SAMPLER3D; break; - case 11: m_selectedInputType = WirePortDataType.SAMPLERCUBE; break; - } - - ChangeInputType( m_selectedInputType, false ); - - //This node doesn't have any restrictions but changing types should be restricted to prevent invalid connections - m_outputPorts[ 0 ].ChangeTypeWithRestrictions( m_selectedInputType, PortCreateRestriction( m_selectedInputType ) ); - m_sizeIsDirty = true; - } - - public int PortCreateRestriction( WirePortDataType dataType ) - { - int restrictions = 0; - WirePortDataType[] types = null; - switch( dataType ) - { - case WirePortDataType.OBJECT: - break; - case WirePortDataType.FLOAT: - case WirePortDataType.FLOAT2: - case WirePortDataType.FLOAT3: - case WirePortDataType.FLOAT4: - case WirePortDataType.COLOR: - case WirePortDataType.INT: - { - types = new WirePortDataType[] { WirePortDataType.FLOAT, WirePortDataType.FLOAT2, WirePortDataType.FLOAT3, WirePortDataType.FLOAT4, WirePortDataType.COLOR, WirePortDataType.INT, WirePortDataType.OBJECT }; - } - break; - case WirePortDataType.FLOAT3x3: - case WirePortDataType.FLOAT4x4: - { - types = new WirePortDataType[] { WirePortDataType.FLOAT3x3, WirePortDataType.FLOAT4x4, WirePortDataType.OBJECT }; - } - break; - case WirePortDataType.SAMPLER1D: - case WirePortDataType.SAMPLER2D: - case WirePortDataType.SAMPLER3D: - case WirePortDataType.SAMPLERCUBE: - { - types = new WirePortDataType[] { WirePortDataType.SAMPLER1D, WirePortDataType.SAMPLER2D, WirePortDataType.SAMPLER3D, WirePortDataType.SAMPLERCUBE, WirePortDataType.OBJECT }; - } - break; - default: - break; - } - - if( types != null ) - { - for( int i = 0; i < types.Length; i++ ) - { - restrictions = restrictions | (int)types[ i ]; - } - } - - return restrictions; - } - - public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar ) - { - if( m_outputPorts[ outputId ].IsLocalValue( dataCollector.PortCategory ) ) - return m_outputPorts[ outputId ].LocalValue( dataCollector.PortCategory ); - - string result = string.Empty; - if( OnPortGeneration != null ) - result = OnPortGeneration( ref dataCollector, m_orderIndex, ContainerGraph.ParentWindow.CustomGraph ); - else - result = m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector ); - - if( m_outputPorts[ outputId ].ConnectionCount > 1 ) - RegisterLocalVariable( outputId, result, ref dataCollector ); - else - m_outputPorts[ outputId ].SetLocalValue( result, dataCollector.PortCategory ); - - return m_outputPorts[ outputId ].LocalValue( dataCollector.PortCategory ); - } - - public override void WriteToString( ref string nodeInfo, ref string connectionsInfo ) - { - base.WriteToString( ref nodeInfo, ref connectionsInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_inputName ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_selectedInputTypeInt ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_orderIndex ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_autoCast ); - } - - public override void ReadFromString( ref string[] nodeParams ) - { - base.ReadFromString( ref nodeParams ); - m_inputName = GetCurrentParam( ref nodeParams ); - m_selectedInputTypeInt = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - m_orderIndex = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - m_autoCast = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) ); - - SetTitleText( m_inputName ); - UpdatePorts(); - SetAdditonalTitleText( "( " + m_inputValueTypes[ m_selectedInputTypeInt ] + " )" ); - } - - public WirePortDataType SelectedInputType - { - get { return m_selectedInputType; } - } - - public string InputName - { - get { return m_inputName; } - } - - public int OrderIndex - { - get { return m_orderIndex; } - set { m_orderIndex = value; } - } - - public bool AutoCast - { - get { return m_autoCast; } - set { m_autoCast = value; } - } - - public FunctionNode Fnode - { - get { return m_functionNode; } - set { m_functionNode = value; } - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionInput.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionInput.cs.meta deleted file mode 100644 index c5aa5505..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionInput.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 64064ea01705e084cbe00a3bbeef2c3d -timeCreated: 1491927259 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionNode.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionNode.cs deleted file mode 100644 index de297c2e..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionNode.cs +++ /dev/null @@ -1,1236 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -//#define ADD_SHADER_FUNCTION_HEADERS - -using UnityEngine; -using UnityEditor; -using System.Collections.Generic; -using System; -namespace AmplifyShaderEditor -{ - [Serializable] - [NodeAttributes( "Function Node", "Functions", "Function Node", KeyCode.None, false, 0, int.MaxValue, typeof( AmplifyShaderFunction ) )] - public class FunctionNode : ParentNode - { - [SerializeField] - private AmplifyShaderFunction m_function; - - [SerializeField] - private ParentGraph m_functionGraph; - - [SerializeField] - private int m_functionGraphId = -1; - - [SerializeField] - private List<FunctionInput> m_allFunctionInputs; - private Dictionary<int, FunctionInput> m_allFunctionInputsDict = new Dictionary<int, FunctionInput>(); - - [SerializeField] - private List<FunctionOutput> m_allFunctionOutputs; - private Dictionary<int, FunctionOutput> m_allFunctionOutputsDict = new Dictionary<int, FunctionOutput>(); - - [SerializeField] - private List<FunctionSwitch> m_allFunctionSwitches; - private Dictionary<int, FunctionSwitch> m_allFunctionSwitchesDict = new Dictionary<int, FunctionSwitch>(); - - [SerializeField] - private ReordenatorNode m_reordenator; - - [SerializeField] - private string m_filename; - - [SerializeField] - private string m_headerTitle = string.Empty; - - [SerializeField] - private int m_orderIndex; - - [SerializeField] - private string m_functionCheckSum; - - [SerializeField] - private string m_functionGUID = string.Empty; - - //[SerializeField] - //private List<string> m_includes = new List<string>(); - - //[SerializeField] - //private List<string> m_pragmas = new List<string>(); - - [SerializeField] - private List<AdditionalDirectiveContainer> m_directives = new List<AdditionalDirectiveContainer>(); - - private bool m_parametersFoldout = true; - [SerializeField] - private ParentGraph m_outsideGraph = null; - - [SerializeField] - private FunctionOutput m_mainPreviewNode; - - bool m_portsChanged = false; - //[SerializeField] - bool m_initialGraphDraw = false; - - private bool m_refreshIdsRequired = false; - - public string[] ReadOptionsHelper = new string[] { }; - - private bool m_lateRefresh = false; - - private Dictionary<int, bool> m_duplicatesBuffer = new Dictionary<int, bool>(); - string LastLine( string text ) - { - string[] lines = text.Replace( "\r", "" ).Split( '\n' ); - return lines[ lines.Length - 1 ]; - } - - public void CommonInit( AmplifyShaderFunction function, int uniqueId ) - { - SetBaseUniqueId( uniqueId ); - - if( function == null ) - return; - - m_refreshIdsRequired = UIUtils.IsLoading && ( UIUtils.CurrentShaderVersion() < 14004 ); - - m_function = function; - - if( Function.FunctionName.Length > 1 ) - { - SetTitleText( GraphContextMenu.AddSpacesToSentence( Function.FunctionName ) ); - } - else - { - SetTitleText( Function.FunctionName ); - } - m_tooltipText = Function.Description; - m_hasTooltipLink = false; - if( m_functionGraph == null ) - { - //m_functionGraph = new ParentGraph(); - m_functionGraph = CreateInstance<ParentGraph>(); - m_functionGraph.Init(); - m_functionGraph.ParentWindow = ContainerGraph.ParentWindow; - } - - if( string.IsNullOrEmpty( m_functionGUID ) ) - { - m_functionGUID = AssetDatabase.AssetPathToGUID( AssetDatabase.GetAssetPath( m_function ) ); - } - - m_functionGraphId = Mathf.Max( m_functionGraphId, ContainerGraph.ParentWindow.GraphCount ); - ContainerGraph.ParentWindow.GraphCount = m_functionGraphId + 1; - m_functionGraph.SetGraphId( m_functionGraphId ); - - ParentGraph cachedGraph = ContainerGraph.ParentWindow.CustomGraph; - ContainerGraph.ParentWindow.CustomGraph = m_functionGraph; - - AmplifyShaderEditorWindow.LoadFromMeta( ref m_functionGraph, ContainerGraph.ParentWindow.ContextMenuInstance, Function.FunctionInfo ); - //m_functionCheckSum = LastLine( m_function.FunctionInfo ); - m_functionCheckSum = AssetDatabase.GetAssetDependencyHash( AssetDatabase.GetAssetPath( m_function ) ).ToString(); - List<PropertyNode> propertyList = UIUtils.PropertyNodesList(); - m_allFunctionInputs = UIUtils.FunctionInputList(); - m_allFunctionOutputs = UIUtils.FunctionOutputList(); - m_allFunctionSwitches = UIUtils.FunctionSwitchList(); - - ContainerGraph.ParentWindow.CustomGraph = cachedGraph; - - m_allFunctionInputs.Sort( ( x, y ) => { return x.OrderIndex.CompareTo( y.OrderIndex ); } ); - m_allFunctionOutputs.Sort( ( x, y ) => { return x.OrderIndex.CompareTo( y.OrderIndex ); } ); - m_allFunctionSwitches.Sort( ( x, y ) => { return x.OrderIndex.CompareTo( y.OrderIndex ); } ); - - int inputCount = m_allFunctionInputs.Count; - for( int i = 0; i < inputCount; i++ ) - { - if( m_refreshIdsRequired ) - { - AddInputPort( m_allFunctionInputs[ i ].SelectedInputType, false, m_allFunctionInputs[ i ].InputName ); - } - else - { - AddInputPort( m_allFunctionInputs[ i ].SelectedInputType, false, m_allFunctionInputs[ i ].InputName, -1, MasterNodePortCategory.Fragment, m_allFunctionInputs[ i ].UniqueId ); - } - InputPortSwitchRestriction( m_inputPorts[ i ] ); - - if( !m_allFunctionInputs[ i ].InputPorts[ 0 ].IsConnected ) - { - m_inputPorts[ i ].AutoDrawInternalData = true; - m_inputPorts[ i ].InternalData = m_allFunctionInputs[ i ].InputPorts[ 0 ].InternalData; - } - m_allFunctionInputs[ i ].Fnode = this; - } - - int outputCount = m_allFunctionOutputs.Count; - FunctionOutput first = null; - for( int i = 0; i < outputCount; i++ ) - { - if( i == 0 ) - first = m_allFunctionOutputs[ i ]; - - if( m_allFunctionOutputs[ i ].PreviewNode ) - { - m_mainPreviewNode = m_allFunctionOutputs[ i ]; - } - - if( m_refreshIdsRequired ) - { - AddOutputPort( m_allFunctionOutputs[ i ].AutoOutputType, m_allFunctionOutputs[ i ].OutputName ); - } - else - { - AddOutputPort( m_allFunctionOutputs[ i ].AutoOutputType, m_allFunctionOutputs[ i ].OutputName, m_allFunctionOutputs[ i ].UniqueId ); - } - OutputPortSwitchRestriction( m_outputPorts[ i ] ); - } - - // make sure to hide the ports properly - CheckPortVisibility(); - - if( m_mainPreviewNode == null ) - m_mainPreviewNode = first; - - //create reordenator to main graph - bool inside = false; - if( ContainerGraph.ParentWindow.CustomGraph != null ) - inside = true; - - if( /*hasConnectedProperties*/propertyList.Count > 0 ) - { - m_reordenator = ScriptableObject.CreateInstance<ReordenatorNode>(); - m_reordenator.Init( "_" + Function.FunctionName, Function.FunctionName, propertyList, false ); - m_reordenator.OrderIndex = m_orderIndex; - m_reordenator.HeaderTitle = Function.FunctionName; - m_reordenator.IsInside = inside; - } - - if( m_reordenator != null ) - { - cachedGraph = ContainerGraph.ParentWindow.CustomGraph; - ContainerGraph.ParentWindow.CustomGraph = null; - UIUtils.RegisterPropertyNode( m_reordenator ); - ContainerGraph.ParentWindow.CustomGraph = cachedGraph; - - if( inside ) - { - UIUtils.RegisterPropertyNode( m_reordenator ); - } - } - - m_textLabelWidth = 120; - - UIUtils.RegisterFunctionNode( this ); - - m_previewShaderGUID = "aca70c900c50c004e8ef0b47c4fac4d4"; - m_useInternalPortData = false; - m_selectedLocation = function.PreviewPosition; - UIUtils.CurrentWindow.OutsideGraph.OnLODMasterNodesAddedEvent += OnLODMasterNodesAddedEvent; - } - - public InputPort GetInput( FunctionInput input ) - { - int index = m_allFunctionInputs.FindIndex( ( x ) => { return x.Equals( input ); } ); - if( index >= 0 ) - return InputPorts[ index ]; - else - return null; - } - - private void OnLODMasterNodesAddedEvent( int lod ) - { - AddShaderFunctionDirectivesInternal( lod ); - } - - public void SetPreviewInput( InputPort input ) - { - if( !HasPreviewShader || !m_initialized ) - return; - - if( input.IsConnected && input.InputNodeHasPreview( ContainerGraph ) ) - { - input.SetPreviewInputTexture( ContainerGraph ); - } - else - { - input.SetPreviewInputValue( ContainerGraph ); - } - } - - public override bool RecursivePreviewUpdate( Dictionary<string, bool> duplicatesDict = null ) - { - if( duplicatesDict == null ) - { - duplicatesDict = ContainerGraph.ParentWindow.VisitedChanged; - } - - if( m_allFunctionOutputs == null || m_allFunctionOutputs.Count == 0 ) - return false; - - for( int i = 0; i < m_allFunctionOutputs.Count; i++ ) - { - ParentNode outNode = m_allFunctionOutputs[ i ]; - if( outNode != null ) - { - if( !duplicatesDict.ContainsKey( outNode.OutputId ) ) - { - bool result = outNode.RecursivePreviewUpdate(); - if( result ) - PreviewIsDirty = true; - } - else if( duplicatesDict[ outNode.OutputId ] ) - { - PreviewIsDirty = true; - } - } - } - - bool needsUpdate = PreviewIsDirty; - RenderNodePreview(); - if( !duplicatesDict.ContainsKey( OutputId ) ) - duplicatesDict.Add( OutputId, needsUpdate ); - return needsUpdate; - } - - public override void RenderNodePreview() - { - if( m_outputPorts == null ) - return; - - if( !PreviewIsDirty && !m_continuousPreviewRefresh ) - return; - - // this is in the wrong place?? - if( m_drawPreviewAsSphere != m_mainPreviewNode.SpherePreview ) - { - m_drawPreviewAsSphere = m_mainPreviewNode.SpherePreview; - OnNodeChange(); - } - - int count = m_outputPorts.Count; - for( int i = 0; i < count; i++ ) - { - m_outputPorts[ i ].OutputPreviewTexture = m_allFunctionOutputs[ i ].PreviewTexture; - } - - if( PreviewIsDirty ) - FinishPreviewRender = true; - - PreviewIsDirty = false; - } - - public override RenderTexture PreviewTexture - { - get - { - if( m_mainPreviewNode != null ) - return m_mainPreviewNode.PreviewTexture; - else - return base.PreviewTexture; - } - } - - private void AddShaderFunctionDirectivesInternal( int lod ) - { - List<TemplateMultiPassMasterNode> nodes = ContainerGraph.ParentWindow.OutsideGraph.GetMultiPassMasterNodes( lod ); - int count = nodes.Count; - for( int i = 0; i < count; i++ ) - { - nodes[ i ].PassModule.AdditionalDirectives.AddShaderFunctionItems( OutputId, Function.AdditionalDirectives.DirectivesList ); - } - } - - public override void RefreshExternalReferences() - { - base.RefreshExternalReferences(); - if( Function == null ) - return; - - //Debug.Log( "RefreshExternalReferences " + m_function.FunctionName + " " + UIUtils.CurrentWindow.IsShaderFunctionWindow ); - - Function.UpdateDirectivesList(); - - MasterNode masterNode = UIUtils.CurrentWindow.OutsideGraph.CurrentMasterNode; - StandardSurfaceOutputNode surface = masterNode as StandardSurfaceOutputNode; - - - - if( surface != null ) - { - //for( int i = 0; i < Function.AdditionalIncludes.IncludeList.Count; i++ ) - //{ - // //ContainerGraph.ParentWindow.OutsideGraph.CurrentStandardSurface.AdditionalIncludes.OutsideList.Add( Function.AdditionalIncludes.IncludeList[ i ] ); - // ContainerGraph.ParentWindow.OutsideGraph.CurrentStandardSurface.AdditionalDirectives.AddShaderFunctionItem( AdditionalLineType.Include, Function.AdditionalIncludes.IncludeList[ i ] ); - // m_includes.Add( Function.AdditionalIncludes.IncludeList[ i ] ); - //} - - //for( int i = 0; i < Function.AdditionalPragmas.PragmaList.Count; i++ ) - //{ - // //ContainerGraph.ParentWindow.OutsideGraph.CurrentStandardSurface.AdditionalPragmas.OutsideList.Add( Function.AdditionalPragmas.PragmaList[ i ] ); - // ContainerGraph.ParentWindow.OutsideGraph.CurrentStandardSurface.AdditionalDirectives.AddShaderFunctionItem(AdditionalLineType.Pragma, Function.AdditionalPragmas.PragmaList[ i ] ); - // m_pragmas.Add( Function.AdditionalPragmas.PragmaList[ i ] ); - //} - surface.AdditionalDirectives.AddShaderFunctionItems( OutputId, Function.AdditionalDirectives.DirectivesList ); - } - else - { - if( ContainerGraph.ParentWindow.OutsideGraph.MultiPassMasterNodes.Count > 0 ) - { - for( int lod = -1; lod < ContainerGraph.ParentWindow.OutsideGraph.LodMultiPassMasternodes.Count; lod++ ) - { - AddShaderFunctionDirectivesInternal( lod ); - } - } - else - { - // Assuring that we're not editing a Shader Function, as directives setup is not needed there - if( !UIUtils.CurrentWindow.IsShaderFunctionWindow ) - { - // This function is nested inside a shader function itself and this method - // was called before the main output node was created. - // This is possible since all nodes RefreshExternalReferences(...) are called at the end - // of a LoadFromMeta - // Need to delay this setup to after all nodes are loaded to then setup the directives - m_lateRefresh = true; - return; - } - } - - } - m_directives.AddRange( Function.AdditionalDirectives.DirectivesList ); - - if( m_refreshIdsRequired ) - { - m_refreshIdsRequired = false; - int inputCount = m_inputPorts.Count; - for( int i = 0; i < inputCount; i++ ) - { - m_inputPorts[ i ].ChangePortId( m_allFunctionInputs[ i ].UniqueId ); - } - - int outputCount = m_outputPorts.Count; - for( int i = 0; i < outputCount; i++ ) - { - m_outputPorts[ i ].ChangePortId( m_allFunctionOutputs[ i ].UniqueId ); - } - } - - if( ContainerGraph.ParentWindow.CurrentGraph != m_functionGraph ) - ContainerGraph.ParentWindow.CurrentGraph.InstancePropertyCount += m_functionGraph.InstancePropertyCount; - - ParentGraph cachedGraph = ContainerGraph.ParentWindow.CustomGraph; - ContainerGraph.ParentWindow.CustomGraph = m_functionGraph; - - if( ReadOptionsHelper.Length > 2 ) - { - for( int i = 1; i < ReadOptionsHelper.Length; i += 2 ) - { - int optionId = Convert.ToInt32( ReadOptionsHelper[ i ] ); - int optionValue = Convert.ToInt32( ReadOptionsHelper[ i + 1 ] ); - for( int j = 0; j < m_allFunctionSwitches.Count; j++ ) - { - if( m_allFunctionSwitches[ j ].UniqueId == optionId ) - { - m_allFunctionSwitches[ j ].SetCurrentSelectedInput( optionValue, m_allFunctionSwitches[ j ].GetCurrentSelectedInput() ); - break; - } - } - } - } - - ContainerGraph.ParentWindow.CustomGraph = cachedGraph; - - m_portsChanged = true; - } - - void InputPortSwitchRestriction( WirePort port ) - { - switch( port.DataType ) - { - case WirePortDataType.OBJECT: - break; - case WirePortDataType.FLOAT: - case WirePortDataType.FLOAT2: - case WirePortDataType.FLOAT3: - case WirePortDataType.FLOAT4: - case WirePortDataType.COLOR: - case WirePortDataType.INT: - { - port.CreatePortRestrictions( WirePortDataType.FLOAT, WirePortDataType.FLOAT2, WirePortDataType.FLOAT3, WirePortDataType.FLOAT4, WirePortDataType.COLOR, WirePortDataType.INT, WirePortDataType.OBJECT ); - } - break; - case WirePortDataType.FLOAT3x3: - case WirePortDataType.FLOAT4x4: - { - port.CreatePortRestrictions( WirePortDataType.FLOAT3x3, WirePortDataType.FLOAT4x4, WirePortDataType.OBJECT ); - } - break; - case WirePortDataType.SAMPLER1D: - case WirePortDataType.SAMPLER2D: - case WirePortDataType.SAMPLER3D: - case WirePortDataType.SAMPLERCUBE: - { - port.CreatePortRestrictions( WirePortDataType.SAMPLER1D, WirePortDataType.SAMPLER2D, WirePortDataType.SAMPLER3D, WirePortDataType.SAMPLERCUBE, WirePortDataType.OBJECT ); - } - break; - default: - break; - } - } - - void OutputPortSwitchRestriction( WirePort port ) - { - switch( port.DataType ) - { - case WirePortDataType.OBJECT: - break; - case WirePortDataType.FLOAT: - case WirePortDataType.FLOAT2: - case WirePortDataType.FLOAT3: - case WirePortDataType.FLOAT4: - case WirePortDataType.COLOR: - case WirePortDataType.INT: - case WirePortDataType.FLOAT3x3: - case WirePortDataType.FLOAT4x4: - { - port.AddPortForbiddenTypes( WirePortDataType.SAMPLER1D, WirePortDataType.SAMPLER2D, WirePortDataType.SAMPLER3D, WirePortDataType.SAMPLERCUBE ); - } - break; - case WirePortDataType.SAMPLER1D: - case WirePortDataType.SAMPLER2D: - case WirePortDataType.SAMPLER3D: - case WirePortDataType.SAMPLERCUBE: - { - port.CreatePortRestrictions( WirePortDataType.SAMPLER1D, WirePortDataType.SAMPLER2D, WirePortDataType.SAMPLER3D, WirePortDataType.SAMPLERCUBE, WirePortDataType.OBJECT ); - } - break; - default: - break; - } - } - - public override void PropagateNodeData( NodeData nodeData, ref MasterNodeDataCollector dataCollector ) - { - ParentGraph cachedGraph = ContainerGraph.ParentWindow.CustomGraph; - m_outsideGraph = cachedGraph; - ContainerGraph.ParentWindow.CustomGraph = m_functionGraph; - - for( int i = 0; i < m_allFunctionOutputs.Count; i++ ) - { - m_allFunctionOutputs[ i ].PropagateNodeData( nodeData, ref dataCollector ); - } - - ContainerGraph.ParentWindow.CustomGraph = cachedGraph; - - base.PropagateNodeData( nodeData, ref dataCollector ); - } - - protected override void OnUniqueIDAssigned() - { - base.OnUniqueIDAssigned(); - UIUtils.RegisterFunctionNode( this ); - } - - public override void SetupFromCastObject( UnityEngine.Object obj ) - { - base.SetupFromCastObject( obj ); - AmplifyShaderFunction function = obj as AmplifyShaderFunction; - CommonInit( function, UniqueId ); - RefreshExternalReferences(); - } - - public override void OnInputPortConnected( int portId, int otherNodeId, int otherPortId, bool activateNode = true ) - { - base.OnInputPortConnected( portId, otherNodeId, otherPortId, activateNode ); - FunctionInput functionInput = m_refreshIdsRequired ? m_allFunctionInputs[ portId ] : GetFunctionInputByUniqueId( portId ); - functionInput.PreviewIsDirty = true; - if( functionInput.AutoCast ) - { - InputPort inputPort = m_refreshIdsRequired ? m_inputPorts[ portId ] : GetInputPortByUniqueId( portId ); - inputPort.MatchPortToConnection(); - - ParentGraph cachedGraph = ContainerGraph.ParentWindow.CustomGraph; - ContainerGraph.ParentWindow.CustomGraph = m_functionGraph; - functionInput.ChangeOutputType( inputPort.DataType, false ); - ContainerGraph.ParentWindow.CustomGraph = cachedGraph; - } - - for( int i = 0; i < m_allFunctionOutputs.Count; i++ ) - { - m_outputPorts[ i ].ChangeType( m_allFunctionOutputs[ i ].InputPorts[ 0 ].DataType, false ); - } - } - - public override void OnInputPortDisconnected( int portId ) - { - base.OnInputPortDisconnected( portId ); - - FunctionInput functionInput = m_refreshIdsRequired ? m_allFunctionInputs[ portId ] : GetFunctionInputByUniqueId( portId ); - functionInput.PreviewIsDirty = true; - } - - public override void OnConnectedOutputNodeChanges( int inputPortId, int otherNodeId, int otherPortId, string name, WirePortDataType type ) - { - base.OnConnectedOutputNodeChanges( inputPortId, otherNodeId, otherPortId, name, type ); - FunctionInput functionInput = m_refreshIdsRequired ? m_allFunctionInputs[ inputPortId ] : GetFunctionInputByUniqueId( inputPortId ); - functionInput.PreviewIsDirty = true; - if( functionInput.AutoCast ) - { - InputPort inputPort = m_refreshIdsRequired ? m_inputPorts[ inputPortId ] : GetInputPortByUniqueId( inputPortId ); - inputPort.MatchPortToConnection(); - - ParentGraph cachedGraph = ContainerGraph.ParentWindow.CustomGraph; - ContainerGraph.ParentWindow.CustomGraph = m_functionGraph; - functionInput.ChangeOutputType( inputPort.DataType, false ); - ContainerGraph.ParentWindow.CustomGraph = cachedGraph; - } - - for( int i = 0; i < m_allFunctionOutputs.Count; i++ ) - { - m_outputPorts[ i ].ChangeType( m_allFunctionOutputs[ i ].InputPorts[ 0 ].DataType, false ); - } - } - - public override void DrawProperties() - { - base.DrawProperties(); - - if( Function == null ) - return; - - if( Function.Description.Length > 0 || m_allFunctionSwitches.Count > 0 ) - NodeUtils.DrawPropertyGroup( ref m_parametersFoldout, "Parameters", DrawDescription ); - - bool drawInternalDataUI = false; - int inputCount = m_inputPorts.Count; - if( inputCount > 0 ) - { - for( int i = 0; i < inputCount; i++ ) - { - if( m_inputPorts[ i ].Available && m_inputPorts[ i ].ValidInternalData && !m_inputPorts[ i ].IsConnected && m_inputPorts[ i ].AutoDrawInternalData /*&& ( m_inputPorts[ i ].AutoDrawInternalData || ( m_autoDrawInternalPortData && m_useInternalPortData ) )*/ /*&& m_inputPorts[ i ].AutoDrawInternalData*/ ) - { - drawInternalDataUI = true; - break; - } - } - } - - if( drawInternalDataUI ) - NodeUtils.DrawPropertyGroup( ref m_internalDataFoldout, Constants.InternalDataLabelStr, () => - { - for( int i = 0; i < m_inputPorts.Count; i++ ) - { - if( m_inputPorts[ i ].ValidInternalData && !m_inputPorts[ i ].IsConnected && m_inputPorts[ i ].Visible && m_inputPorts[ i ].AutoDrawInternalData ) - { - EditorGUI.BeginChangeCheck(); - m_inputPorts[ i ].ShowInternalData( this ); - if( EditorGUI.EndChangeCheck() ) - { - m_allFunctionInputs[ i ].PreviewIsDirty = true; - } - } - } - } ); - } - - private void DrawDescription() - { - if( Function.Description.Length > 0 ) - EditorGUILayout.HelpBox( Function.Description, MessageType.Info ); - - ParentGraph cachedGraph = ContainerGraph.ParentWindow.CustomGraph; - ContainerGraph.ParentWindow.CustomGraph = m_functionGraph; - for( int i = 0; i < m_allFunctionSwitches.Count; i++ ) - { - m_allFunctionSwitches[ i ].AsDrawn = false; - } - - for( int i = 0; i < m_allFunctionSwitches.Count; i++ ) - { - if( m_allFunctionSwitches[ i ].DrawOption( this ) ) - { - m_portsChanged = true; - } - } - ContainerGraph.ParentWindow.CustomGraph = cachedGraph; - } - - private void RemoveShaderFunctionDirectivesInternal( int lod ) - { - List<TemplateMultiPassMasterNode> nodes = ContainerGraph.ParentWindow.OutsideGraph.GetMultiPassMasterNodes( lod ); - int count = nodes.Count; - for( int i = 0; i < count; i++ ) - { - nodes[ i ].PassModule.AdditionalDirectives.RemoveShaderFunctionItems( OutputId ); - } - } - - public override void Destroy() - { - m_mainPreviewNode = null; - base.Destroy(); - - m_duplicatesBuffer.Clear(); - m_duplicatesBuffer = null; - - if( m_functionGraph != null && ContainerGraph.ParentWindow.CurrentGraph != m_functionGraph ) - ContainerGraph.ParentWindow.CurrentGraph.InstancePropertyCount -= m_functionGraph.InstancePropertyCount; - - if( ContainerGraph.ParentWindow.OutsideGraph.CurrentStandardSurface != null ) - { - //for( int i = 0; i < m_includes.Count; i++ ) - //{ - // //if( ContainerGraph.ParentWindow.OutsideGraph.CurrentStandardSurface.AdditionalIncludes.OutsideList.Contains( m_includes[ i ] ) ) - // //{ - // // ContainerGraph.ParentWindow.OutsideGraph.CurrentStandardSurface.AdditionalIncludes.OutsideList.Remove( m_includes[ i ] ); - // //} - // ContainerGraph.ParentWindow.OutsideGraph.CurrentStandardSurface.AdditionalDirectives.RemoveShaderFunctionItem( AdditionalLineType.Include, m_includes[ i ] ); - //} - - //for( int i = 0; i < m_pragmas.Count; i++ ) - //{ - // //if( ContainerGraph.ParentWindow.OutsideGraph.CurrentStandardSurface.AdditionalPragmas.OutsideList.Contains( m_pragmas[ i ] ) ) - // //{ - // // ContainerGraph.ParentWindow.OutsideGraph.CurrentStandardSurface.AdditionalPragmas.OutsideList.Remove( m_pragmas[ i ] ); - // //} - // ContainerGraph.ParentWindow.OutsideGraph.CurrentStandardSurface.AdditionalDirectives.RemoveShaderFunctionItem( AdditionalLineType.Pragma, m_pragmas[ i ] ); - //} - ContainerGraph.ParentWindow.OutsideGraph.CurrentStandardSurface.AdditionalDirectives.RemoveShaderFunctionItems( OutputId/*, m_directives */); - } - else - { - if( ContainerGraph.ParentWindow.OutsideGraph.MultiPassMasterNodes.Count > 0 ) - { - for( int lod = -1; lod < ContainerGraph.ParentWindow.OutsideGraph.LodMultiPassMasternodes.Count; lod++ ) - { - RemoveShaderFunctionDirectivesInternal( lod ); - } - } - } - - - - - // Cannot GameObject.Destroy(m_directives[i]) since we would be removing them from - // the shader function asset itself - - m_directives.Clear(); - m_directives = null; - - if( m_reordenator != null ) - { - ParentGraph cachedGraph = ContainerGraph.ParentWindow.CustomGraph; - ContainerGraph.ParentWindow.CustomGraph = null; - UIUtils.UnregisterPropertyNode( m_reordenator ); - ContainerGraph.ParentWindow.CustomGraph = cachedGraph; - - m_reordenator.Destroy(); - m_reordenator = null; - } - - UIUtils.UnregisterFunctionNode( this ); - - ParentGraph cachedGraph2 = ContainerGraph.ParentWindow.CustomGraph; - ContainerGraph.ParentWindow.CustomGraph = m_functionGraph; - - if( m_allFunctionInputs != null ) - m_allFunctionInputs.Clear(); - m_allFunctionInputs = null; - - if( m_allFunctionOutputs != null ) - m_allFunctionOutputs.Clear(); - m_allFunctionOutputs = null; - - if( m_functionGraph != null ) - m_functionGraph.SoftDestroy(); - m_functionGraph = null; - - ContainerGraph.ParentWindow.CustomGraph = cachedGraph2; - m_function = null; - - m_allFunctionOutputsDict.Clear(); - m_allFunctionOutputsDict = null; - - m_allFunctionSwitchesDict.Clear(); - m_allFunctionSwitchesDict = null; - - m_allFunctionInputsDict.Clear(); - m_allFunctionInputsDict = null; - - UIUtils.CurrentWindow.OutsideGraph.OnLODMasterNodesAddedEvent -= OnLODMasterNodesAddedEvent; - } - - public override void OnNodeLogicUpdate( DrawInfo drawInfo ) - { - if( m_lateRefresh ) - { - m_lateRefresh = false; - RefreshExternalReferences(); - } - - CheckForChangesRecursively(); - - base.OnNodeLogicUpdate( drawInfo ); - ParentGraph cachedGraph = ContainerGraph.ParentWindow.CustomGraph; - ContainerGraph.ParentWindow.CustomGraph = m_functionGraph; - - if( m_functionGraph != null ) - { - int nodeCount = m_functionGraph.AllNodes.Count; - for( int i = 0; i < nodeCount; i++ ) - { - m_functionGraph.AllNodes[ i ].OnNodeLogicUpdate( drawInfo ); - } - - if( !string.IsNullOrEmpty( FunctionGraph.CurrentFunctionOutput.SubTitle ) ) - { - SetAdditonalTitleText( FunctionGraph.CurrentFunctionOutput.SubTitle ); - } - } - - ContainerGraph.ParentWindow.CustomGraph = cachedGraph; - if( m_portsChanged ) - { - m_portsChanged = false; - for( int i = 0; i < m_allFunctionOutputs.Count; i++ ) - { - m_outputPorts[ i ].ChangeType( m_allFunctionOutputs[ i ].InputPorts[ 0 ].DataType, false ); - } - - CheckPortVisibility(); - } - } - - public override void Draw( DrawInfo drawInfo ) - { - //CheckForChangesRecursively(); - - if( !m_initialGraphDraw && drawInfo.CurrentEventType == EventType.Repaint ) - { - m_initialGraphDraw = true; - ParentGraph cachedGraph = ContainerGraph.ParentWindow.CustomGraph; - ContainerGraph.ParentWindow.CustomGraph = m_functionGraph; - if( m_functionGraph != null ) - { - for( int i = 0; i < m_functionGraph.AllNodes.Count; i++ ) - { - ParentNode node = m_functionGraph.AllNodes[ i ]; - if( node != null ) - { - node.OnNodeLayout( drawInfo ); - } - } - } - ContainerGraph.ParentWindow.CustomGraph = cachedGraph; - } - - base.Draw( drawInfo ); - } - - public bool CheckForChanges( bool forceCheck = false, bool forceChange = false ) - { - if( ( ContainerGraph.ParentWindow.CheckFunctions || forceCheck || forceChange ) && m_function != null ) - { - //string newCheckSum = LastLine( m_function.FunctionInfo ); - string newCheckSum = AssetDatabase.GetAssetDependencyHash( AssetDatabase.GetAssetPath( m_function ) ).ToString(); - if( !m_functionCheckSum.Equals( newCheckSum ) || forceChange ) - { - m_functionCheckSum = newCheckSum; - ContainerGraph.OnDuplicateEvent += DuplicateMe; - return true; - } - } - return false; - } - - public bool CheckForChangesRecursively() - { - if( m_functionGraph == null ) - return false; - - bool result = false; - for( int i = 0; i < m_functionGraph.FunctionNodes.NodesList.Count; i++ ) - { - if( m_functionGraph.FunctionNodes.NodesList[ i ].CheckForChangesRecursively() ) - result = true; - } - if( CheckForChanges( false, result ) ) - result = true; - - return result; - } - - public void DuplicateMe() - { - bool previewOpen = m_showPreview; - - string allOptions = m_allFunctionSwitches.Count.ToString(); - for( int i = 0; i < m_allFunctionSwitches.Count; i++ ) - { - allOptions += "," + m_allFunctionSwitches[ i ].UniqueId + "," + m_allFunctionSwitches[ i ].GetCurrentSelectedInput(); - } - - ReadOptionsHelper = allOptions.Split( ',' ); - - ParentGraph cachedGraph = ContainerGraph.ParentWindow.CustomGraph; - ContainerGraph.ParentWindow.CustomGraph = null; - MasterNode masterNode = ContainerGraph.ParentWindow.CurrentGraph.CurrentMasterNode; - if( masterNode != null ) - masterNode.InvalidateMaterialPropertyCount(); - - ContainerGraph.ParentWindow.CustomGraph = cachedGraph; - - ParentNode newNode = ContainerGraph.CreateNode( m_function, false, Vec2Position ); - newNode.ShowPreview = previewOpen; - ( newNode as FunctionNode ).ReadOptionsHelper = ReadOptionsHelper; - newNode.RefreshExternalReferences(); - if( ( newNode as FunctionNode ).m_reordenator && m_reordenator ) - ( newNode as FunctionNode ).m_reordenator.OrderIndex = m_reordenator.OrderIndex; - - for( int i = 0; i < m_outputPorts.Count; i++ ) - { - if( m_outputPorts[ i ].IsConnected ) - { - OutputPort newOutputPort = newNode.GetOutputPortByUniqueId( m_outputPorts[ i ].PortId ); - if( newNode.OutputPorts != null && newOutputPort != null ) - { - for( int j = m_outputPorts[ i ].ExternalReferences.Count - 1; j >= 0; j-- ) - { - ContainerGraph.CreateConnection( m_outputPorts[ i ].ExternalReferences[ j ].NodeId, m_outputPorts[ i ].ExternalReferences[ j ].PortId, newOutputPort.NodeId, newOutputPort.PortId ); - } - } - } - //else - //{ - //if( newNode.OutputPorts != null && newNode.OutputPorts[ i ] != null ) - //{ - // ContainerGraph.DeleteConnection( false, newNode.UniqueId, newNode.OutputPorts[ i ].PortId, false, false, false ); - //} - //} - } - - for( int i = 0; i < m_inputPorts.Count; i++ ) - { - if( m_inputPorts[ i ].IsConnected ) - { - InputPort newInputPort = newNode.GetInputPortByUniqueId( m_inputPorts[ i ].PortId ); - if( newNode.InputPorts != null && newInputPort != null ) - { - ContainerGraph.CreateConnection( newInputPort.NodeId, newInputPort.PortId, m_inputPorts[ i ].ExternalReferences[ 0 ].NodeId, m_inputPorts[ i ].ExternalReferences[ 0 ].PortId ); - } - } - } - - ContainerGraph.OnDuplicateEvent -= DuplicateMe; - - if( Selected ) - { - ContainerGraph.DeselectNode( this ); - ContainerGraph.SelectNode( newNode, true, false ); - } - - ContainerGraph.DestroyNode( this, false ); - } - - private FunctionOutput GetFunctionOutputByUniqueId( int uniqueId ) - { - int listCount = m_allFunctionOutputs.Count; - if( m_allFunctionOutputsDict.Count != m_allFunctionOutputs.Count ) - { - m_allFunctionOutputsDict.Clear(); - for( int i = 0; i < listCount; i++ ) - { - m_allFunctionOutputsDict.Add( m_allFunctionOutputs[ i ].UniqueId, m_allFunctionOutputs[ i ] ); - } - } - - if( m_allFunctionOutputsDict.ContainsKey( uniqueId ) ) - return m_allFunctionOutputsDict[ uniqueId ]; - - return null; - } - - private FunctionInput GetFunctionInputByUniqueId( int uniqueId ) - { - int listCount = m_allFunctionInputs.Count; - if( m_allFunctionInputsDict.Count != m_allFunctionInputs.Count ) - { - m_allFunctionInputsDict.Clear(); - for( int i = 0; i < listCount; i++ ) - { - m_allFunctionInputsDict.Add( m_allFunctionInputs[ i ].UniqueId, m_allFunctionInputs[ i ] ); - } - } - - if( m_allFunctionInputsDict.ContainsKey( uniqueId ) ) - return m_allFunctionInputsDict[ uniqueId ]; - - return null; - } - - public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar ) - { - OutputPort outputPort = GetOutputPortByUniqueId( outputId ); - FunctionOutput functionOutput = GetFunctionOutputByUniqueId( outputId ); - - if( outputPort.IsLocalValue( dataCollector.PortCategory ) ) - return outputPort.LocalValue( dataCollector.PortCategory ); - - m_functionGraph.CurrentPrecision = ContainerGraph.ParentWindow.CurrentGraph.CurrentPrecision; - ParentGraph cachedGraph = ContainerGraph.ParentWindow.CustomGraph; - m_outsideGraph = cachedGraph; - ContainerGraph.ParentWindow.CustomGraph = m_functionGraph; -#if ADD_SHADER_FUNCTION_HEADERS - if( m_reordenator != null && m_reordenator.RecursiveCount() > 0 && m_reordenator.HasTitle ) - { - dataCollector.AddToProperties( UniqueId, "[Header(" + m_reordenator.HeaderTitle.Replace( "-", " " ) + ")]", m_reordenator.OrderIndex ); - } -#endif - string result = string.Empty; - for( int i = 0; i < m_allFunctionInputs.Count; i++ ) - { - if( !m_allFunctionInputs[ i ].InputPorts[ 0 ].IsConnected || m_inputPorts[ i ].IsConnected ) - m_allFunctionInputs[ i ].OnPortGeneration += FunctionNodeOnPortGeneration; - } - - result += functionOutput.GenerateShaderForOutput( outputId, ref dataCollector, ignoreLocalvar ); - - for( int i = 0; i < m_allFunctionInputs.Count; i++ ) - { - if( !m_allFunctionInputs[ i ].InputPorts[ 0 ].IsConnected || m_inputPorts[ i ].IsConnected ) - m_allFunctionInputs[ i ].OnPortGeneration -= FunctionNodeOnPortGeneration; - } - - ContainerGraph.ParentWindow.CustomGraph = cachedGraph; - - if( outputPort.ConnectionCount > 1 ) - RegisterLocalVariable( outputId, result, ref dataCollector ); - else - outputPort.SetLocalValue( result, dataCollector.PortCategory ); - - return outputPort.LocalValue( dataCollector.PortCategory ); - } - - private string FunctionNodeOnPortGeneration( ref MasterNodeDataCollector dataCollector, int index, ParentGraph graph ) - { - ParentGraph cachedGraph = ContainerGraph.ParentWindow.CustomGraph; - ContainerGraph.ParentWindow.CustomGraph = m_outsideGraph; - string result = m_inputPorts[ index ].GeneratePortInstructions( ref dataCollector ); - ContainerGraph.ParentWindow.CustomGraph = cachedGraph; - return result; - } - - public override void WriteToString( ref string nodeInfo, ref string connectionsInfo ) - { - base.WriteToString( ref nodeInfo, ref connectionsInfo ); - - if( Function != null ) - IOUtils.AddFieldValueToString( ref nodeInfo, m_function.name ); - else - IOUtils.AddFieldValueToString( ref nodeInfo, m_filename ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_reordenator != null ? m_reordenator.RawOrderIndex : -1 ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_headerTitle ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_functionGraphId ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_functionGUID ); - - int functionSwitchCount = m_allFunctionSwitches != null ? m_allFunctionSwitches.Count : 0; - string allOptions = functionSwitchCount.ToString(); - for( int i = 0; i < functionSwitchCount; i++ ) - { - allOptions += "," + m_allFunctionSwitches[ i ].UniqueId + "," + m_allFunctionSwitches[ i ].GetCurrentSelectedInput(); - } - IOUtils.AddFieldValueToString( ref nodeInfo, allOptions ); - } - - public override void ReadFromString( ref string[] nodeParams ) - { - base.ReadFromString( ref nodeParams ); - m_filename = GetCurrentParam( ref nodeParams ); - m_orderIndex = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - m_headerTitle = GetCurrentParam( ref nodeParams ); - - if( UIUtils.CurrentShaderVersion() > 7203 ) - { - m_functionGraphId = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - } - - if( UIUtils.CurrentShaderVersion() > 13704 ) - { - m_functionGUID = GetCurrentParam( ref nodeParams ); - } - - AmplifyShaderFunction loaded = AssetDatabase.LoadAssetAtPath<AmplifyShaderFunction>( AssetDatabase.GUIDToAssetPath( m_functionGUID ) ); - if( loaded != null ) - { - CommonInit( loaded, UniqueId ); - } - else - { - string[] guids = AssetDatabase.FindAssets( "t:AmplifyShaderFunction " + m_filename ); - if( guids.Length > 0 ) - { - string sfGuid = null; - - foreach( string guid in guids ) - { - string assetPath = AssetDatabase.GUIDToAssetPath( guid ); - string name = System.IO.Path.GetFileNameWithoutExtension( assetPath ); - if( name.Equals( m_filename, StringComparison.OrdinalIgnoreCase ) ) - { - sfGuid = guid; - break; - } - } - loaded = AssetDatabase.LoadAssetAtPath<AmplifyShaderFunction>( AssetDatabase.GUIDToAssetPath( sfGuid ) ); - - if( loaded != null ) - { - CommonInit( loaded, UniqueId ); - } - else - { - SetTitleText( "ERROR" ); - UIUtils.ShowMessage( UniqueId, string.Format( "Error loading {0} shader function from project folder", m_filename ), MessageSeverity.Error ); - } - } - else - { - SetTitleText( "Missing Function" ); - UIUtils.ShowMessage( UniqueId, string.Format( "Missing {0} shader function on project folder", m_filename ), MessageSeverity.Error ); - } - } - if( UIUtils.CurrentShaderVersion() > 14203 ) - { - ReadOptionsHelper = GetCurrentParam( ref nodeParams ).Split( ',' ); - } - } - - public override void ReadOutputDataFromString( ref string[] nodeParams ) - { - if( Function == null ) - return; - - base.ReadOutputDataFromString( ref nodeParams ); - - ConfigureInputportsAfterRead(); - } - - public override void OnNodeDoubleClicked( Vector2 currentMousePos2D ) - { - if( Function == null ) - return; - - ContainerGraph.DeSelectAll(); - this.Selected = true; - - ContainerGraph.ParentWindow.OnLeftMouseUp(); - AmplifyShaderEditorWindow.LoadShaderFunctionToASE( Function, true ); - this.Selected = false; - } - - private void ConfigureInputportsAfterRead() - { - if( InputPorts != null ) - { - int inputCount = InputPorts.Count; - for( int i = 0; i < inputCount; i++ ) - { - InputPorts[ i ].ChangeProperties( m_allFunctionInputs[ i ].InputName, m_allFunctionInputs[ i ].SelectedInputType, false ); - } - } - - if( OutputPorts != null ) - { - int outputCount = OutputPorts.Count; - for( int i = 0; i < outputCount; i++ ) - { - OutputPorts[ i ].ChangeProperties( m_allFunctionOutputs[ i ].OutputName, m_allFunctionOutputs[ i ].AutoOutputType, false ); - } - } - } - - private void CheckPortVisibility() - { - bool changes = false; - if( InputPorts != null ) - { - for( int i = 0; i < m_allFunctionInputs.Count; i++ ) - { - if( m_inputPorts[ i ].Visible != m_allFunctionInputs[ i ].IsConnected ) - { - m_inputPorts[ i ].Visible = m_allFunctionInputs[ i ].IsConnected; - changes = true; - } - } - } - - if( changes ) - m_sizeIsDirty = true; - } - - public bool HasProperties { get { return m_reordenator != null; } } - - public ParentGraph FunctionGraph - { - get { return m_functionGraph; } - set { m_functionGraph = value; } - } - - public AmplifyShaderFunction Function - { - get { return m_function; } - set { m_function = value; } - } - - public override void RecordObjectOnDestroy( string Id ) - { - base.RecordObjectOnDestroy( Id ); - if( m_reordenator != null ) - m_reordenator.RecordObject( Id ); - - if( m_functionGraph != null ) - { - Undo.RegisterCompleteObjectUndo( m_functionGraph, Id ); - for( int i = 0; i < m_functionGraph.AllNodes.Count; i++ ) - { - m_functionGraph.AllNodes[ i ].RecordObject( Id ); - } - } - } - - public override void SetContainerGraph( ParentGraph newgraph ) - { - base.SetContainerGraph( newgraph ); - if( m_functionGraph == null ) - return; - for( int i = 0; i < m_functionGraph.AllNodes.Count; i++ ) - { - m_functionGraph.AllNodes[ i ].SetContainerGraph( m_functionGraph ); - } - } - - public override void OnMasterNodeReplaced( MasterNode newMasterNode ) - { - base.OnMasterNodeReplaced( newMasterNode ); - if( m_functionGraph == null ) - return; - - m_functionGraph.FireMasterNodeReplacedEvent( newMasterNode ); - - StandardSurfaceOutputNode surface = newMasterNode as StandardSurfaceOutputNode; - if( surface != null ) - { - surface.AdditionalDirectives.AddShaderFunctionItems( OutputId, Function.AdditionalDirectives.DirectivesList ); - } - else - { - if( ContainerGraph.ParentWindow.OutsideGraph.MultiPassMasterNodes.Count > 0 ) - { - for( int lod = -1; lod < ContainerGraph.ParentWindow.OutsideGraph.LodMultiPassMasternodes.Count; lod++ ) - { - AddShaderFunctionDirectivesInternal( lod ); - } - } - } - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionNode.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionNode.cs.meta deleted file mode 100644 index 15ea8d35..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionNode.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 7b3de46feda5b0f4ea58c852c4a521a9 -timeCreated: 1492001141 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionOutput.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionOutput.cs deleted file mode 100644 index baa49631..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionOutput.cs +++ /dev/null @@ -1,318 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using UnityEngine; -using UnityEditor; -using System.Collections.Generic; -using System; - -namespace AmplifyShaderEditor -{ - [Serializable] - [NodeAttributes( "Function Output", "Functions", "Function Output adds an output port to the shader function, it's port type is determined automatically.", NodeAvailabilityFlags = (int)NodeAvailability.ShaderFunction )] - public sealed class FunctionOutput : OutputNode - { - public FunctionOutput() : base() { CommonInit(); } - public FunctionOutput( int uniqueId, float x, float y, float width, float height ) : base( uniqueId, x, y, width, height ) { CommonInit(); } - - [SerializeField] - private bool m_previewNode = false; - - [SerializeField] - private string m_outputName = "Output"; - - [SerializeField] - private int m_orderIndex = -1; - - [SerializeField] - private AmplifyShaderFunction m_function; - - //Title editing - [SerializeField] - private string m_uniqueName; - - private bool m_isEditing; - private bool m_stopEditing; - private bool m_startEditing; - private double m_clickTime; - private double m_doubleClickTime = 0.3; - private Rect m_titleClickArea; - private bool m_showTitleWhenNotEditing = true; - - [SerializeField] - private string m_subTitle = string.Empty; - - - void CommonInit() - { - m_isMainOutputNode = false; - m_connStatus = NodeConnectionStatus.Connected; - m_activeType = GetType(); - m_currentPrecisionType = PrecisionType.Inherit; - m_textLabelWidth = 100; - m_autoWrapProperties = true; - AddInputPort( WirePortDataType.FLOAT, false, " " ); - AddOutputPort( WirePortDataType.FLOAT, " " ); - m_outputPorts[ 0 ].Visible = false; - SetTitleText( m_outputName ); - m_previewShaderGUID = "e6d5f64114b18e24f99dc65290c0fe98"; - } - - public override void SetupNodeCategories() - { - //base.SetupNodeCategories(); - ContainerGraph.ResetNodesData(); - MasterNode masterNode = ContainerGraph.ParentWindow.CurrentGraph.CurrentMasterNode; - if( masterNode != null ) - { - int count = m_inputPorts.Count; - for( int i = 0; i < count; i++ ) - { - if( m_inputPorts[ i ].IsConnected ) - { - NodeData nodeData = new NodeData( m_inputPorts[ i ].Category ); - ParentNode node = m_inputPorts[ i ].GetOutputNode(); - MasterNodeDataCollector temp = masterNode.CurrentDataCollector; - node.PropagateNodeData( nodeData, ref temp ); - temp = null; - } - } - } - } - - protected override void OnUniqueIDAssigned() - { - base.OnUniqueIDAssigned(); - UIUtils.RegisterFunctionOutputNode( this ); - if( m_nodeAttribs != null ) - m_uniqueName = m_nodeAttribs.Name + UniqueId; - } - - - public override void Destroy() - { - base.Destroy(); - UIUtils.UnregisterFunctionOutputNode( this ); - } - - public override void OnInputPortConnected( int portId, int otherNodeId, int otherPortId, bool activateNode = true ) - { - base.OnInputPortConnected( portId, otherNodeId, otherPortId, activateNode ); - m_inputPorts[ 0 ].MatchPortToConnection(); - m_outputPorts[ 0 ].ChangeType( m_inputPorts[ 0 ].DataType, false ); - } - - public override void OnConnectedOutputNodeChanges( int outputPortId, int otherNodeId, int otherPortId, string name, WirePortDataType type ) - { - base.OnConnectedOutputNodeChanges( outputPortId, otherNodeId, otherPortId, name, type ); - m_inputPorts[ 0 ].MatchPortToConnection(); - m_outputPorts[ 0 ].ChangeType( m_inputPorts[ 0 ].DataType, false ); - } - - public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar ) - { - return m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector ); - } - - public override void DrawProperties() - { - base.DrawProperties(); - EditorGUI.BeginChangeCheck(); - m_outputName = EditorGUILayoutTextField( "Name", m_outputName ); - - if( EditorGUI.EndChangeCheck() ) - { - SetTitleText( m_outputName ); - UIUtils.UpdateFunctionOutputData( UniqueId, m_outputName ); - } - - EditorGUI.BeginDisabledGroup( m_previewNode ); - if( GUILayout.Button( "Set as Preview" ) ) - { - List<FunctionOutput> allOutputs = UIUtils.FunctionOutputList(); - - foreach( FunctionOutput item in allOutputs ) - item.PreviewNode = false; - - m_previewNode = true; - } - EditorGUI.EndDisabledGroup(); - } - [SerializeField] - private string m_currentTitle = string.Empty; - - public override void Draw( DrawInfo drawInfo ) - { - base.Draw( drawInfo ); - if( m_previewNode ) - m_currentTitle = "Preview"; - else - m_currentTitle = string.Empty; - - SetAdditonalTitleTextOnCallback( m_currentTitle, ( instance, newSubTitle ) => instance.AdditonalTitleContent.text = newSubTitle ); - - if( ContainerGraph.LodLevel <= ParentGraph.NodeLOD.LOD3 ) - { - if( !m_isEditing && ( ( !ContainerGraph.ParentWindow.MouseInteracted && drawInfo.CurrentEventType == EventType.MouseDown && m_titleClickArea.Contains( drawInfo.MousePosition ) ) ) ) - { - if( ( EditorApplication.timeSinceStartup - m_clickTime ) < m_doubleClickTime ) - m_startEditing = true; - else - GUI.FocusControl( null ); - m_clickTime = EditorApplication.timeSinceStartup; - } - else if( m_isEditing && ( ( drawInfo.CurrentEventType == EventType.MouseDown && !m_titleClickArea.Contains( drawInfo.MousePosition ) ) || !EditorGUIUtility.editingTextField ) ) - { - m_stopEditing = true; - } - - if( m_isEditing || m_startEditing ) - { - EditorGUI.BeginChangeCheck(); - GUI.SetNextControlName( m_uniqueName ); - m_outputName = EditorGUITextField( m_titleClickArea, string.Empty, m_outputName, UIUtils.GetCustomStyle( CustomStyle.NodeTitle ) ); - if( EditorGUI.EndChangeCheck() ) - { - SetTitleText( m_outputName ); - UIUtils.UpdateFunctionInputData( UniqueId, m_outputName ); - } - - if( m_startEditing ) - EditorGUI.FocusTextInControl( m_uniqueName ); - - } - - if( drawInfo.CurrentEventType == EventType.Repaint ) - { - if( m_startEditing ) - { - m_startEditing = false; - m_isEditing = true; - } - - if( m_stopEditing ) - { - m_stopEditing = false; - m_isEditing = false; - GUI.FocusControl( null ); - } - } - } - } - - public override void OnNodeLayout( DrawInfo drawInfo ) - { - // RUN LAYOUT CHANGES AFTER TITLES CHANGE - base.OnNodeLayout( drawInfo ); - m_titleClickArea = m_titlePos; - m_titleClickArea.height = Constants.NODE_HEADER_HEIGHT; - } - - public override void OnNodeRepaint( DrawInfo drawInfo ) - { - base.OnNodeRepaint( drawInfo ); - - if( !m_isVisible ) - return; - - // Fixed Title ( only renders when not editing ) - if( m_showTitleWhenNotEditing && !m_isEditing && !m_startEditing && ContainerGraph.LodLevel <= ParentGraph.NodeLOD.LOD3 ) - { - GUI.Label( m_titleClickArea, m_content, UIUtils.GetCustomStyle( CustomStyle.NodeTitle ) ); - } - } - - public override void OnNodeDoubleClicked( Vector2 currentMousePos2D ) - { - if( currentMousePos2D.y - m_globalPosition.y > ( Constants.NODE_HEADER_HEIGHT + Constants.NODE_HEADER_EXTRA_HEIGHT ) * ContainerGraph.ParentWindow.CameraDrawInfo.InvertedZoom ) - { - ContainerGraph.ParentWindow.ParametersWindow.IsMaximized = !ContainerGraph.ParentWindow.ParametersWindow.IsMaximized; - } - } - - public WirePortDataType AutoOutputType - { - get { return m_inputPorts[ 0 ].DataType; } - } - - public override void WriteToString( ref string nodeInfo, ref string connectionsInfo ) - { - base.WriteToString( ref nodeInfo, ref connectionsInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_outputName ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_orderIndex ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_previewNode ); - } - - public override void ReadFromString( ref string[] nodeParams ) - { - base.ReadFromString( ref nodeParams ); - m_outputName = GetCurrentParam( ref nodeParams ); - m_orderIndex = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - - if( UIUtils.CurrentShaderVersion() > 13706 ) - m_previewNode = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) ); - - if( IsNodeBeingCopied ) - PreviewNode = false; - - if( m_function == null ) - m_function = UIUtils.CurrentWindow.OpenedShaderFunction; - - if( m_isMainOutputNode && m_function != null ) - { - m_function.UpdateDirectivesList(); - } - - SetTitleText( m_outputName ); - UIUtils.UpdateFunctionOutputData( UniqueId, m_outputName ); - } - - public AmplifyShaderFunction Function - { - get { return m_function; } - set - { - m_function = value; - if( m_isMainOutputNode && m_function != null ) - { - m_function.UpdateDirectivesList(); - } - } - } - - public string OutputName - { - get { return m_outputName; } - } - - public int OrderIndex - { - get { return m_orderIndex; } - set { m_orderIndex = value; } - } - - public string SubTitle - { - get { return m_subTitle; } - set { m_subTitle = value; } - } - - public bool PreviewNode - { - get { return m_previewNode; } - set - { - m_previewNode = value; - m_sizeIsDirty = true; - if( m_previewNode ) - { - m_currentTitle = "Preview"; - } - else - { - m_currentTitle = ""; - } - } - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionOutput.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionOutput.cs.meta deleted file mode 100644 index 7ece5125..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionOutput.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 6293b1f56d13d6c4ca6a8e2a8099cca9 -timeCreated: 1491917775 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSubtitle.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSubtitle.cs deleted file mode 100644 index 42cf0b5f..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSubtitle.cs +++ /dev/null @@ -1,124 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using UnityEngine; -using UnityEditor; -using System; - -namespace AmplifyShaderEditor -{ - [Serializable] - [NodeAttributes( "Function Subtitle", "Functions", "Adds a subtitle to its shader function", NodeAvailabilityFlags = (int)NodeAvailability.ShaderFunction )] - public sealed class FunctionSubtitle : ParentNode - { - - //protected override void CommonInit( int uniqueId ) - //{ - // base.CommonInit( uniqueId ); - // AddInputPort( WirePortDataType.FLOAT, false, Constants.EmptyPortValue ); - // AddOutputPort( WirePortDataType.FLOAT, Constants.EmptyPortValue ); - // m_autoWrapProperties = true; - // m_textLabelWidth = 100; - // //SetTitleText( m_inputName ); - // //SetAdditonalTitleText( "( " + m_inputValueTypes[ m_selectedInputTypeInt ] + " )" ); - // m_previewShaderGUID = "04bc8e7b317dccb4d8da601680dd8140"; - //} - [SerializeField] - private string m_subttile = "Subtitle"; - - protected override void CommonInit( int uniqueId ) - { - base.CommonInit( uniqueId ); - AddInputPort( WirePortDataType.FLOAT, false, Constants.EmptyPortValue ); - AddOutputPort( WirePortDataType.FLOAT, Constants.EmptyPortValue ); - m_autoWrapProperties = true; - m_textLabelWidth = 100; - SetTitleText( m_subttile ); - m_previewShaderGUID = "74e4d859fbdb2c0468de3612145f4929"; - } - - public override void OnInputPortConnected( int portId, int otherNodeId, int otherPortId, bool activateNode = true ) - { - base.OnInputPortConnected( portId, otherNodeId, otherPortId, activateNode ); - m_inputPorts[ 0 ].MatchPortToConnection(); - m_outputPorts[ 0 ].ChangeType( m_inputPorts[ 0 ].DataType, false ); - } - - public override void OnConnectedOutputNodeChanges( int outputPortId, int otherNodeId, int otherPortId, string name, WirePortDataType type ) - { - base.OnConnectedOutputNodeChanges( outputPortId, otherNodeId, otherPortId, name, type ); - m_inputPorts[ 0 ].MatchPortToConnection(); - m_outputPorts[ 0 ].ChangeType( m_inputPorts[ 0 ].DataType, false ); - } - - public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar ) - { - base.GenerateShaderForOutput( outputId, ref dataCollector, ignoreLocalvar ); - return m_inputPorts[ 0 ].GenerateShaderForOutput( ref dataCollector, m_inputPorts[ 0 ].DataType, ignoreLocalvar ); - } - - //public override void PropagateNodeData( NodeData nodeData, ref MasterNodeDataCollector dataCollector ) - //{ - // base.PropagateNodeData( nodeData, ref dataCollector ); - - // //if( m_containerGraph.CurrentShaderFunction != null ) - // //m_containerGraph.CurrentShaderFunction.FunctionSubtitle = m_subttile; - //} - - public override void OnNodeLogicUpdate( DrawInfo drawInfo ) - { - base.OnNodeLogicUpdate( drawInfo ); - //public override void PropagateNodeData( NodeData nodeData, ref MasterNodeDataCollector dataCollector ) - //{ - // base.PropagateNodeData( nodeData, ref dataCollector ); - //Debug.Log( IsConnected + " " + m_containerGraph.CurrentFunctionOutput ); - if( m_containerGraph.CurrentFunctionOutput != null && IsConnected ) - m_containerGraph.CurrentFunctionOutput.SubTitle = m_subttile; - // m_containerGraph.CurrentShaderFunction.FunctionSubtitle = m_subttile; - } - - public override void DrawProperties() - { - base.DrawProperties(); - EditorGUILayout.BeginVertical(); - EditorGUI.BeginChangeCheck(); - m_subttile = EditorGUILayoutTextField( "Name", m_subttile ); - if( EditorGUI.EndChangeCheck() ) - { - SetTitleText( m_subttile ); - //UIUtils.UpdateFunctionInputData( UniqueId, m_inputName ); - } - EditorGUI.BeginChangeCheck(); - //m_selectedInputTypeInt = EditorGUILayoutPopup( InputTypeStr, m_selectedInputTypeInt, m_inputValueTypes ); - //if( EditorGUI.EndChangeCheck() ) - //{ - // UpdatePorts(); - // SetAdditonalTitleText( "( " + m_inputValueTypes[ m_selectedInputTypeInt ] + " )" ); - //} - - //m_autoCast = EditorGUILayoutToggle( "Auto Cast", m_autoCast ); - - //EditorGUILayout.Separator(); - //if( !m_inputPorts[ 0 ].IsConnected && m_inputPorts[ 0 ].ValidInternalData ) - //{ - // m_inputPorts[ 0 ].ShowInternalData( this, true, "Default Value" ); - //} - - - EditorGUILayout.EndVertical(); - } - - public override void WriteToString( ref string nodeInfo, ref string connectionsInfo ) - { - base.WriteToString( ref nodeInfo, ref connectionsInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_subttile ); - } - - public override void ReadFromString( ref string[] nodeParams ) - { - base.ReadFromString( ref nodeParams ); - m_subttile = GetCurrentParam( ref nodeParams ); - SetTitleText( m_subttile ); - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSubtitle.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSubtitle.cs.meta deleted file mode 100644 index bd87bd97..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSubtitle.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 97d5e0cd26200a64fa9d127599406008 -timeCreated: 1522434121 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSwitch.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSwitch.cs deleted file mode 100644 index e25ad54a..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSwitch.cs +++ /dev/null @@ -1,867 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using UnityEngine; -using UnityEditor; -using System; -using System.Collections.Generic; - -namespace AmplifyShaderEditor -{ - [Serializable] - [NodeAttributes( "Function Switch", "Functions", "Function Switch allows switching options at compile time for shader function", NodeAvailabilityFlags = (int)NodeAvailability.ShaderFunction )] - public sealed class FunctionSwitch : ParentNode - { - private const string InputPortNameStr = "In "; - - private const string ToggleFalseStr = "False"; - private const string ToggleTrueStr = "True"; - - private const string CurrSelectedStr = "Current"; - private const string MaxAmountStr = "Amount"; - private const int MaxAllowedAmount = 9; - - private const int MinComboSize = 50; - private const int MaxComboSize = 105; - - [SerializeField] - private string m_optionLabel = "Option"; - - [SerializeField] - private string[] AvailableInputsLabels = { "In 0", "In 1" }; - - [SerializeField] - private int[] AvailableInputsValues = { 0, 1 }; - - [SerializeField] - private int m_previousSelectedInput = 0; - - [SerializeField] - private int m_currentSelectedInput = 0; - - [SerializeField] - private int m_maxAmountInputs = 2; - - [SerializeField] - private bool m_toggleMode = false; - - [SerializeField] - private string[] m_optionNames = { "In 0", "In 1", "In 2", "In 3", "In 4", "In 5", "In 6", "In 7", "In 8" }; - - [SerializeField] - private int m_orderIndex = -1; - - [SerializeField] - private TexReferenceType m_referenceType = TexReferenceType.Object; - - [SerializeField] - private FunctionSwitch m_functionSwitchReference = null; - - [SerializeField] - private int m_referenceUniqueId = -1; - - [SerializeField] - private bool m_validReference = false; - - private bool m_asDrawn = false; - - private GUIContent m_checkContent; - private GUIContent m_popContent; - - private const double MaxTimestamp = 1; - private bool m_nameModified = false; - private double m_lastTimeNameModified = 0; - - private Rect m_varRect; - private Rect m_imgRect; - private bool m_editing; - - private int m_cachedPropertyId = -1; - - [SerializeField] - private int m_refMaxInputs = -1; - - [SerializeField] - private string m_refOptionLabel = string.Empty; - - [SerializeField] - private int m_refSelectedInput = -1; - - protected override void CommonInit( int uniqueId ) - { - base.CommonInit( uniqueId ); - for( int i = 0; i < MaxAllowedAmount; i++ ) - { - AddInputPort( WirePortDataType.FLOAT, false, InputPortNameStr + i ); - m_inputPorts[ i ].Visible = ( i < 2 ); - } - AddOutputPort( WirePortDataType.FLOAT, " " ); - - m_checkContent = new GUIContent(); - m_checkContent.image = UIUtils.CheckmarkIcon; - - m_popContent = new GUIContent(); - m_popContent.image = UIUtils.PopupIcon; - - m_textLabelWidth = 100; - m_autoWrapProperties = true; - m_insideSize.Set( 80, 25 ); - m_previewShaderGUID = "a58e46feaa5e3d14383bfeac24d008bc"; - } - - public void SetCurrentSelectedInput( int newValue, int prevValue ) - { - m_previousSelectedInput = prevValue; - if( m_validReference ) - m_currentSelectedInput = Mathf.Clamp( newValue, 0, m_refMaxInputs - 1 ); - else - m_currentSelectedInput = Mathf.Clamp( newValue, 0, m_maxAmountInputs - 1 ); - m_outputPorts[ 0 ].ChangeType( m_inputPorts[ m_currentSelectedInput ].DataType, false ); - PreviewIsDirty = true; - ChangeSignalPropagation(); - } - - public int GetCurrentSelectedInput() - { - return m_currentSelectedInput; - } - - - public override void SetPreviewInputs() - { - base.SetPreviewInputs(); - - if( m_cachedPropertyId == -1 ) - m_cachedPropertyId = Shader.PropertyToID( "_Current" ); - - PreviewMaterial.SetInt( m_cachedPropertyId, m_currentSelectedInput ); - } - - protected override void OnUniqueIDAssigned() - { - base.OnUniqueIDAssigned(); - if( m_referenceType == TexReferenceType.Object ) - { - UIUtils.RegisterFunctionSwitchNode( this ); - } - else - { - if( ContainerGraph.ParentWindow.CustomGraph != null ) - UIUtils.RegisterFunctionSwitchNode( this ); - UIUtils.RegisterFunctionSwitchCopyNode( this ); - } - } - - public override void Destroy() - { - base.Destroy(); - - m_functionSwitchReference = null; - m_referenceUniqueId = -1; - - if( m_referenceType == TexReferenceType.Object ) - { - UIUtils.UnregisterFunctionSwitchNode( this ); - } - else - { - UIUtils.UnregisterFunctionSwitchNode( this ); - UIUtils.UnregisterFunctionSwitchCopyNode( this ); - } - } - - public override void OnConnectedOutputNodeChanges( int portId, int otherNodeId, int otherPortId, string name, WirePortDataType type ) - { - base.OnConnectedOutputNodeChanges( portId, otherNodeId, otherPortId, name, type ); - m_inputPorts[ portId ].MatchPortToConnection(); - if( portId == m_currentSelectedInput ) - m_outputPorts[ 0 ].ChangeType( m_inputPorts[ portId ].DataType, false ); - } - - public override void OnInputPortConnected( int portId, int otherNodeId, int otherPortId, bool activateNode = true ) - { - InputPort port = GetInputPortByUniqueId( portId ); - int arrayPos = m_inputPorts.IndexOf( port ); - if( activateNode && m_connStatus == NodeConnectionStatus.Connected && arrayPos == m_currentSelectedInput ) - { - port.GetOutputNode().ActivateNode( m_activeNode, m_activePort, m_activeType ); - } - - OnNodeChange(); - SetSaveIsDirty(); - - m_inputPorts[ portId ].MatchPortToConnection(); - if( arrayPos == m_currentSelectedInput ) - m_outputPorts[ 0 ].ChangeType( m_inputPorts[ portId ].DataType, false ); - } - - public override void ActivateNode( int signalGenNodeId, int signalGenPortId, Type signalGenNodeType ) - { - if( m_selfPowered ) - return; - - ConnStatus = m_restrictions.GetRestiction( signalGenNodeType, signalGenPortId ) ? NodeConnectionStatus.Error : NodeConnectionStatus.Connected; - m_activeConnections += 1; - - m_activeType = signalGenNodeType; - m_activeNode = signalGenNodeId; - m_activePort = signalGenPortId; - if( m_activeConnections == 1 ) - if( m_inputPorts[ m_currentSelectedInput ].IsConnected ) - m_inputPorts[ m_currentSelectedInput ].GetOutputNode().ActivateNode( signalGenNodeId, signalGenPortId, signalGenNodeType ); - - SetSaveIsDirty(); - } - - public override void DeactivateInputPortNode( int deactivatedPort, bool forceComplete ) - { - InputPort port = GetInputPortByUniqueId( deactivatedPort ); - if( deactivatedPort == m_currentSelectedInput ) - port.GetOutputNode().DeactivateNode( deactivatedPort, false ); - } - - public override void DeactivateNode( int deactivatedPort, bool forceComplete ) - { - if( m_selfPowered ) - return; - - SetSaveIsDirty(); - m_activeConnections -= 1; - - if( ( forceComplete || m_activeConnections <= 0 ) ) - { - m_activeConnections = 0; - ConnStatus = NodeConnectionStatus.Not_Connected; - for( int i = 0; i < m_inputPorts.Count; i++ ) - { - if( m_inputPorts[ i ].IsConnected && i == m_currentSelectedInput ) - { - ParentNode node = m_inputPorts[ i ].GetOutputNode(); - if( node != null ) - node.DeactivateNode( deactivatedPort == -1 ? m_inputPorts[ i ].PortId : deactivatedPort, false ); - } - } - } - } - - public void ChangeSignalPropagation() - { - if( m_previousSelectedInput != m_currentSelectedInput && ConnStatus == NodeConnectionStatus.Connected ) - { - if( m_inputPorts[ m_previousSelectedInput ].IsConnected ) - m_inputPorts[ m_previousSelectedInput ].GetOutputNode().DeactivateNode( m_inputPorts[ m_previousSelectedInput ].PortId, false ); - - if( m_inputPorts[ m_currentSelectedInput ].IsConnected ) - m_inputPorts[ m_currentSelectedInput ].GetOutputNode().ActivateNode( UniqueId, m_inputPorts[ m_currentSelectedInput ].PortId, m_activeType ); - } - } - - public bool DrawOption( ParentNode owner, bool forceDraw = false ) - { - if( !IsConnected && !forceDraw ) - { - //EditorGUILayout.LabelField( "Not Connected" ); - return false; - } - - if( m_asDrawn ) //used to prevent the same property to be drawn more than once - return false; - - if( m_validReference ) - { - return m_functionSwitchReference.DrawOption( owner, true ); - } - - int prev = m_currentSelectedInput; - m_asDrawn = true; - if( m_toggleMode ) - { - m_currentSelectedInput = owner.EditorGUILayoutToggle( m_optionLabel, ( m_currentSelectedInput != 0 ? true : false ) ) ? 1 : 0; - - if( m_currentSelectedInput != prev ) - { - SetCurrentSelectedInput( m_currentSelectedInput, prev ); - return true; - } - else - { - return false; - } - } - else - { - m_currentSelectedInput = owner.EditorGUILayoutIntPopup( m_optionLabel, m_currentSelectedInput, AvailableInputsLabels, AvailableInputsValues ); - - if( m_currentSelectedInput != prev ) - { - SetCurrentSelectedInput( m_currentSelectedInput, prev ); - return true; - } - else - { - return false; - } - } - } - - public void CheckReference() - { - if( m_referenceType != TexReferenceType.Instance ) - { - m_validReference = false; - return; - } - - if( m_functionSwitchReference == null ) - { - m_validReference = false; - ResetToSelf(); - return; - } - - if( m_referenceUniqueId != m_functionSwitchReference.UniqueId ) - { - UpdateFromSelected(); - } - if( m_refSelectedInput != m_functionSwitchReference.GetCurrentSelectedInput() || m_refMaxInputs != m_functionSwitchReference.MaxAmountInputs || m_refOptionLabel != m_functionSwitchReference.OptionLabel ) - { - UpdateFromSelected(); - } - - m_validReference = true; - } - - void ResetToSelf() - { - m_functionSwitchReference = null; - m_validReference = false; - m_referenceUniqueId = -1; - m_refMaxInputs = -1; - m_refOptionLabel = string.Empty; - m_refSelectedInput = -1; - - for( int i = 0; i < MaxAllowedAmount; i++ ) - { - m_inputPorts[ i ].Visible = ( i < m_maxAmountInputs ); - m_inputPorts[ i ].Name = m_optionNames[ i ]; - } - - if( m_currentSelectedInput >= m_maxAmountInputs ) - { - m_currentSelectedInput = m_maxAmountInputs - 1; - } - - UpdateLabels(); - m_sizeIsDirty = true; - } - - void UpdateFromSelected() - { - if( m_referenceUniqueId < 0 ) - return; - - m_functionSwitchReference = UIUtils.GetNode( m_referenceUniqueId ) as FunctionSwitch; - if( m_functionSwitchReference != null ) - { - m_validReference = true; - for( int i = 0; i < MaxAllowedAmount; i++ ) - { - m_inputPorts[ i ].Visible = ( i < m_functionSwitchReference.MaxAmountInputs ); - m_inputPorts[ i ].Name = m_functionSwitchReference.InputPorts[ i ].Name; - } - UpdateLabels(); - m_refMaxInputs = m_functionSwitchReference.m_maxAmountInputs; - m_refOptionLabel = m_functionSwitchReference.OptionLabel; - m_refSelectedInput = m_functionSwitchReference.GetCurrentSelectedInput(); - OrderIndex = m_functionSwitchReference.OrderIndex; - - SetCurrentSelectedInput( m_functionSwitchReference.GetCurrentSelectedInput(), m_currentSelectedInput ); - } - - m_sizeIsDirty = true; - m_isDirty = true; - } - - public override void DrawProperties() - { - base.DrawProperties(); - EditorGUI.BeginChangeCheck(); - m_referenceType = (TexReferenceType)EditorGUILayoutPopup( Constants.ReferenceTypeStr, (int)m_referenceType, Constants.ReferenceArrayLabels ); - if( EditorGUI.EndChangeCheck() ) - { - if( m_referenceType == TexReferenceType.Object ) - { - if( ContainerGraph.ParentWindow.CustomGraph == null ) - UIUtils.UnregisterFunctionSwitchCopyNode( this ); - UIUtils.RegisterFunctionSwitchNode( this ); - ResetToSelf(); - } - else - { - if( ContainerGraph.ParentWindow.CustomGraph == null ) - UIUtils.UnregisterFunctionSwitchNode( this ); - UIUtils.RegisterFunctionSwitchCopyNode( this ); - } - } - - if( m_referenceType == TexReferenceType.Instance ) - { - EditorGUI.BeginChangeCheck(); - string[] arr = new string[ UIUtils.FunctionSwitchList().Count ]; - int[] ids = new int[ UIUtils.FunctionSwitchList().Count ]; - for( int i = 0; i < arr.Length; i++ ) - { - arr[ i ] = i + " - " + UIUtils.FunctionSwitchList()[ i ].OptionLabel; - ids[ i ] = UIUtils.FunctionSwitchList()[ i ].UniqueId; - } - m_referenceUniqueId = EditorGUILayout.IntPopup( Constants.AvailableReferenceStr, m_referenceUniqueId, arr, ids ); - if( EditorGUI.EndChangeCheck() ) - { - UpdateFromSelected(); - } - return; - } - - EditorGUI.BeginChangeCheck(); - m_optionLabel = EditorGUILayoutTextField( "Option Label", m_optionLabel ); - if( EditorGUI.EndChangeCheck() ) - { - m_optionLabel = UIUtils.RemoveInvalidEnumCharacters( m_optionLabel ); - if( string.IsNullOrEmpty( m_optionLabel ) ) - { - m_optionLabel = "Option"; - } - - UIUtils.UpdateFunctionSwitchData( UniqueId, m_optionLabel ); - } - - EditorGUI.BeginChangeCheck(); - m_toggleMode = EditorGUILayoutToggle( "Toggle Mode", m_toggleMode ); - if( EditorGUI.EndChangeCheck() ) - { - if( m_toggleMode ) - { - m_inputPorts[ 0 ].Name = ToggleFalseStr; - m_inputPorts[ 1 ].Name = ToggleTrueStr; - - for( int i = 0; i < MaxAllowedAmount; i++ ) - { - m_inputPorts[ i ].Visible = ( i < 2 ); - } - - if( m_currentSelectedInput >= 2 ) - { - m_currentSelectedInput = 1; - } - UpdateLabels(); - m_sizeIsDirty = true; - } - else - { - m_inputPorts[ 0 ].Name = m_optionNames[ 0 ]; - m_inputPorts[ 1 ].Name = m_optionNames[ 1 ]; - - for( int i = 0; i < MaxAllowedAmount; i++ ) - { - m_inputPorts[ i ].Visible = ( i < m_maxAmountInputs ); - } - - if( m_currentSelectedInput >= m_maxAmountInputs ) - { - m_currentSelectedInput = m_maxAmountInputs - 1; - } - - UpdateLabels(); - m_sizeIsDirty = true; - } - } - - if( !m_toggleMode ) - { - EditorGUI.BeginChangeCheck(); - m_maxAmountInputs = EditorGUILayoutIntSlider( MaxAmountStr, m_maxAmountInputs, 2, MaxAllowedAmount ); - if( EditorGUI.EndChangeCheck() ) - { - for( int i = 0; i < MaxAllowedAmount; i++ ) - { - m_inputPorts[ i ].Visible = ( i < m_maxAmountInputs ); - } - - if( m_currentSelectedInput >= m_maxAmountInputs ) - { - m_currentSelectedInput = m_maxAmountInputs - 1; - } - - UpdateLabels(); - m_sizeIsDirty = true; - } - - EditorGUI.indentLevel++; - for( int i = 0; i < m_maxAmountInputs; i++ ) - { - EditorGUI.BeginChangeCheck(); - m_inputPorts[ i ].Name = EditorGUILayoutTextField( "Item " + i, m_inputPorts[ i ].Name ); - if( EditorGUI.EndChangeCheck() ) - { - m_nameModified = true; - m_lastTimeNameModified = EditorApplication.timeSinceStartup; - m_inputPorts[ i ].Name = UIUtils.RemoveInvalidEnumCharacters( m_inputPorts[ i ].Name ); - m_optionNames[ i ] = m_inputPorts[ i ].Name; - if( string.IsNullOrEmpty( m_inputPorts[ i ].Name ) ) - { - m_inputPorts[ i ].Name = InputPortNameStr + i; - } - m_sizeIsDirty = true; - } - } - EditorGUI.indentLevel--; - - if( m_nameModified ) - { - UpdateLabels(); - } - } - - if( m_toggleMode ) - { - EditorGUI.BeginChangeCheck(); - int prevVal = m_currentSelectedInput; - m_currentSelectedInput = EditorGUILayoutToggle( CurrSelectedStr, ( m_currentSelectedInput != 0 ? true : false ) ) ? 1 : 0; - if( EditorGUI.EndChangeCheck() ) - SetCurrentSelectedInput( m_currentSelectedInput, prevVal ); - } - else - { - EditorGUI.BeginChangeCheck(); - int prevVal = m_currentSelectedInput; - m_currentSelectedInput = EditorGUILayoutIntPopup( CurrSelectedStr, m_currentSelectedInput, AvailableInputsLabels, AvailableInputsValues ); - if( EditorGUI.EndChangeCheck() ) - { - SetCurrentSelectedInput( m_currentSelectedInput, prevVal ); - } - } - } - - public override void RefreshExternalReferences() - { - base.RefreshExternalReferences(); - if( UIUtils.CurrentShaderVersion() > 14205 ) - { - if( m_referenceType == TexReferenceType.Instance ) - { - m_functionSwitchReference = UIUtils.GetNode( m_referenceUniqueId ) as FunctionSwitch; - UpdateFromSelected(); - } - } - - SetCurrentSelectedInput( m_currentSelectedInput, m_previousSelectedInput ); - } - - public void UpdateLabels() - { - int maxinputs = m_maxAmountInputs; - if( m_validReference ) - maxinputs = m_functionSwitchReference.MaxAmountInputs; - - AvailableInputsLabels = new string[ maxinputs ]; - AvailableInputsValues = new int[ maxinputs ]; - - for( int i = 0; i < maxinputs; i++ ) - { - AvailableInputsLabels[ i ] = m_optionNames[ i ]; - AvailableInputsValues[ i ] = i; - } - } - - public override void OnNodeLogicUpdate( DrawInfo drawInfo ) - { - base.OnNodeLogicUpdate( drawInfo ); - CheckReference(); - } - - public override void OnNodeLayout( DrawInfo drawInfo ) - { - float finalSize = 0; - if( !m_toggleMode ) - { - GUIContent dropdown = new GUIContent( m_inputPorts[ m_currentSelectedInput ].Name ); - int cacheSize = UIUtils.GraphDropDown.fontSize; - UIUtils.GraphDropDown.fontSize = 10; - Vector2 calcSize = UIUtils.GraphDropDown.CalcSize( dropdown ); - UIUtils.GraphDropDown.fontSize = cacheSize; - finalSize = Mathf.Clamp( calcSize.x, MinComboSize, MaxComboSize ); - if( m_insideSize.x != finalSize ) - { - m_insideSize.Set( finalSize, 25 ); - m_sizeIsDirty = true; - } - } - - base.OnNodeLayout( drawInfo ); - - bool toggleMode = m_toggleMode; - if( m_validReference ) - { - toggleMode = m_functionSwitchReference.m_toggleMode; - } - - if( toggleMode ) - { - m_varRect = m_remainingBox; - m_varRect.size = Vector2.one * 22 * drawInfo.InvertedZoom; - m_varRect.center = m_remainingBox.center; - if( m_showPreview ) - m_varRect.y = m_remainingBox.y; - } - else - { - m_varRect = m_remainingBox; - m_varRect.width = finalSize * drawInfo.InvertedZoom; - m_varRect.height = 16 * drawInfo.InvertedZoom; - m_varRect.x = m_remainingBox.xMax - m_varRect.width; - m_varRect.y += 1 * drawInfo.InvertedZoom; - - m_imgRect = m_varRect; - m_imgRect.x = m_varRect.xMax - 16 * drawInfo.InvertedZoom; - m_imgRect.width = 16 * drawInfo.InvertedZoom; - m_imgRect.height = m_imgRect.width; - } - } - - public override void DrawGUIControls( DrawInfo drawInfo ) - { - if( m_validReference ) - { - base.DrawGUIControls( drawInfo ); - } - else - { - base.DrawGUIControls( drawInfo ); - - if( drawInfo.CurrentEventType != EventType.MouseDown ) - return; - - if( m_varRect.Contains( drawInfo.MousePosition ) ) - { - m_editing = true; - } - else if( m_editing ) - { - m_editing = false; - } - } - } - - public override void Draw( DrawInfo drawInfo ) - { - base.Draw( drawInfo ); - - if( m_nameModified ) - { - if( ( EditorApplication.timeSinceStartup - m_lastTimeNameModified ) > MaxTimestamp ) - { - m_nameModified = false; - } - } - - if( m_validReference ) - { - SetAdditonalTitleTextOnCallback( m_functionSwitchReference.OptionLabel, ( instance, newSubTitle ) => instance.AdditonalTitleContent.text = string.Format( Constants.SubTitleVarNameFormatStr, newSubTitle ) ); - } - else - { - SetAdditonalTitleTextOnCallback( m_optionLabel, ( instance, newSubTitle ) => instance.AdditonalTitleContent.text = string.Format( Constants.SubTitleValueFormatStr, newSubTitle ) ); - - if( m_editing ) - { - if( m_toggleMode ) - { - if( GUI.Button( m_varRect, GUIContent.none, UIUtils.GraphButton ) ) - { - PreviewIsDirty = true; - int prevVal = m_currentSelectedInput; - m_currentSelectedInput = m_currentSelectedInput == 1 ? 0 : 1; - if( m_currentSelectedInput != prevVal ) - SetCurrentSelectedInput( m_currentSelectedInput, prevVal ); - m_editing = false; - } - - if( m_currentSelectedInput == 1 ) - { - GUI.Label( m_varRect, m_checkContent, UIUtils.GraphButtonIcon ); - } - } - else - { - EditorGUI.BeginChangeCheck(); - int prevVal = m_currentSelectedInput; - m_currentSelectedInput = EditorGUIIntPopup( m_varRect, m_currentSelectedInput, AvailableInputsLabels, AvailableInputsValues, UIUtils.GraphDropDown ); - if( EditorGUI.EndChangeCheck() ) - { - PreviewIsDirty = true; - SetCurrentSelectedInput( m_currentSelectedInput, prevVal ); - m_editing = false; - } - } - } - } - - } - - public override void OnNodeRepaint( DrawInfo drawInfo ) - { - base.OnNodeRepaint( drawInfo ); - - if( !m_isVisible ) - return; - - if( ContainerGraph.LodLevel <= ParentGraph.NodeLOD.LOD2 ) - { - if( m_validReference ) - { - bool cacheState = GUI.enabled; - GUI.enabled = false; - if( m_functionSwitchReference.m_toggleMode ) - { - GUI.Label( m_varRect, GUIContent.none, UIUtils.GraphButton ); - if( m_functionSwitchReference.GetCurrentSelectedInput() == 1 ) - { - GUI.Label( m_varRect, m_checkContent, UIUtils.GraphButtonIcon ); - } - } - else - { - GUI.Label( m_varRect, m_functionSwitchReference.AvailableInputsLabels[ m_currentSelectedInput ], UIUtils.GraphDropDown ); - } - GUI.enabled = cacheState; - } - else - { - if( !m_editing ) - { - if( m_toggleMode ) - { - GUI.Label( m_varRect, GUIContent.none, UIUtils.GraphButton ); - - if( m_currentSelectedInput == 1 ) - { - GUI.Label( m_varRect, m_checkContent, UIUtils.GraphButtonIcon ); - } - } - else - { - GUI.Label( m_varRect, AvailableInputsLabels[ m_currentSelectedInput ], UIUtils.GraphDropDown ); - GUI.Label( m_imgRect, m_popContent, UIUtils.GraphButtonIcon ); - } - } - } - } - } - - public override void PropagateNodeData( NodeData nodeData, ref MasterNodeDataCollector dataCollector ) - { - m_inputPorts[ m_currentSelectedInput ].GetOutputNode().PropagateNodeData( nodeData, ref dataCollector ); - } - - public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar ) - { - return m_inputPorts[ m_currentSelectedInput ].GeneratePortInstructions( ref dataCollector ); - } - - public override void ReadFromString( ref string[] nodeParams ) - { - base.ReadFromString( ref nodeParams ); - m_optionLabel = GetCurrentParam( ref nodeParams ); - m_toggleMode = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) ); - m_currentSelectedInput = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - m_previousSelectedInput = m_currentSelectedInput; - m_maxAmountInputs = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - m_orderIndex = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - - for( int i = 0; i < MaxAllowedAmount; i++ ) - { - m_inputPorts[ i ].Visible = ( i < m_maxAmountInputs ); - } - - if( m_currentSelectedInput >= m_maxAmountInputs ) - { - m_currentSelectedInput = m_maxAmountInputs - 1; - } - - for( int i = 0; i < m_maxAmountInputs; i++ ) - { - m_optionNames[ i ] = GetCurrentParam( ref nodeParams ); - m_inputPorts[ i ].Name = m_optionNames[ i ]; - } - - if( m_toggleMode ) - { - m_inputPorts[ 0 ].Name = ToggleFalseStr; - m_inputPorts[ 1 ].Name = ToggleTrueStr; - } - - UpdateLabels(); - m_sizeIsDirty = true; - - UIUtils.UpdateFunctionSwitchData( UniqueId, m_optionLabel ); - UIUtils.UpdateFunctionSwitchCopyData( UniqueId, m_optionLabel ); - if( UIUtils.CurrentShaderVersion() > 14205 ) - { - m_referenceType = (TexReferenceType)Enum.Parse( typeof( TexReferenceType ), GetCurrentParam( ref nodeParams ) ); - m_referenceUniqueId = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - - if( m_referenceType == TexReferenceType.Object ) - { - if( ContainerGraph.ParentWindow.CustomGraph == null ) - UIUtils.UnregisterFunctionSwitchCopyNode( this ); - UIUtils.RegisterFunctionSwitchNode( this ); - ResetToSelf(); - } - else - { - if( ContainerGraph.ParentWindow.CustomGraph == null ) - UIUtils.UnregisterFunctionSwitchNode( this ); - UIUtils.RegisterFunctionSwitchCopyNode( this ); - } - } - } - - public override void WriteToString( ref string nodeInfo, ref string connectionsInfo ) - { - base.WriteToString( ref nodeInfo, ref connectionsInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_optionLabel ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_toggleMode ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_currentSelectedInput ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_maxAmountInputs ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_orderIndex ); - - for( int i = 0; i < m_maxAmountInputs; i++ ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_optionNames[ i ] ); - } - - IOUtils.AddFieldValueToString( ref nodeInfo, m_referenceType ); - IOUtils.AddFieldValueToString( ref nodeInfo, ( m_functionSwitchReference != null ? m_functionSwitchReference.UniqueId : -1 ) ); - } - - public int OrderIndex - { - get { return m_orderIndex; } - set { m_orderIndex = value; } - } - - public string OptionLabel - { - get { return m_optionLabel; } - set { m_optionLabel = value; } - } - - public bool AsDrawn { get { return m_asDrawn; } set { m_asDrawn = value; } } - - public override string DataToArray { get { return m_optionLabel; } } - public int MaxAmountInputs - { - get { return m_maxAmountInputs; } - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSwitch.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSwitch.cs.meta deleted file mode 100644 index 8929a454..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSwitch.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 2bd66b9ffd0acf84ab46c9f83300495c -timeCreated: 1515408158 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSwitchByPipeline.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSwitchByPipeline.cs deleted file mode 100644 index 5a05605e..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSwitchByPipeline.cs +++ /dev/null @@ -1,102 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using UnityEngine; -using UnityEditor; -using System; - -namespace AmplifyShaderEditor -{ - [Serializable] - [NodeAttributes( "Switch by Pipeline", "Functions", "Executes branch according to current pipeline", NodeAvailabilityFlags = (int)NodeAvailability.ShaderFunction )] - public sealed class FunctionSwitchByPipeline : ParentNode - { - protected override void CommonInit( int uniqueId ) - { - base.CommonInit( uniqueId ); - AddInputPort( WirePortDataType.FLOAT, false, "Surface", -1, MasterNodePortCategory.Fragment, 0 ); - AddInputPort( WirePortDataType.FLOAT, false, "Default RP", -1, MasterNodePortCategory.Fragment, 3 ); - AddInputPort( WirePortDataType.FLOAT, false, "Lightweight", -1, MasterNodePortCategory.Fragment, 1 ); - AddInputPort( WirePortDataType.FLOAT, false, "HD", -1, MasterNodePortCategory.Fragment, 2 ); - AddOutputPort( WirePortDataType.FLOAT, Constants.EmptyPortValue ); - - } - - public override void OnInputPortConnected( int portId, int otherNodeId, int otherPortId, bool activateNode = true ) - { - base.OnInputPortConnected( portId, otherNodeId, otherPortId, activateNode ); - GetInputPortByUniqueId( portId ).MatchPortToConnection(); - UpdateOutputPort(); - } - - public override void OnConnectedOutputNodeChanges( int outputPortId, int otherNodeId, int otherPortId, string name, WirePortDataType type ) - { - base.OnConnectedOutputNodeChanges( outputPortId, otherNodeId, otherPortId, name, type ); - GetInputPortByUniqueId( outputPortId ).MatchPortToConnection(); - UpdateOutputPort(); - } - - void UpdateOutputPort() - { - switch( UIUtils.CurrentWindow.OutsideGraph.CurrentSRPType ) - { - case TemplateSRPType.BuiltIn: - { - InputPort port = UIUtils.CurrentWindow.OutsideGraph.IsStandardSurface ? GetInputPortByUniqueId( 0 ) : GetInputPortByUniqueId( 3 ); - m_outputPorts[ 0 ].ChangeType( port.DataType, false ); - } - break; - case TemplateSRPType.Lightweight: - { - InputPort port = GetInputPortByUniqueId( 1 ); - m_outputPorts[ 0 ].ChangeType( port.DataType, false ); - } - break; - case TemplateSRPType.HD: - { - InputPort port = GetInputPortByUniqueId( 2 ); - m_outputPorts[ 0 ].ChangeType( port.DataType, false ); - } - break; - } - } - - public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar ) - { - base.GenerateShaderForOutput( outputId, ref dataCollector, ignoreLocalvar ); - switch( dataCollector.CurrentSRPType ) - { - case TemplateSRPType.BuiltIn: - { - InputPort port = UIUtils.CurrentWindow.OutsideGraph.IsStandardSurface ? GetInputPortByUniqueId( 0 ) : GetInputPortByUniqueId( 3 ); - return port.GeneratePortInstructions( ref dataCollector ); - } - case TemplateSRPType.Lightweight: - { - InputPort port = GetInputPortByUniqueId( 1 ); - return port.GeneratePortInstructions( ref dataCollector ); - } - case TemplateSRPType.HD: - { - InputPort port = GetInputPortByUniqueId( 2 ); - return port.GeneratePortInstructions( ref dataCollector ); - } - } - - return "0"; - } - - public override void RefreshExternalReferences() - { - base.RefreshExternalReferences(); - if( UIUtils.CurrentShaderVersion() < 16303 ) - { - InputPort standardPort = GetInputPortByUniqueId( 0 ); - if( standardPort.IsConnected ) - { - UIUtils.SetConnection( UniqueId, 3, standardPort.GetConnection().NodeId, standardPort.GetConnection().PortId ); - } - } - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSwitchByPipeline.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSwitchByPipeline.cs.meta deleted file mode 100644 index 9ecd8080..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FunctionSwitchByPipeline.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 84a4868e0b1e8dd4bb0e71c8d9a9c130 -timeCreated: 1535365719 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/LogNode.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/LogNode.cs deleted file mode 100644 index d431cbb8..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/LogNode.cs +++ /dev/null @@ -1,80 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using UnityEngine; -using UnityEditor; - -namespace AmplifyShaderEditor -{ - [System.Serializable] - [NodeAttributes( "Log", "Master", "Debug node to dump output to log", null, KeyCode.None, false )] - public sealed class LogNode : MasterNode - { - private const string InputAmountStr = "Input amount"; - - [SerializeField] - private int m_inputCount = 1; - - [SerializeField] - private int m_lastInputCount = 1; - - public LogNode() : base() { } - public LogNode( int uniqueId, float x, float y, float width, float height ) : base( uniqueId, x, y, width, height ) { } - protected override void CommonInit( int uniqueId ) - { - base.CommonInit( uniqueId ); - AddMasterPorts(); - } - - public override void AddMasterPorts() - { - DeleteAllInputConnections( true ); - base.AddMasterPorts(); - - for ( int i = 0; i < m_inputCount; i++ ) - { - AddInputPort( WirePortDataType.OBJECT, false, i.ToString() ); - } - m_sizeIsDirty = true; - } - - public override void DrawProperties() - { - base.DrawProperties(); - EditorGUILayout.BeginVertical(); - { - EditorGUILayout.LabelField( InputAmountStr ); - m_inputCount = EditorGUILayoutIntField( m_inputCount ); - } - EditorGUILayout.EndVertical(); - if ( m_inputCount != m_lastInputCount ) - { - m_lastInputCount = Mathf.Max( m_inputCount, 1 ); - AddMasterPorts(); - } - } - - public override void Execute( Shader currentSelected ) - { - string valueDump = ""; - string valueInstructions = ""; - - MasterNodeDataCollector dataCollector = new MasterNodeDataCollector( this ); - foreach ( InputPort port in InputPorts ) - { - if ( port.IsConnected ) - { - valueInstructions += "Port: " + port.PortId + " Value: " + port.GenerateShaderForOutput( ref dataCollector, port.DataType, false ); - } - } - Debug.Log( "Value: " + valueDump ); - Debug.Log( "Instructions: " + valueInstructions ); - } - - public override void ReadFromString( ref string[] nodeParams ) - { - base.ReadFromString( ref nodeParams ); - } - - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/LogNode.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/LogNode.cs.meta deleted file mode 100644 index d2debabc..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/LogNode.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 3b0e734d4c354c74999e20ce054628d2 -timeCreated: 1481126955 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/MasterNode.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/MasterNode.cs deleted file mode 100644 index 5e4ec937..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/MasterNode.cs +++ /dev/null @@ -1,979 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; -using UnityEditorInternal; - -namespace AmplifyShaderEditor -{ - public enum PrecisionType - { - Float = 0, - Half, - Inherit - } - - public enum AvailableShaderTypes - { - SurfaceShader = 0, - Template - } - - [Serializable] - public class MasterNodeCategoriesData - { - public AvailableShaderTypes Category; - public string Name; - public MasterNodeCategoriesData( AvailableShaderTypes category, string name ) { Category = category; Name = name; } - } - - [Serializable] - public class MasterNode : OutputNode - { - protected const string CustomInspectorStr = "Custom Editor"; - protected const string CustomInspectorFormat = "CustomEditor \"{0}\""; - - private const string PropertyOrderFoldoutStr = " Material Properties"; - private const string PropertyOrderTemplateFoldoutStr = "Material Properties"; - - protected MasterNodeDataCollector m_currentDataCollector; - - protected const string ShaderNameStr = "Shader Name"; - protected GUIContent m_shaderNameContent; - - private const string IndentationHelper = "\t\t{0}\n"; - private const string ShaderLODFormat = "\t\tLOD {0}\n"; - - public delegate void OnMaterialUpdated( MasterNode masterNode ); - public event OnMaterialUpdated OnMaterialUpdatedEvent; - public event OnMaterialUpdated OnShaderUpdatedEvent; - - protected const string GeneralFoldoutStr = " General"; - - protected readonly string[] ShaderModelTypeArr = { "2.0", "2.5", "3.0", "3.5", "4.0", "4.5", "4.6", "5.0" }; - private const string ShaderKeywordsStr = "Shader Keywords"; - - [SerializeField] - protected int m_shaderLOD = 0; - - [SerializeField] - protected int m_shaderModelIdx = 2; - - [SerializeField] - protected Shader m_currentShader; - - [SerializeField] - protected Material m_currentMaterial; - - //[SerializeField] - //private bool m_isMainMasterNode = false; - - [SerializeField] - private Rect m_masterNodeIconCoords; - - [SerializeField] - protected string m_shaderName = Constants.DefaultShaderName; - - [SerializeField] - protected string m_croppedShaderName = Constants.DefaultShaderName; - - [SerializeField] - protected string m_customInspectorName = Constants.DefaultCustomInspector; - - [SerializeField] - protected int m_masterNodeCategory = 0;// MasterNodeCategories.SurfaceShader; - - [SerializeField] - protected string m_currentShaderData = string.Empty; - - private Texture2D m_masterNodeOnTex; - private Texture2D m_masterNodeOffTex; - - private Texture2D m_gpuInstanceOnTex; - private Texture2D m_gpuInstanceOffTex; - - // Shader Keywords - [SerializeField] - private List<string> m_shaderKeywords = new List<string>(); - - [SerializeField] - private bool m_shaderKeywordsFoldout = true; - - private GUIStyle m_addShaderKeywordStyle; - private GUIStyle m_removeShaderKeywordStyle; - private GUIStyle m_smallAddShaderKeywordItemStyle; - private GUIStyle m_smallRemoveShaderKeywordStyle; - private const float ShaderKeywordButtonLayoutWidth = 15; - - - public MasterNode() : base() { CommonInit(); } - public MasterNode( int uniqueId, float x, float y, float width, float height ) : base( uniqueId, x, y, width, height ) { CommonInit(); } - - protected GUIContent m_categoryLabel = new GUIContent( "Shader Type ", "Specify the shader type you want to be working on" ); - - protected GUIContent[] m_availableCategoryLabels; - protected MasterNodeCategoriesData[] m_availableCategories; - - [SerializeField] - private List<PropertyNode> m_propertyNodesVisibleList = new List<PropertyNode>(); - - private ReorderableList m_propertyReordableList; - protected bool m_propertyOrderChanged = false; - //private int m_availableCount = 0; - private int m_lastCount = 0; - - private GUIStyle m_propertyAdjustment; - protected bool m_shaderNameIsTitle = true; - - void CommonInit() - { - m_currentMaterial = null; - m_masterNodeIconCoords = new Rect( 0, 0, 64, 64 ); - m_isMainOutputNode = false; - m_connStatus = NodeConnectionStatus.Connected; - m_activeType = GetType(); - m_currentPrecisionType = PrecisionType.Float; - m_textLabelWidth = 120; - m_shaderNameContent = new GUIContent( ShaderNameStr, string.Empty ); - - AddMasterPorts(); - } - - void InitAvailableCategories() - { - int templateCount = m_containerGraph.ParentWindow.TemplatesManagerInstance.TemplateCount; - m_availableCategories = new MasterNodeCategoriesData[ templateCount + 1 ]; - m_availableCategoryLabels = new GUIContent[ templateCount + 1 ]; - - m_availableCategories[ 0 ] = new MasterNodeCategoriesData( AvailableShaderTypes.SurfaceShader, string.Empty ); - m_availableCategoryLabels[ 0 ] = new GUIContent( "Surface" ); - - for( int i = 0; i < templateCount; i++ ) - { - int idx = i + 1; - TemplateDataParent templateData = m_containerGraph.ParentWindow.TemplatesManagerInstance.GetTemplate( i ); - m_availableCategories[ idx ] = new MasterNodeCategoriesData( AvailableShaderTypes.Template, templateData.GUID ); - m_availableCategoryLabels[ idx ] = new GUIContent( templateData.Name ); - } - } - - public void SetMasterNodeCategoryFromGUID( string GUID ) - { - if( m_availableCategories == null ) - InitAvailableCategories(); - - m_masterNodeCategory = 0; - for( int i = 1; i < m_availableCategories.Length; i++ ) - { - if( m_availableCategories[ i ].Name.Equals( GUID ) ) - m_masterNodeCategory = i; - } - - } - - public override void SetupNodeCategories() - { - //base.SetupNodeCategories(); - ContainerGraph.ResetNodesData(); - int count = m_inputPorts.Count; - for( int i = 0; i < count; i++ ) - { - if( m_inputPorts[ i ].IsConnected ) - { - NodeData nodeData = new NodeData( m_inputPorts[ i ].Category ); - ParentNode node = m_inputPorts[ i ].GetOutputNode(); - node.PropagateNodeData( nodeData, ref m_currentDataCollector ); - } - else if( m_inputPorts[ i ].HasExternalLink ) - { - InputPort linkedPort = m_inputPorts[ i ].ExternalLink; - if( linkedPort != null && linkedPort.IsConnected ) - { - NodeData nodeData = new NodeData( linkedPort.Category ); - ParentNode node = linkedPort.GetOutputNode(); - node.PropagateNodeData( nodeData, ref m_currentDataCollector ); - } - } - } - } - - public virtual void RefreshAvailableCategories() - { - InitAvailableCategories(); - } - - public virtual void AddMasterPorts() { } - - public virtual void ForcePortType() { } - - public virtual void UpdateMasterNodeMaterial( Material material ) { } - - public virtual void SetName( string name ) { } - - public void CopyFrom( MasterNode other ) - { - Vec2Position = other.Vec2Position; - CurrentShader = other.CurrentShader; - CurrentMaterial = other.CurrentMaterial; - ShaderName = other.ShaderName; - m_masterNodeCategory = other.CurrentMasterNodeCategoryIdx; - } - - protected void DrawCurrentShaderType() - { - if( m_availableCategories == null ) - InitAvailableCategories(); - - int oldType = m_masterNodeCategory; - m_masterNodeCategory = EditorGUILayoutPopup( m_categoryLabel, m_masterNodeCategory, m_availableCategoryLabels ); - if( oldType != m_masterNodeCategory ) - { - m_containerGraph.ParentWindow.ReplaceMasterNode( m_availableCategories[ m_masterNodeCategory ], false ); - } - } - - protected void DrawCustomInspector( bool dropdown ) - { -#if !UNITY_2018_3_OR_NEWER - dropdown = false; -#else - if( ASEPackageManagerHelper.CurrentHDVersion <= ASESRPVersions.ASE_SRP_5_16_1 ) - dropdown = false; -#endif - - EditorGUILayout.BeginHorizontal(); - m_customInspectorName = EditorGUILayoutTextField( CustomInspectorStr, m_customInspectorName ); - if( !dropdown ) - { - if( GUILayoutButton( string.Empty, UIUtils.GetCustomStyle( CustomStyle.ResetToDefaultInspectorButton ), GUILayout.Width( 15 ), GUILayout.Height( 15 ) ) ) - { - GUIUtility.keyboardControl = 0; - m_customInspectorName = Constants.DefaultCustomInspector; - } - } - else - { - if( GUILayoutButton( string.Empty, UIUtils.InspectorPopdropdownFallback, GUILayout.Width( 17 ), GUILayout.Height( 19 ) ) ) - { - EditorGUI.FocusTextInControl( null ); - GUI.FocusControl( null ); - - GenericMenu menu = new GenericMenu(); - AddMenuItem( menu, Constants.DefaultCustomInspector ); -#if UNITY_2018_3_OR_NEWER - if( ASEPackageManagerHelper.CurrentHDVersion > ASESRPVersions.ASE_SRP_6_9_1 ) - { - AddMenuItem( menu, "UnityEditor.Rendering.HighDefinition.HDLitGUI" ); - AddMenuItem( menu, "UnityEditor.ShaderGraph.PBRMasterGUI" ); - } - else - { - AddMenuItem( menu, "UnityEditor.Experimental.Rendering.HDPipeline.HDLitGUI" ); - } -#else - AddMenuItem( menu, "UnityEditor.Experimental.Rendering.HDPipeline.HDLitGUI" ); -#endif - menu.ShowAsContext(); - } - } - EditorGUILayout.EndHorizontal(); - } - - private void AddMenuItem( GenericMenu menu, string newClass ) - { - menu.AddItem( new GUIContent( newClass ), m_customInspectorName.Equals( newClass ), OnSelection, newClass ); - } - - private void OnSelection( object newClass ) - { - m_customInspectorName = (string)newClass; - } - - protected void DrawShaderName() - { - EditorGUI.BeginChangeCheck(); - string newShaderName = EditorGUILayoutTextField( m_shaderNameContent, m_shaderName ); - if( EditorGUI.EndChangeCheck() ) - { - if( newShaderName.Length > 0 ) - { - newShaderName = UIUtils.RemoveShaderInvalidCharacters( newShaderName ); - } - else - { - newShaderName = Constants.DefaultShaderName; - } - ShaderName = newShaderName; - ContainerGraph.ParentWindow.UpdateTabTitle( ShaderName, true ); - } - m_shaderNameContent.tooltip = m_shaderName; - } - - public void DrawShaderKeywords() - { - if( m_addShaderKeywordStyle == null ) - m_addShaderKeywordStyle = UIUtils.PlusStyle; - - if( m_removeShaderKeywordStyle == null ) - m_removeShaderKeywordStyle = UIUtils.MinusStyle; - - if( m_smallAddShaderKeywordItemStyle == null ) - m_smallAddShaderKeywordItemStyle = UIUtils.PlusStyle; - - if( m_smallRemoveShaderKeywordStyle == null ) - m_smallRemoveShaderKeywordStyle = UIUtils.MinusStyle; - - EditorGUILayout.BeginHorizontal(); - { - m_shaderKeywordsFoldout = EditorGUILayout.Foldout( m_shaderKeywordsFoldout, ShaderKeywordsStr ); - - // Add keyword - if( GUILayout.Button( string.Empty, m_addShaderKeywordStyle ) ) - { - m_shaderKeywords.Insert( 0, "" ); - } - - //Remove keyword - if( GUILayout.Button( string.Empty, m_removeShaderKeywordStyle ) ) - { - m_shaderKeywords.RemoveAt( m_shaderKeywords.Count - 1 ); - } - } - EditorGUILayout.EndHorizontal(); - - if( m_shaderKeywordsFoldout ) - { - EditorGUI.indentLevel += 1; - int itemCount = m_shaderKeywords.Count; - int markedToDelete = -1; - for( int i = 0; i < itemCount; i++ ) - { - EditorGUILayout.BeginHorizontal(); - { - GUILayout.Label( " " ); - // Add new port - if( GUILayoutButton( string.Empty, m_smallAddShaderKeywordItemStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - m_shaderKeywords.Insert( i, "" ); - } - - //Remove port - if( GUILayoutButton( string.Empty, m_smallRemoveShaderKeywordStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - markedToDelete = i; - } - } - EditorGUILayout.EndHorizontal(); - } - if( markedToDelete > -1 ) - { - m_shaderKeywords.RemoveAt( markedToDelete ); - } - EditorGUI.indentLevel -= 1; - } - } - - public override void Draw( DrawInfo drawInfo ) - { - if( m_availableCategories == null ) - InitAvailableCategories(); - - base.Draw( drawInfo ); - } - - public override void OnNodeRepaint( DrawInfo drawInfo ) - { - base.OnNodeRepaint( drawInfo ); - - if( m_isMainOutputNode ) - { - if( m_masterNodeOnTex == null ) - { - m_masterNodeOnTex = UIUtils.MasterNodeOnTexture; - } - - if( m_masterNodeOffTex == null ) - { - m_masterNodeOffTex = UIUtils.MasterNodeOffTexture; - } - - if( m_gpuInstanceOnTex == null ) - { - m_gpuInstanceOnTex = UIUtils.GPUInstancedOnTexture; - } - - if( m_gpuInstanceOffTex == null ) - { - m_gpuInstanceOffTex = UIUtils.GPUInstancedOffTexture; - } - - m_masterNodeIconCoords = m_globalPosition; - m_masterNodeIconCoords.x += m_globalPosition.width - m_masterNodeOffTex.width * drawInfo.InvertedZoom; - m_masterNodeIconCoords.y += m_globalPosition.height - m_masterNodeOffTex.height * drawInfo.InvertedZoom; - m_masterNodeIconCoords.width = m_masterNodeOffTex.width * drawInfo.InvertedZoom; - m_masterNodeIconCoords.height = m_masterNodeOffTex.height * drawInfo.InvertedZoom; - - GUI.DrawTexture( m_masterNodeIconCoords, m_masterNodeOffTex ); - - if( m_gpuInstanceOnTex == null ) - { - m_gpuInstanceOnTex = UIUtils.GPUInstancedOnTexture; - } - } - } - - protected void DrawInstancedIcon( DrawInfo drawInfo ) - { - if( m_gpuInstanceOffTex == null || drawInfo.CurrentEventType != EventType.Repaint ) - return; - - m_masterNodeIconCoords = m_globalPosition; - m_masterNodeIconCoords.x += m_globalPosition.width - 5 - m_gpuInstanceOffTex.width * drawInfo.InvertedZoom; - m_masterNodeIconCoords.y += m_headerPosition.height; - m_masterNodeIconCoords.width = m_gpuInstanceOffTex.width * drawInfo.InvertedZoom; - m_masterNodeIconCoords.height = m_gpuInstanceOffTex.height * drawInfo.InvertedZoom; - GUI.DrawTexture( m_masterNodeIconCoords, m_gpuInstanceOffTex ); - } - //public override void DrawProperties() - //{ - // base.DrawProperties(); - // //EditorGUILayout.LabelField( _shaderTypeLabel ); - //} - - public override void WriteToString( ref string nodeInfo, ref string connectionsInfo ) - { - base.WriteToString( ref nodeInfo, ref connectionsInfo ); - //IOUtils.AddFieldValueToString( ref nodeInfo, m_isMainMasterNode ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_shaderModelIdx ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_customInspectorName ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_shaderLOD ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_masterNodeCategory ); - } - - public override void ReadFromString( ref string[] nodeParams ) - { - base.ReadFromString( ref nodeParams ); - if( UIUtils.CurrentShaderVersion() > 21 ) - { - m_shaderModelIdx = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - if( UIUtils.CurrentShaderVersion() < 17005 ) - { - string val = GetCurrentParam( ref nodeParams ); - if( m_customPrecision ) - { - if( val.Equals( "Fixed" ) ) - m_currentPrecisionType = PrecisionType.Half; - else - m_currentPrecisionType = (PrecisionType)Enum.Parse( typeof( PrecisionType ), val ); - } - else - { - m_currentPrecisionType = PrecisionType.Inherit; - } - } - } - - if( UIUtils.CurrentShaderVersion() > 2404 ) - { - m_customInspectorName = GetCurrentParam( ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 6101 ) - { - ShaderLOD = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - } - - if( UIUtils.CurrentShaderVersion() >= 13001 ) - { - //Debug.LogWarning( "Add correct version as soon as it is merged into master" ); - m_masterNodeCategory = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - } - } - - public override void OnInputPortConnected( int portId, int otherNodeId, int otherPortId, bool activateNode = true ) - { - if( activateNode ) - { - InputPort port = GetInputPortByUniqueId( portId ); - port.GetOutputNode().ActivateNode( UniqueId, portId, m_activeType ); - } - } - - public void FireMaterialChangedEvt() - { - if( OnMaterialUpdatedEvent != null ) - { - OnMaterialUpdatedEvent( this ); - } - } - - public void FireShaderChangedEvt() - { - if( OnShaderUpdatedEvent != null ) - OnShaderUpdatedEvent( this ); - } - - public void RegisterStandaloneFuntions() - { - List<CustomExpressionNode> nodes = m_containerGraph.CustomExpressionOnFunctionMode.NodesList; - int count = nodes.Count; - Dictionary<int, CustomExpressionNode> examinedNodes = new Dictionary<int, CustomExpressionNode>(); - for( int i = 0; i < count; i++ ) - { - if( nodes[ i ].AutoRegisterMode ) - { - nodes[ i ].CheckDependencies( ref m_currentDataCollector, ref examinedNodes ); - } - } - examinedNodes.Clear(); - examinedNodes = null; - } - - // What operation this node does - public virtual void Execute( Shader selectedShader ) - { - Execute( AssetDatabase.GetAssetPath( selectedShader ), false ); - } - - public virtual Shader Execute( string pathname, bool isFullPath ) - { - ContainerGraph.ResetNodesLocalVariables(); - m_currentDataCollector = new MasterNodeDataCollector( this ); - return null; - } - - protected void SortInputPorts( ref List<InputPort> vertexPorts, ref List<InputPort> fragmentPorts ) - { - for( int i = 0; i < m_inputPorts.Count; i++ ) - { - if( m_inputPorts[ i ].Category == MasterNodePortCategory.Fragment || m_inputPorts[ i ].Category == MasterNodePortCategory.Debug ) - { - if( fragmentPorts != null ) - fragmentPorts.Add( m_inputPorts[ i ] ); - } - else - { - if( vertexPorts != null ) - vertexPorts.Add( m_inputPorts[ i ] ); - } - } - - if( fragmentPorts.Count > 0 ) - { - fragmentPorts.Sort( ( x, y ) => x.OrderId.CompareTo( y.OrderId ) ); - } - - if( vertexPorts.Count > 0 ) - { - vertexPorts.Sort( ( x, y ) => x.OrderId.CompareTo( y.OrderId ) ); - } - } - - protected void UpdateShaderAsset( ref string pathname, ref string shaderBody, bool isFullPath ) - { - // Generate Graph info - shaderBody += ContainerGraph.ParentWindow.GenerateGraphInfo(); - - //TODO: Remove current SaveDebugShader and uncomment SaveToDisk as soon as pathname is editable - if( !String.IsNullOrEmpty( pathname ) ) - { - IOUtils.StartSaveThread( shaderBody, ( isFullPath ? pathname : ( IOUtils.dataPath + pathname ) ) ); - } - else - { - IOUtils.StartSaveThread( shaderBody, Application.dataPath + "/AmplifyShaderEditor/Samples/Shaders/" + m_shaderName + ".shader" ); - } - - - if( CurrentShader == null ) - { - AssetDatabase.Refresh( ImportAssetOptions.ForceUpdate ); - CurrentShader = Shader.Find( ShaderName ); - } - //else - //{ - // // need to always get asset datapath because a user can change and asset location from the project window - // AssetDatabase.ImportAsset( AssetDatabase.GetAssetPath( m_currentShader ) ); - // //ShaderUtil.UpdateShaderAsset( m_currentShader, ShaderBody ); - // //ShaderImporter importer = (ShaderImporter)ShaderImporter.GetAtPath( AssetDatabase.GetAssetPath( CurrentShader ) ); - // //importer.SaveAndReimport(); - //} - - if( m_currentShader != null ) - { - m_currentDataCollector.UpdateShaderImporter( ref m_currentShader ); - if( m_currentMaterial != null ) - { - if( m_currentMaterial.shader != m_currentShader ) - m_currentMaterial.shader = m_currentShader; - - //m_currentDataCollector.UpdateMaterialOnPropertyNodes( m_currentMaterial ); - //This master node UpdateMaterial is needed on Standard Surface node to update its internal properties - UpdateMaterial( m_currentMaterial ); - - UIUtils.CurrentWindow.OutsideGraph.UpdateMaterialOnPropertyNodes( m_currentMaterial ); - - FireMaterialChangedEvt(); - // need to always get asset datapath because a user can change and asset location from the project window - //AssetDatabase.ImportAsset( AssetDatabase.GetAssetPath( m_currentMaterial ) ); - } - - } - - m_currentDataCollector.Destroy(); - m_currentDataCollector = null; - } - - - public void InvalidateMaterialPropertyCount() - { - m_lastCount = -1; - } - - private void RefreshVisibleList( ref List<PropertyNode> allNodes ) - { - // temp reference for lambda expression - List<PropertyNode> nodes = allNodes; - m_propertyNodesVisibleList.Clear(); - - for( int i = 0; i < nodes.Count; i++ ) - { - ReordenatorNode rnode = nodes[ i ] as ReordenatorNode; - if( ( rnode == null || !rnode.IsInside ) && ( !m_propertyNodesVisibleList.Exists( x => x.PropertyName.Equals( nodes[ i ].PropertyName ) ) ) ) - m_propertyNodesVisibleList.Add( nodes[ i ] ); - } - - m_propertyNodesVisibleList.Sort( ( x, y ) => { return x.OrderIndex.CompareTo( y.OrderIndex ); } ); - } - - public void DrawMaterialInputs( GUIStyle toolbarstyle, bool style = true ) - { - m_propertyOrderChanged = false; - Color cachedColor = GUI.color; - GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, 0.5f ); - EditorGUILayout.BeginHorizontal( toolbarstyle ); - GUI.color = cachedColor; - - EditorGUI.BeginChangeCheck(); - if( style ) - { - ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedProperties = GUILayoutToggle( ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedProperties, PropertyOrderFoldoutStr, UIUtils.MenuItemToggleStyle ); - } - else - { - ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedProperties = GUILayoutToggle( ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedProperties, PropertyOrderTemplateFoldoutStr, UIUtils.MenuItemToggleStyle ); - } - - if( EditorGUI.EndChangeCheck() ) - { - EditorPrefs.SetBool( "ExpandedProperties", ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedProperties ); - } - - EditorGUILayout.EndHorizontal(); - if( !ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedProperties ) - return; - - cachedColor = GUI.color; - GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, ( EditorGUIUtility.isProSkin ? 0.5f : 0.25f ) ); - EditorGUILayout.BeginVertical( UIUtils.MenuItemBackgroundStyle ); - GUI.color = cachedColor; - - List<PropertyNode> nodes = UIUtils.PropertyNodesList(); - - if( nodes.Count != m_lastCount ) - { - RefreshVisibleList( ref nodes ); - m_lastCount = nodes.Count; - } - - if( m_propertyReordableList == null ) - { - m_propertyReordableList = new ReorderableList( m_propertyNodesVisibleList, typeof( PropertyNode ), true, false, false, false ) - { - headerHeight = 0, - footerHeight = 0, - showDefaultBackground = false, - - drawElementCallback = ( Rect rect, int index, bool isActive, bool isFocused ) => - { - var first = rect; - first.width *= 0.60f; - EditorGUI.LabelField( first, m_propertyNodesVisibleList[ index ].PropertyInspectorName ); - var second = rect; - second.width *= 0.4f; - second.x += first.width; - if( GUI.Button( second, m_propertyNodesVisibleList[ index ].PropertyName, new GUIStyle( "AssetLabel Partial" ) ) ) - { - UIUtils.FocusOnNode( m_propertyNodesVisibleList[ index ], 1, false ); - } - }, - - onReorderCallback = ( list ) => - { - ReorderList( ref nodes ); - m_propertyOrderChanged = true; - //RecursiveLog(); - } - }; - ReorderList( ref nodes ); - } - - if( m_propertyReordableList != null ) - { - if( m_propertyAdjustment == null ) - { - m_propertyAdjustment = new GUIStyle(); - m_propertyAdjustment.padding.left = 17; - } - EditorGUILayout.BeginVertical( m_propertyAdjustment ); - m_propertyReordableList.DoLayoutList(); - EditorGUILayout.EndVertical(); - } - EditorGUILayout.EndVertical(); - } - - public void ForceReordering() - { - List<PropertyNode> nodes = UIUtils.PropertyNodesList(); - - if( nodes.Count != m_lastCount ) - { - RefreshVisibleList( ref nodes ); - m_lastCount = nodes.Count; - } - - ReorderList( ref nodes ); - //RecursiveLog(); - } - - private void RecursiveLog() - { - List<PropertyNode> nodes = UIUtils.PropertyNodesList(); - nodes.Sort( ( x, y ) => { return x.OrderIndex.CompareTo( y.OrderIndex ); } ); - for( int i = 0; i < nodes.Count; i++ ) - { - if( ( nodes[ i ] is ReordenatorNode ) ) - ( nodes[ i ] as ReordenatorNode ).RecursiveLog(); - else - Debug.Log( nodes[ i ].OrderIndex + " " + nodes[ i ].PropertyName ); - } - } - - private void ReorderList( ref List<PropertyNode> nodes ) - { - // clear lock list before reordering because of multiple sf being used - for( int i = 0; i < nodes.Count; i++ ) - { - ReordenatorNode rnode = nodes[ i ] as ReordenatorNode; - if( rnode != null ) - rnode.RecursiveClear(); - } - - int propoffset = 0; - int count = 0; - for( int i = 0; i < m_propertyNodesVisibleList.Count; i++ ) - { - ReordenatorNode renode = m_propertyNodesVisibleList[ i ] as ReordenatorNode; - if( renode != null ) - { - if( !renode.IsInside ) - { - m_propertyNodesVisibleList[ i ].OrderIndex = count + propoffset; - - if( renode.PropertyListCount > 0 ) - { - propoffset += renode.RecursiveCount(); - // the same reordenator can exist multiple times, apply ordering to all of them - for( int j = 0; j < nodes.Count; j++ ) - { - ReordenatorNode pnode = ( nodes[ j ] as ReordenatorNode ); - if( pnode != null && pnode.PropertyName.Equals( renode.PropertyName ) ) - { - pnode.OrderIndex = renode.RawOrderIndex; - pnode.RecursiveSetOrderOffset( renode.RawOrderIndex, true ); - } - } - } - else - { - count++; - } - } - else - { - m_propertyNodesVisibleList[ i ].OrderIndex = 0; - } - } - else - { - m_propertyNodesVisibleList[ i ].OrderIndex = count + propoffset; - count++; - } - } - } - - public void CopyPropertyListFrom( MasterNode masterNode ) - { - m_lastCount = masterNode.ReordableListLastCount; - m_propertyNodesVisibleList.Clear(); - m_propertyNodesVisibleList.AddRange( masterNode.PropertyNodesVisibleList ); - } - - public virtual void UpdateFromShader( Shader newShader ) { } - - public void ClearUpdateEvents() - { - OnShaderUpdatedEvent = null; - OnMaterialUpdatedEvent = null; - } - - public Material CurrentMaterial { get { return m_currentMaterial; } set { m_currentMaterial = value; } } - public Shader CurrentShader - { - set - { - if( value != null ) - { - SetName( value.name ); - } - - m_currentShader = value; - FireShaderChangedEvt(); - } - get { return m_currentShader; } - } - public virtual void OnRefreshLinkedPortsComplete() { } - public virtual void ReleaseResources() { } - public override void Destroy() - { - base.Destroy(); - OnMaterialUpdatedEvent = null; - OnShaderUpdatedEvent = null; - m_masterNodeOnTex = null; - m_masterNodeOffTex = null; - m_gpuInstanceOnTex = null; - m_gpuInstanceOffTex = null; - m_addShaderKeywordStyle = null; - m_removeShaderKeywordStyle = null; - m_smallAddShaderKeywordItemStyle = null; - m_smallRemoveShaderKeywordStyle = null; - m_shaderKeywords.Clear(); - m_shaderKeywords = null; - m_propertyReordableList = null; - m_propertyAdjustment = null; - if( m_currentDataCollector != null ) - { - m_currentDataCollector.Destroy(); - m_currentDataCollector = null; - } - } - - public static void OpenShaderBody( ref string result, string name ) - { - result += string.Format( "Shader \"{0}\"\n", name ) + "{\n"; - } - - public static void CloseShaderBody( ref string result ) - { - result += "}\n"; - } - - public static void OpenSubShaderBody( ref string result ) - { - result += "\n\tSubShader\n\t{\n"; - } - - public static void CloseSubShaderBody( ref string result ) - { - result += "\t}\n"; - } - - public static void AddShaderProperty( ref string result, string name, string value ) - { - result += string.Format( "\t{0} \"{1}\"\n", name, value ); - } - - public static void AddShaderPragma( ref string result, string value ) - { - result += string.Format( "\t\t#pragma {0}\n", value ); - } - - public static void AddRenderState( ref string result, string state, string stateParams ) - { - result += string.Format( "\t\t{0} {1}\n", state, stateParams ); - } - - public static void AddRenderTags( ref string result, string tags ) - { - result += string.Format( IndentationHelper, tags ); ; - } - - public static void AddShaderLOD( ref string result, int shaderLOD ) - { - if( shaderLOD > 0 ) - { - result += string.Format( ShaderLODFormat, shaderLOD ); - } - } - - public static void AddMultilineBody( ref string result, string[] lines ) - { - for( int i = 0; i < lines.Length; i++ ) - { - result += string.Format( IndentationHelper, lines[ i ] ); - } - } - - public static void OpenCGInclude( ref string result ) - { - result += "\t\tCGINCLUDE\n"; - } - - public static void OpenCGProgram( ref string result ) - { - result += "\t\tCGPROGRAM\n"; - } - - public static void CloseCGProgram( ref string result ) - { - result += "\n\t\tENDCG\n"; - } - - public string ShaderName - { - //get { return ( ( _isHidden ? "Hidden/" : string.Empty ) + ( String.IsNullOrEmpty( _shaderCategory ) ? "" : ( _shaderCategory + "/" ) ) + _shaderName ); } - get { return m_shaderName; } - set - { - m_shaderName = value; - string[] shaderNameArr = m_shaderName.Split( '/' ); - m_croppedShaderName = shaderNameArr[ shaderNameArr.Length - 1 ]; - - if( m_shaderNameIsTitle ) - m_content.text = GenerateClippedTitle( m_croppedShaderName ); - - m_sizeIsDirty = true; - } - } - public string CustomInspectorFormatted { get { return string.Format( CustomInspectorFormat, m_customInspectorName ); } } - public string CroppedShaderName { get { return m_croppedShaderName; } } - public AvailableShaderTypes CurrentMasterNodeCategory { get { return ( m_masterNodeCategory == 0 ) ? AvailableShaderTypes.SurfaceShader : AvailableShaderTypes.Template; } } - public int CurrentMasterNodeCategoryIdx { get { return m_masterNodeCategory; } } - public MasterNodeDataCollector CurrentDataCollector { get { return m_currentDataCollector; } set { m_currentDataCollector = value; } } - public List<PropertyNode> PropertyNodesVisibleList { get { return m_propertyNodesVisibleList; } } - public ReorderableList PropertyReordableList { get { return m_propertyReordableList; } } - public int ReordableListLastCount { get { return m_lastCount; } } - public MasterNodeCategoriesData CurrentCategoriesData { get { return m_availableCategories[ m_masterNodeCategory ]; } } - public int ShaderLOD - { - get { return m_shaderLOD; } - set - { - m_shaderLOD = Mathf.Max( 0, value ); - } - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/MasterNode.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/MasterNode.cs.meta deleted file mode 100644 index 8a8a9339..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/MasterNode.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 7fc2c839ab9f3a045877b59493c51502 -timeCreated: 1481126957 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/MasterNodeDataCollector.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/MasterNodeDataCollector.cs deleted file mode 100644 index d6fce5fd..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/MasterNodeDataCollector.cs +++ /dev/null @@ -1,2038 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; -using System.Text.RegularExpressions; - -namespace AmplifyShaderEditor -{ - public class PropertyDataCollector - { - public int NodeId; - public int OrderIndex; - public string PropertyName; - public WirePortDataType DataType; - - public PropertyDataCollector( int nodeId, string propertyName, int orderIndex = -1 ) - { - NodeId = nodeId; - PropertyName = propertyName; - OrderIndex = orderIndex; - } - } - - public class InputCoordsCollector - { - public int NodeId; - public string CoordName; - public WirePortDataType DataType; - public PrecisionType Precision; - public int TextureSlot; - public int TextureIndex; - - public InputCoordsCollector( int nodeId, string coordName, WirePortDataType dataType, PrecisionType precision, int textureSlot, int textureIndex ) - { - NodeId = nodeId; - CoordName = coordName; - DataType = dataType; - Precision = precision; - TextureSlot = textureSlot; - TextureIndex = textureIndex; - } - } - - public class TextureDefaultsDataColector - { - private List<string> m_names = new List<string>(); - private List<Texture> m_values = new List<Texture>(); - public void AddValue( string newName, Texture newValue ) - { - m_names.Add( newName ); - m_values.Add( newValue ); - } - - public void Destroy() - { - m_names.Clear(); - m_names = null; - - m_values.Clear(); - m_values = null; - } - - public string[] NamesArr { get { return m_names.ToArray(); } } - public Texture[] ValuesArr { get { return m_values.ToArray(); } } - } - - public enum TextureChannelUsage - { - Not_Used, - Used, - Required - } - - public class MasterNodeDataCollector - { - private bool m_showDebugMessages = false; - private string m_input; - private string m_customInput; - private string m_properties; - private string m_instancedProperties; - private string m_instanceBlockName; - private string m_uniforms; - private string m_includes; - private string m_pragmas; - private string m_defines; - private string m_instructions; - private string m_localVariables; - private string m_vertexLocalVariables; - private string m_specialLocalVariables; - private string m_vertexData; - private string m_customOutput; - private string m_functions; - private string m_grabPass; - - private List<PropertyDataCollector> m_inputList; - private List<PropertyDataCollector> m_customInputList; - private List<PropertyDataCollector> m_propertiesList; - private List<PropertyDataCollector> m_instancedPropertiesList; - private List<PropertyDataCollector> m_dotsPropertiesList; - private List<PropertyDataCollector> m_dotsDefinesList; - private List<PropertyDataCollector> m_uniformsList; - private List<PropertyDataCollector> m_includesList; - private List<PropertyDataCollector> m_additionalDirectivesList; - //private List<PropertyDataCollector> m_tagsList; - private List<PropertyDataCollector> m_pragmasList; - private List<PropertyDataCollector> m_definesList; - private List<PropertyDataCollector> m_instructionsList; - private List<PropertyDataCollector> m_localVariablesList; - private List<PropertyDataCollector> m_vertexLocalVariablesList; - private List<PropertyDataCollector> m_specialLocalVariablesList; - private List<PropertyDataCollector> m_vertexDataList; - private List<PropertyDataCollector> m_customOutputList; - private List<PropertyDataCollector> m_functionsList; - private List<PropertyDataCollector> m_grabPassList; - private List<PropertyDataCollector> m_aboveUsePassesList; - private List<PropertyDataCollector> m_belowUsePassesList; - - private List<InputCoordsCollector> m_customShadowCoordsList; - private List<int> m_packSlotsList; - private string m_customAppDataItems; - - private Dictionary<string, PropertyDataCollector> m_inputDict; - private Dictionary<string, PropertyDataCollector> m_customInputDict; - private Dictionary<string, PropertyDataCollector> m_propertiesDict; - private Dictionary<string, PropertyDataCollector> m_instancedPropertiesDict; - private Dictionary<string, PropertyDataCollector> m_dotsPropertiesDict; - private Dictionary<string, PropertyDataCollector> m_uniformsDict; - private Dictionary<string, PropertyDataCollector> m_softRegisteredUniformsDict; - private Dictionary<string, PropertyDataCollector> m_includesDict; - private Dictionary<string, PropertyDataCollector> m_additionalDirectivesDict; - private Dictionary<string, string> m_includesExclusionDict; - - //private Dictionary<string, PropertyDataCollector> m_tagsDict; - private Dictionary<string, PropertyDataCollector> m_pragmasDict; - private Dictionary<string, PropertyDataCollector> m_definesDict; - private Dictionary<string, int> m_virtualCoordinatesDict; - private Dictionary<string, string> m_virtualVariablesDict; - private Dictionary<string, PropertyDataCollector> m_localVariablesDict; - private Dictionary<string, PropertyDataCollector> m_vertexLocalVariablesDict; - private Dictionary<string, PropertyDataCollector> m_specialLocalVariablesDict; - private Dictionary<string, PropertyDataCollector> m_vertexDataDict; - private Dictionary<string, PropertyDataCollector> m_customOutputDict; - private Dictionary<string, string> m_localFunctions; - private Dictionary<string, string> m_grabPassDict; - private Dictionary<string, string> m_usePassesDict; - private Dictionary<string, string> m_customAppDataItemsDict; - - private Dictionary<string, InputCoordsCollector> m_customShadowCoordsDict; - - private TextureChannelUsage[] m_requireTextureProperty = { TextureChannelUsage.Not_Used, TextureChannelUsage.Not_Used, TextureChannelUsage.Not_Used, TextureChannelUsage.Not_Used }; - - private bool m_dirtyAppData; - private bool m_dirtyInputs; - private bool m_dirtyCustomInputs; - private bool m_dirtyFunctions; - private bool m_dirtyProperties; - private bool m_dirtyInstancedProperties; - private bool m_dirtyUniforms; - private bool m_dirtyIncludes; - private bool m_dirtyPragmas; - private bool m_dirtyDefines; - private bool m_dirtyAdditionalDirectives; - private bool m_dirtyInstructions; - private bool m_dirtyLocalVariables; - private bool m_dirtyVertexLocalVariables; - private bool m_dirtySpecialLocalVariables; - private bool m_dirtyPerVertexData; - private bool m_dirtyNormal; - private bool m_forceNormal; - - private bool m_usingInternalData; - private bool m_usingVertexColor; - private bool m_usingWorldPosition; - private bool m_usingWorldNormal; - private bool m_usingScreenPos; - private bool m_usingWorldReflection; - private bool m_usingViewDirection; - private bool m_usingLightAttenuation; - private bool m_usingArrayDerivatives; - - private bool m_usingHigherSizeTexcoords; - private bool m_usingCustomScreenPos; - - private bool m_usingCustomOutlineColor; - private bool m_usingCustomOutlineWidth; - private bool m_usingCustomOutlineAlpha; - private int m_customOutlineSelectedAlpha = 0; - private bool m_usingCustomOutput; - - private bool m_safeNormalizeLightDir; - private bool m_safeNormalizeViewDir; - - private bool m_isOutlineDataCollector = false; - - private bool m_forceNormalIsDirty; - private bool m_grabPassIsDirty; - private bool m_tesselationActive; - - private Dictionary<int, PropertyNode> m_propertyNodes; - private MasterNode m_masterNode; - - private int m_availableVertexTempId = 0; - private int m_availableFragTempId = 0; - - private MasterNodePortCategory m_portCategory; - private PortGenType m_genType; - private RenderPath m_renderPath = RenderPath.All; - private NodeAvailability m_currentCanvasMode = NodeAvailability.SurfaceShader; - - //Templates specific data - private AvailableShaderTypes m_masterNodeCategory; - private List<string> m_vertexInputList; - private Dictionary<string, string> m_vertexInputDict; - private List<string> m_interpolatorsList; - private Dictionary<string, string> m_interpolatorsDict; - private List<string> m_vertexInterpDeclList; - private Dictionary<string, string> m_vertexInterpDeclDict; - private TemplateDataCollector m_templateDataCollector; - - public MasterNodeDataCollector( MasterNode masterNode ) : this() - { - m_masterNode = masterNode; - m_masterNodeCategory = masterNode.CurrentMasterNodeCategory; - m_currentCanvasMode = masterNode.ContainerGraph.CurrentCanvasMode; - } - - public MasterNodeDataCollector() - { - //m_masterNode = masterNode; - m_input = "struct Input\n\t\t{\n"; - m_customInput = "\t\tstruct SurfaceOutput{0}\n\t\t{\n"; - m_properties = IOUtils.PropertiesBegin;//"\tProperties\n\t{\n"; - m_uniforms = string.Empty; - m_instructions = string.Empty; - m_includes = string.Empty; - m_pragmas = string.Empty; - m_defines = string.Empty; - m_localVariables = string.Empty; - m_specialLocalVariables = string.Empty; - m_customOutput = string.Empty; - - m_inputList = new List<PropertyDataCollector>(); - m_customInputList = new List<PropertyDataCollector>(); - m_propertiesList = new List<PropertyDataCollector>(); - m_instancedPropertiesList = new List<PropertyDataCollector>(); - m_dotsPropertiesList = new List<PropertyDataCollector>(); - m_dotsDefinesList = new List<PropertyDataCollector>(); - m_uniformsList = new List<PropertyDataCollector>(); - m_includesList = new List<PropertyDataCollector>(); - m_additionalDirectivesList = new List<PropertyDataCollector>(); - //m_tagsList = new List<PropertyDataCollector>(); - m_pragmasList = new List<PropertyDataCollector>(); - m_definesList = new List<PropertyDataCollector>(); - m_instructionsList = new List<PropertyDataCollector>(); - m_localVariablesList = new List<PropertyDataCollector>(); - m_vertexLocalVariablesList = new List<PropertyDataCollector>(); - m_specialLocalVariablesList = new List<PropertyDataCollector>(); - m_vertexDataList = new List<PropertyDataCollector>(); - m_customOutputList = new List<PropertyDataCollector>(); - m_functionsList = new List<PropertyDataCollector>(); - m_grabPassList = new List<PropertyDataCollector>(); - m_aboveUsePassesList = new List<PropertyDataCollector>(); - m_belowUsePassesList = new List<PropertyDataCollector>(); - m_customAppDataItems = string.Empty; - m_customAppDataItemsDict = new Dictionary<string, string>(); - m_customShadowCoordsList = new List<InputCoordsCollector>(); - m_packSlotsList = new List<int>(); - - m_inputDict = new Dictionary<string, PropertyDataCollector>(); - m_customInputDict = new Dictionary<string, PropertyDataCollector>(); - - m_propertiesDict = new Dictionary<string, PropertyDataCollector>(); - m_instancedPropertiesDict = new Dictionary<string, PropertyDataCollector>(); - m_dotsPropertiesDict = new Dictionary<string, PropertyDataCollector>(); - m_uniformsDict = new Dictionary<string, PropertyDataCollector>(); - m_softRegisteredUniformsDict = new Dictionary<string, PropertyDataCollector>(); - m_includesDict = new Dictionary<string, PropertyDataCollector>(); - m_additionalDirectivesDict = new Dictionary<string, PropertyDataCollector>(); - m_includesExclusionDict = new Dictionary<string, string>(); - - //m_tagsDict = new Dictionary<string, PropertyDataCollector>(); - m_pragmasDict = new Dictionary<string, PropertyDataCollector>(); - m_definesDict = new Dictionary<string, PropertyDataCollector>(); - m_virtualCoordinatesDict = new Dictionary<string, int>(); - m_localVariablesDict = new Dictionary<string, PropertyDataCollector>(); - m_virtualVariablesDict = new Dictionary<string, string>(); - m_specialLocalVariablesDict = new Dictionary<string, PropertyDataCollector>(); - m_vertexLocalVariablesDict = new Dictionary<string, PropertyDataCollector>(); - m_localFunctions = new Dictionary<string, string>(); - m_vertexDataDict = new Dictionary<string, PropertyDataCollector>(); - m_customOutputDict = new Dictionary<string, PropertyDataCollector>(); - m_grabPassDict = new Dictionary<string, string>(); - m_usePassesDict = new Dictionary<string, string>(); - - m_customShadowCoordsDict = new Dictionary<string, InputCoordsCollector>(); - - m_dirtyAppData = false; - m_dirtyInputs = false; - m_dirtyCustomInputs = false; - m_dirtyProperties = false; - m_dirtyInstancedProperties = false; - m_dirtyUniforms = false; - m_dirtyInstructions = false; - m_dirtyIncludes = false; - m_dirtyPragmas = false; - m_dirtyDefines = false; - m_dirtyAdditionalDirectives = false; - m_dirtyLocalVariables = false; - m_dirtySpecialLocalVariables = false; - m_grabPassIsDirty = false; - - m_portCategory = MasterNodePortCategory.Fragment; - m_propertyNodes = new Dictionary<int, PropertyNode>(); - m_showDebugMessages = ( m_showDebugMessages && DebugConsoleWindow.DeveloperMode ); - - //templates - //m_masterNodeCategory = masterNode.CurrentMasterNodeCategory; - - m_vertexInputList = new List<string>(); - m_vertexInputDict = new Dictionary<string, string>(); - - m_interpolatorsList = new List<string>(); - m_interpolatorsDict = new Dictionary<string, string>(); - - m_vertexInterpDeclList = new List<string>(); - m_vertexInterpDeclDict = new Dictionary<string, string>(); - - m_templateDataCollector = new TemplateDataCollector(); - } - - public void SetChannelUsage( int channelId, TextureChannelUsage usage ) - { - if( channelId > -1 && channelId < 4 ) - m_requireTextureProperty[ channelId ] = usage; - } - - public TextureChannelUsage GetChannelUsage( int channelId ) - { - if( channelId > -1 && channelId < 4 ) - return m_requireTextureProperty[ channelId ]; - - return TextureChannelUsage.Not_Used; - } - public string SurfaceVertexStructure { get { return ( m_dirtyAppData ? Constants.CustomAppDataFullName : Constants.AppDataFullName ); } } - public void OpenPerVertexHeader( bool includeCustomData ) - { - string appData = "inout " + ( m_dirtyAppData ? Constants.CustomAppDataFullName : Constants.AppDataFullName ) + " "; - if( m_dirtyPerVertexData ) - return; - - m_dirtyPerVertexData = true; - if( m_tesselationActive ) - { - m_vertexData = "\t\tvoid " + Constants.VertexDataFunc + "( " + appData + Constants.VertexShaderInputStr + " )\n\t\t{\n"; - } - else - { - m_vertexData = "\t\tvoid " + Constants.VertexDataFunc + "( " + appData + Constants.VertexShaderInputStr + ( includeCustomData ? ( string.Format( ", out Input {0}", Constants.VertexShaderOutputStr ) ) : string.Empty ) + " )\n\t\t{\n"; - if( includeCustomData ) - m_vertexData += string.Format( "\t\t\tUNITY_INITIALIZE_OUTPUT( Input, {0} );\n", Constants.VertexShaderOutputStr ); - } - } - - public void ClosePerVertexHeader() - { - if( m_dirtyPerVertexData ) - m_vertexData += "\t\t}\n\n"; - } - - public void AddToVertexDisplacement( string value, VertexMode vertexMode ) - { - if( string.IsNullOrEmpty( value ) ) - return; - - if( !m_dirtyPerVertexData ) - { - OpenPerVertexHeader( true ); - } - - switch( vertexMode ) - { - default: - case VertexMode.Relative: - { - m_vertexData += "\t\t\t" + Constants.VertexShaderInputStr + ".vertex.xyz += " + value + ";\n"; - } - break; - case VertexMode.Absolute: - { - m_vertexData += "\t\t\t" + Constants.VertexShaderInputStr + ".vertex.xyz = " + value + ";\n"; - } - break; - } - } - - - public void AddToVertexNormal( string value ) - { - if( string.IsNullOrEmpty( value ) ) - return; - - if( !m_dirtyPerVertexData ) - { - OpenPerVertexHeader( true ); - } - - m_vertexData += "\t\t\t" + Constants.VertexShaderInputStr + ".normal = " + value + ";\n"; - } - - - public void AddVertexInstruction( string value, int nodeId = -1, bool addDelimiters = true ) - { - if( !m_dirtyPerVertexData && !IsOutlineDataCollector/*&& !(m_usingCustomOutlineColor || m_usingCustomOutlineWidth)*/ ) - { - OpenPerVertexHeader( true ); - } - if( !m_vertexDataDict.ContainsKey( value ) ) - { - m_vertexDataDict.Add( value, new PropertyDataCollector( nodeId, value ) ); - m_vertexDataList.Add( m_vertexDataDict[ value ] ); - m_vertexData += ( addDelimiters ? ( "\t\t\t" + value + ";\n" ) : value ); - } - } - - public bool ContainsInput( string value ) - { - return m_inputDict.ContainsKey( value ); - } - - public void AddToInput( int nodeId, string interpName, WirePortDataType dataType, PrecisionType precision = PrecisionType.Float, bool addSemiColon = true ) - { - string value = UIUtils.PrecisionWirePortToCgType( precision, dataType ) + " " + interpName; - AddToInput( nodeId, value, addSemiColon ); - - if( !m_customShadowCoordsDict.ContainsKey( interpName ) ) - { - int slot = 0; - int index = 0; - int size = UIUtils.GetChannelsAmount( dataType ); - - if( m_packSlotsList.Count == 0 ) - m_packSlotsList.Add( 4 ); - - for( int i = 0; i < m_packSlotsList.Count; i++ ) - { - slot = i; - if( m_packSlotsList[ i ] >= size ) - { - index = 4 - m_packSlotsList[ i ]; - m_packSlotsList[ i ] -= size; - break; - } - else if( i == m_packSlotsList.Count - 1 ) - { - m_packSlotsList.Add( 4 ); - } - } - m_customShadowCoordsDict.Add( interpName, new InputCoordsCollector( nodeId, interpName, dataType, precision, slot, index ) ); - m_customShadowCoordsList.Add( m_customShadowCoordsDict[ interpName ] ); - } - } - - public void AddToInput( int nodeId, SurfaceInputs surfaceInput, PrecisionType precision = PrecisionType.Float, bool addSemiColon = true ) - { - switch( surfaceInput ) - { - case SurfaceInputs.VIEW_DIR: - UsingViewDirection = true; - break; - case SurfaceInputs.SCREEN_POS: - UsingScreenPos = true; - break; - case SurfaceInputs.WORLD_POS: - UsingWorldPosition = true; - break; - case SurfaceInputs.WORLD_REFL: - UsingWorldReflection = true; - break; - case SurfaceInputs.WORLD_NORMAL: - UsingWorldNormal = true; - break; - case SurfaceInputs.INTERNALDATA: - UsingInternalData = true; - break; - case SurfaceInputs.COLOR: - UsingVertexColor = true; - break; - } - - AddToInput( nodeId, UIUtils.GetInputDeclarationFromType( precision, surfaceInput ), addSemiColon ); - } - - /// <summary> - /// Direct access to inputs, plese use another overload - /// </summary> - /// <param name="nodeId"></param> - /// <param name="value"></param> - /// <param name="addSemiColon"></param> - public void AddToInput( int nodeId, string value, bool addSemiColon ) - { - if( string.IsNullOrEmpty( value ) ) - return; - - if( !m_inputDict.ContainsKey( value ) ) - { - m_inputDict.Add( value, new PropertyDataCollector( nodeId, value ) ); - m_inputList.Add( m_inputDict[ value ] ); - - m_input += "\t\t\t" + value + ( ( addSemiColon ) ? ( ";\n" ) : "\n" ); - m_dirtyInputs = true; - } - } - - public void CloseInputs() - { - m_input += "\t\t};"; - } - - public void ChangeCustomInputHeader( string value ) - { - m_customInput = m_customInput.Replace( "{0}", value ); - } - - public void AddToCustomInput( int nodeId, string value, bool addSemiColon ) - { - if( string.IsNullOrEmpty( value ) ) - return; - - if( !m_customInputDict.ContainsKey( value ) ) - { - m_customInputDict.Add( value, new PropertyDataCollector( nodeId, value ) ); - m_customInputList.Add( m_customInputDict[ value ] ); - m_customInput += "\t\t\t" + value + ( ( addSemiColon ) ? ( ";\n" ) : "\n" ); - m_dirtyCustomInputs = true; - } - } - - public void CloseCustomInputs() - { - m_customInput += "\t\t};"; - } - - - // Used by Template Master Node to add tabs into variable declaration - public void TabifyInstancedVars() - { - for( int i = 0; i < m_instancedPropertiesList.Count; i++ ) - { - m_instancedPropertiesList[ i ].PropertyName = '\t' + m_instancedPropertiesList[ i ].PropertyName; - } - } - - private int GetWeightForInstancedType( WirePortDataType type ) - { - switch( type ) - { - case WirePortDataType.INT: - case WirePortDataType.FLOAT: return -1; - case WirePortDataType.FLOAT2: return -2; - case WirePortDataType.FLOAT3: return -3; - case WirePortDataType.COLOR: - case WirePortDataType.FLOAT4: return -4; - case WirePortDataType.FLOAT3x3: return -9; - case WirePortDataType.FLOAT4x4: return -16; - default: - case WirePortDataType.OBJECT: - case WirePortDataType.SAMPLER1D: - case WirePortDataType.SAMPLER2D: - case WirePortDataType.SAMPLER3D: - case WirePortDataType.SAMPLERCUBE: - return 0; - } - } - - public void OptimizeInstancedProperties() - { - if( m_instancedPropertiesList.Count > 0 ) - { - m_instancedProperties = string.Empty; - m_instancedPropertiesList.Sort( ( x, y ) => { return GetWeightForInstancedType( x.DataType ).CompareTo( GetWeightForInstancedType( y.DataType ) ); } ); - int count = m_instancedPropertiesList.Count; - for( int i = 0; i < count; i++ ) - { - m_instancedProperties += m_instancedPropertiesList[ i ].PropertyName; - } - } - } - // Instanced properties - public void SetupInstancePropertiesBlock( string blockName ) - { - m_instanceBlockName = blockName; - if( IsTemplate ) - { - //if( DebugConsoleWindow.DeveloperMode ) - // Debug.LogWarning( "SetupInstancePropertiesBlock should not be used during template mode" ); - - return; - } - - OptimizeInstancedProperties(); - - if( m_dirtyInstancedProperties ) - { - m_instancedProperties = string.Format( IOUtils.InstancedPropertiesBeginTabs, blockName ) + m_instancedProperties + IOUtils.InstancedPropertiesEndTabs; - } - } - - public void AddToDotsProperties( WirePortDataType dataType, int nodeId, string value, int orderIndex, PrecisionType precision ) - { - if( string.IsNullOrEmpty( value ) ) - return; - - string prop = string.Format( IOUtils.DotsInstancedPropertiesData, UIUtils.PrecisionWirePortToCgType( precision, dataType ), value ); - string define = string.Format( IOUtils.DotsInstancedDefinesData, UIUtils.PrecisionWirePortToCgType( precision, dataType ), value ); - - if( !m_dotsPropertiesDict.ContainsKey( value ) ) - { - PropertyDataCollector dataColl = new PropertyDataCollector( nodeId, prop, orderIndex ); - dataColl.DataType = dataType; - m_dotsPropertiesDict.Add( value, dataColl ); - m_dotsPropertiesList.Add( dataColl ); - - dataColl = new PropertyDataCollector( nodeId, define, orderIndex ); - m_dotsDefinesList.Add( dataColl ); - } - } - - public void AddToInstancedProperties( WirePortDataType dataType, int nodeId, string value, int orderIndex ) - { - if( string.IsNullOrEmpty( value ) ) - return; - string uniformValue = value.Contains( "uniform" ) ? value : "uniform " + value; - if( !m_instancedPropertiesDict.ContainsKey( value ) && - !m_uniformsDict.ContainsKey( value ) && - !m_uniformsDict.ContainsKey( uniformValue ) - ) - { - PropertyDataCollector dataColl = new PropertyDataCollector( nodeId, value, orderIndex ); - dataColl.DataType = dataType; - m_instancedPropertiesDict.Add( value, dataColl ); - m_instancedPropertiesList.Add( dataColl ); - m_instancedProperties += value; - m_dirtyInstancedProperties = true; - } - } - - public void CloseInstancedProperties() - { - if( m_dirtyInstancedProperties ) - { - m_instancedProperties += IOUtils.InstancedPropertiesEnd; - } - } - - // Properties - public void CopyPropertiesFromDataCollector( MasterNodeDataCollector dataCollector ) - { - if( dataCollector == null ) - return; - - int propertyCount = dataCollector.PropertiesList.Count; - for( int i = 0; i < propertyCount; i++ ) - { - AddToProperties( dataCollector.PropertiesList[ i ].NodeId, - dataCollector.PropertiesList[ i ].PropertyName, - dataCollector.PropertiesList[ i ].OrderIndex ); - } - - foreach( KeyValuePair<string, string> kvp in dataCollector.GrabPassDict ) - { - AddGrabPass( kvp.Value ); - } - - m_templateDataCollector.CopySRPPropertiesFromDataCollector( -1, dataCollector.TemplateDataCollectorInstance ); - } - - public void AddToProperties( int nodeId, string value, int orderIndex ) - { - if( string.IsNullOrEmpty( value ) ) - return; - - if( !m_propertiesDict.ContainsKey( value ) ) - { - //Debug.Log( UIUtils ); - m_propertiesDict.Add( value, new PropertyDataCollector( nodeId, value, orderIndex ) ); - m_propertiesList.Add( m_propertiesDict[ value ] ); - m_properties += string.Format( IOUtils.PropertiesElement, value ); - m_dirtyProperties = true; - } - } - - public string BuildPropertiesString() - { - List<PropertyDataCollector> list = new List<PropertyDataCollector>( m_propertiesDict.Values ); - //for ( int i = 0; i < list.Count; i++ ) - //{ - // Debug.Log( list[ i ].OrderIndex + " " + list[ i ].PropertyName ); - //} - - list.Sort( ( x, y ) => { return x.OrderIndex.CompareTo( y.OrderIndex ); } ); - CleanUpList( ref list ); - m_properties = IOUtils.PropertiesBegin; - for( int i = 0; i < list.Count; i++ ) - { - m_properties += string.Format( IOUtils.PropertiesElement, list[ i ].PropertyName ); - //Debug.Log() - } - m_properties += IOUtils.PropertiesEnd; - return m_properties; - } - - public bool ContainsProperty( string propertyName ) - { - // TODO: this needs to change, find the property should be dependant of have a "(" - List<PropertyDataCollector> list = new List<PropertyDataCollector>( m_propertiesDict.Values ); - return list.Find( x => x.PropertyName.Contains( propertyName+"(" ) ) != null; - } - - public string[] BuildUnformatedPropertiesStringArr() - { - List<PropertyDataCollector> list = new List<PropertyDataCollector>( m_propertiesDict.Values ); - list.Sort( ( x, y ) => { return x.OrderIndex.CompareTo( y.OrderIndex ); } ); - CleanUpList( ref list ); - string[] arr = new string[ list.Count ]; - for( int i = 0; i < list.Count; i++ ) - { - arr[ i ] = list[ i ].PropertyName; - } - return arr; - } - //This clean up was set to remove Header attributes from shader functions which would be last on the property list - //Thus creating a label on the inspector with no properties below - public void CleanUpList( ref List<PropertyDataCollector> list ) - { - if( list.Count == 0 ) - return; - - if( list[ list.Count - 1 ].PropertyName.Contains( "[Header(" ) ) - { - //Check if this is a complete property or just a standalone header - Match match = Regex.Match( list[ list.Count - 1 ].PropertyName, TemplateHelperFunctions.PropertiesPatternG ); - if( !match.Success ) - { - list.RemoveAt( list.Count - 1 ); - CleanUpList( ref list ); - } - } - } - - public void CloseProperties() - { - if( m_dirtyProperties ) - { - m_properties += IOUtils.PropertiesEnd; - } - } - - public void AddUsePass( string value, bool above ) - { - if( m_usePassesDict.ContainsKey( value ) ) - return; - m_usePassesDict.Add( value, value ); - if( above ) - { - m_aboveUsePassesList.Add( new PropertyDataCollector( -1, value ) ); - } - else - { - m_belowUsePassesList.Add( new PropertyDataCollector( -1, value ) ); - } - } - - public void AddGrabPass( string value ) - { - if( m_grabPassDict.ContainsKey( value ) ) - return; - - m_grabPassDict.Add( value, value ); - - if( string.IsNullOrEmpty( value ) ) - { - if( !m_grabPassIsDirty ) - m_grabPass += IOUtils.GrabPassEmpty; - } - else - { - m_grabPass += IOUtils.GrabPassBegin + value + IOUtils.GrabPassEnd; - } - m_grabPassList.Add( new PropertyDataCollector( -1, m_grabPass.Replace( "\t", string.Empty ).Replace( "\n", string.Empty ) ) ); - m_grabPassIsDirty = true; - } - - // This is used by templates global variables to register already existing globals/properties - //public void SoftRegisterUniform( string dataName ) - //{ - // if( !m_uniformsDict.ContainsKey( dataName ) ) - // { - // m_uniformsDict.Add( dataName, new PropertyDataCollector( -1, dataName ) ); - // } - //} - - public string GenerateInstanced(PrecisionType precisionType, WirePortDataType dataType,string propertyName ) - { - if( IsSRP ) - { - return string.Format( IOUtils.LWSRPInstancedPropertiesElement, UIUtils.PrecisionWirePortToCgType( precisionType, dataType ), propertyName ); - } - else - { - return string.Format( IOUtils.InstancedPropertiesElement, UIUtils.PrecisionWirePortToCgType( precisionType, dataType ), propertyName ); - } - } - - public bool CheckIfSoftRegistered( string name ) - { - return m_softRegisteredUniformsDict.ContainsKey( name ); - } - - public void SoftRegisterUniform( TemplateShaderPropertyData data ) - { - bool excludeUniformKeyword = ( data.PropertyType == PropertyType.InstancedProperty ) || IsSRP; - - string uniformName = UIUtils.GenerateUniformName( excludeUniformKeyword, data.PropertyDataType, data.PropertyName ); - if( !m_uniformsDict.ContainsKey( uniformName ) ) - { - PropertyDataCollector newEntry = new PropertyDataCollector( -1, uniformName ); - m_uniformsDict.Add( uniformName, newEntry ); - m_softRegisteredUniformsDict.Add( uniformName, newEntry ); - } - - string instancedUniform = GenerateInstanced( PrecisionType.Float, data.PropertyDataType, data.PropertyName ); - if( !m_uniformsDict.ContainsKey( instancedUniform ) ) - { - PropertyDataCollector newEntry = new PropertyDataCollector( -1, instancedUniform ); - m_uniformsDict.Add( instancedUniform, newEntry ); - m_softRegisteredUniformsDict.Add( instancedUniform, newEntry ); - } - - instancedUniform = GenerateInstanced( PrecisionType.Half, data.PropertyDataType, data.PropertyName ); - if( !m_uniformsDict.ContainsKey( instancedUniform ) ) - { - PropertyDataCollector newEntry = new PropertyDataCollector( -1, instancedUniform ); - m_uniformsDict.Add( instancedUniform, newEntry ); - m_softRegisteredUniformsDict.Add( instancedUniform, newEntry ); - } - } - - public void AddToUniforms( int nodeId, string dataType, string dataName, bool checkSRPBatch = false, bool excludeUniform = false ) - { - if( string.IsNullOrEmpty( dataName ) || string.IsNullOrEmpty( dataType ) ) - return; - - string value = UIUtils.GenerateUniformName( IsSRP || excludeUniform, dataType, dataName ); - if( !m_uniformsDict.ContainsKey( value ) && !m_uniformsDict.ContainsKey( dataName ) ) - { - m_uniformsDict.Add( value, new PropertyDataCollector( nodeId, value ) ); - if( IsSRP && checkSRPBatch ) - { - m_templateDataCollector.AddSRPBatcherProperty( nodeId, value ); - } - else - { - m_uniforms += "\t\t" + value + '\n'; - m_uniformsList.Add( m_uniformsDict[ value ] ); - } - m_dirtyUniforms = true; - } - } - - public void AddToUniforms( int nodeId, string value, bool checkSRPBatch = false ) - { - if( string.IsNullOrEmpty( value ) ) - return; - - if( !m_uniformsDict.ContainsKey( value ) ) - { - m_uniformsDict.Add( value, new PropertyDataCollector( nodeId, value ) ); - if( IsSRP && checkSRPBatch ) - { - m_templateDataCollector.AddSRPBatcherProperty( nodeId, value ); - } - else - { - m_uniforms += "\t\t" + value + '\n'; - m_uniformsList.Add( m_uniformsDict[ value ] ); - } - m_dirtyUniforms = true; - } - } - - public void AddToDirectives( string value, int orderIndex = -1 , AdditionalLineType type = AdditionalLineType.Custom ) - { - if( string.IsNullOrEmpty( value ) ) - return; - - switch( type ) - { - case AdditionalLineType.Include:value = "#include " + value;break; - case AdditionalLineType.Define:value = "#define " + value; break; - case AdditionalLineType.Pragma:value = "#pragma " + value; break; - } - if( !m_additionalDirectivesDict.ContainsKey( value ) ) - { - PropertyDataCollector data = new PropertyDataCollector( -1, value, orderIndex ); - m_additionalDirectivesDict.Add( value, data ); - m_additionalDirectivesList.Add( data ); - m_dirtyAdditionalDirectives = true; - } - } - - public void AddToIncludes( int nodeId, string value ) - { - if( string.IsNullOrEmpty( value ) ) - return; - - if( m_includesExclusionDict.ContainsKey( value ) ) - { - return; - } - - if( IsTemplate ) - { - if( m_templateDataCollector.HasDirective( AdditionalLineType.Include, value ) ) - return; - } - - if( !m_includesDict.ContainsKey( value ) ) - { - PropertyDataCollector data = new PropertyDataCollector( nodeId, "#include \"" + value + "\"" ); - m_includesDict.Add( value, data ); - m_includesList.Add( data ); - m_includes += "\t\t#include \"" + value + "\"\n"; - m_dirtyIncludes = true; - } - else - { - if( m_showDebugMessages ) UIUtils.ShowMessage( "AddToIncludes:Attempting to add duplicate " + value, MessageSeverity.Warning ); - } - } - - - public void RemoveFromIncludes( string value ) - { - if( string.IsNullOrEmpty( value ) ) - return; - - if( !m_includesExclusionDict.ContainsKey( value ) ) - { - m_includesExclusionDict.Add( value, value ); - } - - if( m_includesDict.ContainsKey( value ) ) - { - PropertyDataCollector data = m_includesDict[ value ]; - m_includesDict.Remove( value ); - m_includesList.Remove( data ); - m_dirtyIncludes = true; - string finalValueName = "\t\t#include \"" + value + "\"\n"; - m_includes = m_includes.Replace( finalValueName, string.Empty ); - } - } - - //public void AddToTags( int nodeId, string name, string value ) - //{ - // if( string.IsNullOrEmpty( name ) || string.IsNullOrEmpty( value ) ) - // return; - - // if( !m_tagsDict.ContainsKey( name ) ) - // { - // string finalResult = string.Format( "\"{0}\"=\"{1}\"", name, value ); - // m_tagsDict.Add( name, new PropertyDataCollector( nodeId, finalResult ) ); - // m_tagsList.Add( new PropertyDataCollector( nodeId, finalResult ) ); - // } - //} - - public void AddToPragmas( int nodeId, string value ) - { - if( string.IsNullOrEmpty( value ) ) - return; - - if( IsTemplate ) - { - if( m_templateDataCollector.HasDirective( AdditionalLineType.Pragma, value ) ) - return; - } - - if( !m_pragmasDict.ContainsKey( value ) ) - { - m_pragmasDict.Add( value, new PropertyDataCollector( nodeId, "#pragma " + value ) ); - m_pragmasList.Add( m_pragmasDict[ value ] ); - m_pragmas += "\t\t#pragma " + value + "\n"; - m_dirtyPragmas = true; - } - else - { - if( m_showDebugMessages ) UIUtils.ShowMessage( "AddToPragmas:Attempting to add duplicate " + value, MessageSeverity.Warning ); - } - } - - public void AddToDefines( int nodeId, string value, bool define = true ) - { - if( string.IsNullOrEmpty( value ) ) - return; - - if( IsTemplate ) - { - if( m_templateDataCollector.HasDirective( AdditionalLineType.Define, value ) ) - return; - } - - if( !m_definesDict.ContainsKey( value ) ) - { - string defineValue = ( define ? "#define " : "#undef " ) + value; - m_definesDict.Add( value, new PropertyDataCollector( nodeId, defineValue ) ); - m_definesList.Add( m_definesDict[ value ] ); - m_defines += "\t\t" + defineValue + "\n"; - m_dirtyDefines = true; - } - else - { - if( m_showDebugMessages ) UIUtils.ShowMessage( "AddToDefines:Attempting to add duplicate " + value, MessageSeverity.Warning ); - } - } - - public int GetVirtualCoordinatesId( int nodeId, string coord, string lodBias ) - { - if( !m_virtualCoordinatesDict.ContainsKey( coord ) ) - { - m_virtualCoordinatesDict.Add( coord, nodeId ); - AddLocalVariable( nodeId, "VirtualCoord " + Constants.VirtualCoordNameStr + nodeId + " = VTComputeVirtualCoord" + lodBias + "(" + coord + ");" ); - return nodeId; - } - else - { - int fetchedId = 0; - m_virtualCoordinatesDict.TryGetValue( coord, out fetchedId ); - return fetchedId; - } - } - - public bool AddToLocalVariables( MasterNodePortCategory category, int nodeId, PrecisionType precisionType, WirePortDataType type, string varName, string varValue ) - { - if( string.IsNullOrEmpty( varName ) || string.IsNullOrEmpty( varValue ) ) - return false; - - string value = UIUtils.PrecisionWirePortToCgType( precisionType, type ) + " " + varName + " = " + varValue + ";"; - return AddToLocalVariables( category, nodeId, value ); - } - - public bool AddToLocalVariables( int nodeId, PrecisionType precisionType, WirePortDataType type, string varName, string varValue ) - { - if( string.IsNullOrEmpty( varName ) || string.IsNullOrEmpty( varValue ) ) - return false; - - string value = UIUtils.PrecisionWirePortToCgType( precisionType, type ) + " " + varName + " = " + varValue + ";"; - return AddToLocalVariables( nodeId, value ); - } - - public bool AddToLocalVariables( MasterNodePortCategory category, int nodeId, string value, bool ignoreDuplicates = false ) - { - if( string.IsNullOrEmpty( value ) ) - return false; - - switch( category ) - { - case MasterNodePortCategory.Vertex: - case MasterNodePortCategory.Tessellation: - { - return AddToVertexLocalVariables( nodeId, value, ignoreDuplicates ); - } - case MasterNodePortCategory.Fragment: - case MasterNodePortCategory.Debug: - { - return AddToLocalVariables( nodeId, value, ignoreDuplicates ); - } - } - - return false; - } - - public bool AddLocalVariable( int nodeId, string customType, string varName, string varValue ) - { - if( string.IsNullOrEmpty( varName ) || string.IsNullOrEmpty( varValue ) ) - return false; - - string value = customType + " " + varName + " = " + varValue + ";"; - return AddLocalVariable( nodeId, value ); - } - - public bool AddLocalVariable( int nodeId, PrecisionType precisionType, WirePortDataType type, string varName, string varValue ) - { - if( string.IsNullOrEmpty( varName ) || string.IsNullOrEmpty( varValue ) ) - return false; - - string value = UIUtils.PrecisionWirePortToCgType( precisionType, type ) + " " + varName + " = " + varValue + ";"; - return AddLocalVariable( nodeId, value ); - } - - public bool AddLocalVariable( int nodeId, string name, string value, bool ignoreDuplicates = false , bool addSemiColon = false ) - { - string finalValue = addSemiColon ? name + " = " + value + ";" : name + " = " + value; - return AddLocalVariable( nodeId, finalValue, ignoreDuplicates ); - } - - public bool AddLocalVariable( int nodeId, string value, bool ignoreDuplicates = false ) - { - if( string.IsNullOrEmpty( value ) ) - return false; - - switch( m_portCategory ) - { - case MasterNodePortCategory.Vertex: - case MasterNodePortCategory.Tessellation: - { - return AddToVertexLocalVariables( nodeId, value, ignoreDuplicates ); - } - case MasterNodePortCategory.Fragment: - case MasterNodePortCategory.Debug: - { - return AddToLocalVariables( nodeId, value, ignoreDuplicates ); - } - } - - return false; - } - - public string AddVirtualLocalVariable( int nodeId, string variable, string value ) - { - if( string.IsNullOrEmpty( value ) ) - return string.Empty; - - string result = string.Empty; - - //switch ( m_portCategory ) - //{ - //case MasterNodePortCategory.Vertex: - //case MasterNodePortCategory.Tessellation: - //{ - //} - //break; - //case MasterNodePortCategory.Fragment: - //case MasterNodePortCategory.Debug: - //{ - if( !m_virtualVariablesDict.ContainsKey( value ) ) - { - m_virtualVariablesDict.Add( value, variable ); - result = variable; - } - else - { - m_virtualVariablesDict.TryGetValue( value, out result ); - } - //} - //break; - //} - - return result; - } - - public void AddCodeComments( bool forceForwardSlash, params string[] comments ) - { - if( m_portCategory == MasterNodePortCategory.Tessellation || m_portCategory == MasterNodePortCategory.Vertex ) - { - AddToVertexLocalVariables( 0, IOUtils.CreateCodeComments( forceForwardSlash, comments ) ); - } - else - { - AddToLocalVariables( 0, IOUtils.CreateCodeComments( forceForwardSlash, comments ) ); - } - } - - public bool HasLocalVariable( string value ) - { - switch( m_portCategory ) - { - case MasterNodePortCategory.Vertex: - case MasterNodePortCategory.Tessellation: - { - return m_vertexLocalVariablesDict.ContainsKey( value ); - } - case MasterNodePortCategory.Fragment: - case MasterNodePortCategory.Debug: - { - if( m_usingCustomOutput ) - { - return m_customOutputDict.ContainsKey( value ); - } - else - { - return m_localVariablesDict.ContainsKey( value ); - } - } - } - return false; - } - - public bool AddToLocalVariables( int nodeId, string value, bool ignoreDuplicates = false ) - { - if( string.IsNullOrEmpty( value ) ) - return false; - - if( m_usingCustomOutput ) - { - if( !m_customOutputDict.ContainsKey( value ) || ignoreDuplicates ) - { - if( !m_customOutputDict.ContainsKey( value ) ) - m_customOutputDict.Add( value, new PropertyDataCollector( nodeId, value ) ); - - m_customOutputList.Add( m_customOutputDict[ value ] ); - m_customOutput += "\t\t\t" + value + '\n'; - return true; - } - else - { - if( m_showDebugMessages ) UIUtils.ShowMessage( "AddToLocalVariables:Attempting to add duplicate " + value, MessageSeverity.Warning ); - } - } - else - { - if( !m_localVariablesDict.ContainsKey( value ) || ignoreDuplicates ) - { - if( !m_localVariablesDict.ContainsKey( value ) ) - m_localVariablesDict.Add( value, new PropertyDataCollector( nodeId, value ) ); - - m_localVariablesList.Add( m_localVariablesDict[ value ] ); - AddToSpecialLocalVariables( nodeId, value, ignoreDuplicates ); - return true; - } - else - { - if( m_showDebugMessages ) UIUtils.ShowMessage( "AddToLocalVariables:Attempting to add duplicate " + value, MessageSeverity.Warning ); - } - } - return false; - } - - public void AddToSpecialLocalVariables( int nodeId, string value, bool ignoreDuplicates = false ) - { - if( string.IsNullOrEmpty( value ) ) - return; - - if( m_usingCustomOutput ) - { - if( !m_customOutputDict.ContainsKey( value ) || ignoreDuplicates ) - { - if( !m_customOutputDict.ContainsKey( value ) ) - m_customOutputDict.Add( value, new PropertyDataCollector( nodeId, value ) ); - - m_customOutputList.Add( m_customOutputDict[ value ] ); - m_customOutput += "\t\t\t" + value + '\n'; - m_dirtySpecialLocalVariables = true; - } - else - { - if( m_showDebugMessages ) UIUtils.ShowMessage( "AddToSpecialLocalVariables:Attempting to add duplicate " + value, MessageSeverity.Warning ); - } - } - else - { - if( !m_specialLocalVariablesDict.ContainsKey( value ) || ignoreDuplicates ) - { - if( !m_specialLocalVariablesDict.ContainsKey( value ) ) - m_specialLocalVariablesDict.Add( value, new PropertyDataCollector( nodeId, value ) ); - - m_specialLocalVariablesList.Add( m_specialLocalVariablesDict[ value ] ); - m_specialLocalVariables += "\t\t\t" + value + '\n'; - m_dirtySpecialLocalVariables = true; - } - else - { - if( m_showDebugMessages ) UIUtils.ShowMessage( "AddToSpecialLocalVariables:Attempting to add duplicate " + value, MessageSeverity.Warning ); - } - } - } - - public void ClearSpecialLocalVariables() - { - //m_specialLocalVariablesDict.Clear(); - m_specialLocalVariables = string.Empty; - m_dirtySpecialLocalVariables = false; - } - - public bool AddToVertexLocalVariables( int nodeId, string varName, string varValue ) - { - if( string.IsNullOrEmpty( varName ) || string.IsNullOrEmpty( varValue ) ) - return false; - - string value = varName + " = " + varValue + ";"; - return AddToVertexLocalVariables( nodeId, value ); - } - - public bool AddToVertexLocalVariables( int nodeId, PrecisionType precisionType, WirePortDataType type, string varName, string varValue ) - { - if( string.IsNullOrEmpty( varName ) || string.IsNullOrEmpty( varValue ) ) - return false; - - string value = UIUtils.PrecisionWirePortToCgType( precisionType, type ) + " " + varName + " = " + varValue + ";"; - return AddToVertexLocalVariables( nodeId, value ); - } - - public bool AddToVertexLocalVariables( int nodeId, string value, bool ignoreDuplicates = false ) - { - if( string.IsNullOrEmpty( value ) ) - return false; - - if( !m_vertexLocalVariablesDict.ContainsKey( value ) || ignoreDuplicates ) - { - if( !m_vertexLocalVariablesDict.ContainsKey( value ) ) - m_vertexLocalVariablesDict.Add( value, new PropertyDataCollector( nodeId, value ) ); - - m_vertexLocalVariablesList.Add( m_vertexLocalVariablesDict[ value ] ); - m_vertexLocalVariables += "\t\t\t" + value + '\n'; - m_dirtyVertexLocalVariables = true; - return true; - } - else - { - if( m_showDebugMessages ) UIUtils.ShowMessage( "AddToVertexLocalVariables:Attempting to add duplicate " + value, MessageSeverity.Warning ); - } - - return false; - } - - public void ClearVertexLocalVariables() - { - //m_vertexLocalVariablesDict.Clear(); - m_vertexLocalVariables = string.Empty; - m_dirtyVertexLocalVariables = false; - } - - - public bool CheckFunction( string header ) - { - return m_localFunctions.ContainsKey( header ); - } - - public string AddFunctions( string header, string body, params object[] inParams ) - { - if( !m_localFunctions.ContainsKey( header ) ) - { - m_localFunctions.Add( header, body ); - m_functionsList.Add( new PropertyDataCollector( -1, body.Replace( "\t\t", string.Empty ) ) ); - m_functions += "\n" + body + "\n"; - m_dirtyFunctions = true; - } - - return String.Format( header, inParams ); - } - - public string AddFunctions( string header, string[] bodyLines, bool addNewLine, params object[] inParams ) - { - if( !m_localFunctions.ContainsKey( header ) ) - { - string body = string.Empty; - for( int i = 0; i < bodyLines.Length; i++ ) - { - body += ( m_masterNodeCategory == AvailableShaderTypes.Template ) ? bodyLines[ i ] : "\t\t" + bodyLines[ i ]; - if( addNewLine ) - body += '\n'; - } - - m_localFunctions.Add( header, body ); - m_functionsList.Add( new PropertyDataCollector( -1, body ) ); - m_functions += "\n" + body + "\n"; - m_dirtyFunctions = true; - } - - return String.Format( header, inParams ); - } - - public bool HasFunction( string functionId ) - { - return m_localFunctions.ContainsKey( functionId ); - } - - public void AddFunction( string functionId, string body ) - { - if( !m_localFunctions.ContainsKey( functionId ) ) - { - m_functionsList.Add( new PropertyDataCollector( -1, body ) ); - - m_localFunctions.Add( functionId, body ); - m_functions += "\n" + body + "\n"; - m_dirtyFunctions = true; - } - } - - public void AddFunction( string functionId, string[] bodyLines, bool addNewline ) - { - if( !m_localFunctions.ContainsKey( functionId ) ) - { - string body = string.Empty; - for( int i = 0; i < bodyLines.Length; i++ ) - { - body += ( m_masterNodeCategory == AvailableShaderTypes.Template ) ? bodyLines[ i ] : "\t\t" + bodyLines[ i ]; - if( addNewline ) - body += '\n'; - - } - m_functionsList.Add( new PropertyDataCollector( -1, body ) ); - - m_localFunctions.Add( functionId, body ); - m_functions += "\n" + body + "\n"; - m_dirtyFunctions = true; - } - } - - public void AddInstructions( string value, bool addTabs = false, bool addLineEnding = false ) - { - m_instructionsList.Add( new PropertyDataCollector( -1, value ) ); - m_instructions += addTabs ? "\t\t\t" + value : value; - if( addLineEnding ) - { - m_instructions += '\n'; - } - m_dirtyInstructions = true; - } - - - public void AddInstructions( bool addLineEnding, bool addTabs, params string[] values ) - { - for( int i = 0; i < values.Length; i++ ) - { - m_instructionsList.Add( new PropertyDataCollector( -1, values[ i ] ) ); - m_instructions += addTabs ? "\t\t\t" + values[ i ] : values[ i ]; - if( addLineEnding ) - { - m_instructions += '\n'; - } - } - m_dirtyInstructions = true; - } - - - - public void AddToStartInstructions( string value ) - { - if( string.IsNullOrEmpty( value ) ) - return; - - m_instructions = value + m_instructions; - m_dirtyInstructions = true; - } - - public void ResetInstructions() - { - m_instructionsList.Clear(); - m_instructions = string.Empty; - m_dirtyInstructions = false; - } - - - public void ResetVertexInstructions() - { - m_vertexDataList.Clear(); - m_vertexData = string.Empty; - m_dirtyPerVertexData = false; - } - - public void AddPropertyNode( PropertyNode node ) - { - if( !m_propertyNodes.ContainsKey( node.UniqueId ) ) - { - m_propertyNodes.Add( node.UniqueId, node ); - } - } - - public void UpdateMaterialOnPropertyNodes( Material material ) - { - m_masterNode.UpdateMaterial( material ); - foreach( KeyValuePair<int, PropertyNode> kvp in m_propertyNodes ) - { - kvp.Value.UpdateMaterial( material ); - } - } - - public void AddToVertexInput( string value ) - { - if( !m_vertexInputDict.ContainsKey( value ) ) - { - m_vertexInputDict.Add( value, value ); - m_vertexInputList.Add( value ); - } - } - - public void AddToInterpolators( string value ) - { - if( !m_interpolatorsDict.ContainsKey( value ) ) - { - m_interpolatorsDict.Add( value, value ); - m_interpolatorsList.Add( value ); - } - } - - public void AddToVertexInterpolatorsDecl( string value ) - { - if( !m_vertexInterpDeclDict.ContainsKey( value ) ) - { - m_vertexInterpDeclDict.Add( value, value ); - m_vertexInterpDeclList.Add( value ); - } - } - - public void UpdateShaderImporter( ref Shader shader ) - { - ShaderImporter importer = (ShaderImporter)ShaderImporter.GetAtPath( AssetDatabase.GetAssetPath( shader ) ); - if( m_propertyNodes.Count > 0 ) - { - try - { - bool hasContents = false; - TextureDefaultsDataColector defaultCol = new TextureDefaultsDataColector(); - foreach( KeyValuePair<int, PropertyNode> kvp in m_propertyNodes ) - { - hasContents = kvp.Value.UpdateShaderDefaults( ref shader, ref defaultCol ) || hasContents; - } - - if( hasContents ) - { - importer.SetDefaultTextures( defaultCol.NamesArr, defaultCol.ValuesArr ); - defaultCol.Destroy(); - defaultCol = null; - } - } - catch( Exception e ) - { - Debug.LogException( e ); - } - } - importer.SaveAndReimport(); - } - - public void AddCustomAppData( string value ) - { - if( m_customAppDataItemsDict.ContainsKey( value ) ) - return; - - m_customAppDataItemsDict.Add( value, value ); - m_customAppDataItems += "\t\t\t" + value + "\n"; - m_dirtyAppData = true; - } - public string CustomAppDataName { get { return m_dirtyAppData ? Constants.CustomAppDataFullName : Constants.AppDataFullName; } } - - public string CustomAppData - { - get - { - if( m_dirtyPerVertexData ) - return Constants.CustomAppDataFullBody + m_customAppDataItems + "\t\t};\n"; - - return string.Empty; - } - } - - public void Destroy() - { - m_masterNode = null; - - m_customAppDataItemsDict.Clear(); - m_customAppDataItemsDict = null; - - m_inputList.Clear(); - m_inputList = null; - - m_customInputList.Clear(); - m_customInputList = null; - - m_propertiesList.Clear(); - m_propertiesList = null; - - m_instancedPropertiesList.Clear(); - m_instancedPropertiesList = null; - - m_dotsPropertiesList.Clear(); - m_dotsPropertiesList = null; - - m_dotsDefinesList.Clear(); - m_dotsDefinesList = null; - - m_uniformsList.Clear(); - m_uniformsList = null; - - m_additionalDirectivesList.Clear(); - m_additionalDirectivesList = null; - - m_includesList.Clear(); - m_includesList = null; - - //m_tagsList.Clear(); - //m_tagsList = null; - - m_pragmasList.Clear(); - m_pragmasList = null; - - m_definesList.Clear(); - m_definesList = null; - - m_instructionsList.Clear(); - m_instructionsList = null; - - m_localVariablesList.Clear(); - m_localVariablesList = null; - - m_vertexLocalVariablesList.Clear(); - m_vertexLocalVariablesList = null; - - m_specialLocalVariablesList.Clear(); - m_specialLocalVariablesList = null; - - m_vertexDataList.Clear(); - m_vertexDataList = null; - - m_customOutputList.Clear(); - m_customOutputList = null; - - m_functionsList.Clear(); - m_functionsList = null; - - m_grabPassList.Clear(); - m_grabPassList = null; - - m_aboveUsePassesList.Clear(); - m_aboveUsePassesList = null; - - m_belowUsePassesList.Clear(); - m_belowUsePassesList = null; - - m_grabPassDict.Clear(); - m_grabPassDict = null; - - m_usePassesDict.Clear(); - m_usePassesDict = null; - - m_propertyNodes.Clear(); - m_propertyNodes = null; - - m_inputDict.Clear(); - m_inputDict = null; - - m_customInputDict.Clear(); - m_customInputDict = null; - - m_propertiesDict.Clear(); - m_propertiesDict = null; - - m_dotsPropertiesDict.Clear(); - m_dotsPropertiesDict = null; - - m_instancedPropertiesDict.Clear(); - m_instancedPropertiesDict = null; - - m_uniformsDict.Clear(); - m_uniformsDict = null; - - m_softRegisteredUniformsDict.Clear(); - m_softRegisteredUniformsDict = null; - - m_includesDict.Clear(); - m_includesDict = null; - - m_additionalDirectivesDict.Clear(); - m_additionalDirectivesDict = null; - - m_includesExclusionDict.Clear(); - m_includesExclusionDict = null; - //m_tagsDict.Clear(); - //m_tagsDict = null; - - m_pragmasDict.Clear(); - m_pragmasDict = null; - - m_definesDict.Clear(); - m_definesDict = null; - - m_virtualCoordinatesDict.Clear(); - m_virtualCoordinatesDict = null; - - m_virtualVariablesDict.Clear(); - m_virtualVariablesDict = null; - - m_localVariablesDict.Clear(); - m_localVariablesDict = null; - - m_specialLocalVariablesDict.Clear(); - m_specialLocalVariablesDict = null; - - m_vertexLocalVariablesDict.Clear(); - m_vertexLocalVariablesDict = null; - - m_localFunctions.Clear(); - m_localFunctions = null; - - m_vertexDataDict.Clear(); - m_vertexDataDict = null; - - m_customOutputDict.Clear(); - m_customOutputDict = null; - - //templates - m_vertexInputList.Clear(); - m_vertexInputList = null; - - m_vertexInputDict.Clear(); - m_vertexInputDict = null; - - m_interpolatorsList.Clear(); - m_interpolatorsList = null; - - m_interpolatorsDict.Clear(); - m_interpolatorsDict = null; - - m_vertexInterpDeclList.Clear(); - m_vertexInterpDeclList = null; - - m_vertexInterpDeclDict.Clear(); - m_vertexInterpDeclDict = null; - - m_templateDataCollector.Destroy(); - m_templateDataCollector = null; - - m_customShadowCoordsDict.Clear(); - m_customShadowCoordsDict = null; - - m_customShadowCoordsList.Clear(); - m_customShadowCoordsDict = null; - - m_packSlotsList.Clear(); - m_packSlotsList = null; - } - - public string Inputs { get { return m_input; } } - public string CustomInput { get { return m_customInput; } } - public string Properties { get { return m_properties; } } - public string InstanceBlockName { get { return m_instanceBlockName; } } - public string InstancedProperties { get { return m_instancedProperties; } } - public string Uniforms { get { return m_uniforms; } } - public string Instructions { get { return m_instructions; } } - public string Includes { get { return m_includes; } } - public string Pragmas { get { return m_pragmas; } } - public string Defines { get { return m_defines; } } - public string LocalVariables { get { return m_localVariables; } } - public string SpecialLocalVariables { get { return m_specialLocalVariables; } } - public string VertexLocalVariables { get { return m_vertexLocalVariables; } } - //public string VertexLocalVariablesFromList - //{ - // get - // { - // string result = string.Empty; - // int count = m_vertexLocalVariablesList.Count; - // for( int i = 0; i < count; i++ ) - // { - // result += m_vertexLocalVariablesList[ i ].PropertyName + "\n"; - // } - // return result; - // } - //} - public string VertexData { get { return m_vertexData; } } - public string CustomOutput { get { return m_customOutput; } } - public string Functions { get { return m_functions; } } - public string GrabPass { get { return m_grabPass; } } - public bool DirtyAppData { get { return m_dirtyAppData; } } - public bool DirtyInstructions { get { return m_dirtyInstructions; } } - public bool DirtyUniforms { get { return m_dirtyUniforms; } } - public bool DirtyProperties { get { return m_dirtyProperties; } } - public bool DirtyInstancedProperties { get { return m_dirtyInstancedProperties; } } - public bool DirtyInputs { get { return m_dirtyInputs; } } - public bool DirtyCustomInput { get { return m_dirtyCustomInputs; } } - public bool DirtyIncludes { get { return m_dirtyIncludes; } } - public bool DirtyPragmas { get { return m_dirtyPragmas; } } - public bool DirtyDefines { get { return m_dirtyDefines; } } - public bool DirtyAdditionalDirectives { get { return m_dirtyAdditionalDirectives; } } - public bool DirtyLocalVariables { get { return m_dirtyLocalVariables; } } - public bool DirtyVertexVariables { get { return m_dirtyVertexLocalVariables; } } - public bool DirtySpecialLocalVariables { get { return m_dirtySpecialLocalVariables; } } - public bool DirtyPerVertexData { get { return m_dirtyPerVertexData; } } - public bool DirtyFunctions { get { return m_dirtyFunctions; } } - public bool DirtyGrabPass { get { return m_grabPassIsDirty; } } - public int LocalVariablesAmount { get { return m_localVariablesDict.Count; } } - public int SpecialLocalVariablesAmount { get { return m_specialLocalVariablesDict.Count; } } - public int VertexLocalVariablesAmount { get { return m_vertexLocalVariablesDict.Count; } } - public bool TesselationActive { set { m_tesselationActive = value; } get { return m_tesselationActive; } } - - - public int AvailableVertexTempId { get { return m_availableVertexTempId++; } } - public int AvailableFragTempId { get { return m_availableFragTempId++; } } - - /// <summary> - /// Returns true if Normal output is being written by something else - /// </summary> - public bool DirtyNormal - { - get { return m_dirtyNormal; } - set { m_dirtyNormal = value; } - } - - public bool IsFragmentCategory - { - get { return m_portCategory == MasterNodePortCategory.Fragment || m_portCategory == MasterNodePortCategory.Debug; } - } - - public MasterNodePortCategory PortCategory - { - get { return m_portCategory; } - set { m_portCategory = value; } - } - - public PortGenType GenType - { - get { return m_genType; } - set { m_genType = value; } - } - - public bool IsTemplate { get { return m_masterNodeCategory == AvailableShaderTypes.Template; } } - - public bool IsSRP { get { return ( TemplateDataCollectorInstance.CurrentSRPType == TemplateSRPType.Lightweight || TemplateDataCollectorInstance.CurrentSRPType == TemplateSRPType.HD ); } } - - public AvailableShaderTypes MasterNodeCategory - { - get { return m_masterNodeCategory; } - set { m_masterNodeCategory = value; } - } - - /// <summary> - /// Forces write to Normal output when the output is not connected - /// </summary> - public bool ForceNormal - { - get { return m_forceNormal; } - set - { - if( value ) - { - if( !m_forceNormalIsDirty ) - { - m_forceNormal = value; - m_forceNormalIsDirty = value; - } - } - else - { - m_forceNormal = value; - } - } - } - - public bool UsingVertexColor - { - get { return m_usingVertexColor; } - set { m_usingVertexColor = value; } - } - - public bool UsingInternalData - { - get { return m_usingInternalData; } - set { m_usingInternalData = value; } - } - - public bool UsingScreenPos - { - get { return m_usingScreenPos; } - set { m_usingScreenPos = value; } - } - - public bool UsingCustomScreenPos - { - get { return m_usingCustomScreenPos; } - set { m_usingCustomScreenPos = value; } - } - - public bool UsingWorldNormal - { - get { return m_usingWorldNormal; } - set { m_usingWorldNormal = value; } - } - - public bool UsingWorldReflection - { - get { return m_usingWorldReflection; } - set { m_usingWorldReflection = value; } - } - - public bool UsingWorldPosition - { - get { return m_usingWorldPosition; } - set { m_usingWorldPosition = value; } - } - - public bool UsingViewDirection - { - get { return m_usingViewDirection; } - set { m_usingViewDirection = value; } - } - - public bool IsOutlineDataCollector - { - get { return m_isOutlineDataCollector; } - set { m_isOutlineDataCollector = value; } - } - - public bool UsingCustomOutlineColor - { - get { return m_usingCustomOutlineColor; } - set { m_usingCustomOutlineColor = value; } - } - - public bool UsingCustomOutlineWidth - { - get { return m_usingCustomOutlineWidth; } - set { m_usingCustomOutlineWidth = value; } - } - - public bool UsingCustomOutlineAlpha - { - get { return m_usingCustomOutlineAlpha; } - set { m_usingCustomOutlineAlpha = value; } - } - - public int CustomOutlineSelectedAlpha - { - get { return m_customOutlineSelectedAlpha; } - set { m_customOutlineSelectedAlpha = value; } - } - - public bool UsingCustomOutput - { - get { return m_usingCustomOutput; } - set { m_usingCustomOutput = value; } - } - - public bool UsingHigherSizeTexcoords - { - get { return m_usingHigherSizeTexcoords; } - set { m_usingHigherSizeTexcoords = value; } - } - - public bool UsingLightAttenuation - { - get { return m_usingLightAttenuation; } - set { m_usingLightAttenuation = value; } - } - - public bool UsingArrayDerivatives - { - get { return m_usingArrayDerivatives; } - set - { - if( value ) - { - MasterNodeDataCollector instance = this; - GeneratorUtils.AddCustomArraySamplingMacros( ref instance ); - } - - m_usingArrayDerivatives = value; - } - } - - public bool SafeNormalizeLightDir - { - get { return m_safeNormalizeLightDir; } - set { m_safeNormalizeLightDir = value; } - } - - public bool SafeNormalizeViewDir - { - get { return m_safeNormalizeViewDir; } - set { m_safeNormalizeViewDir = value; } - } - - public string StandardAdditionalDirectives - { - get - { - string body = string.Empty; - int count = m_additionalDirectivesList.Count; - for( int i = 0; i < count; i++ ) - { - body += "\t\t" + m_additionalDirectivesList[ i ].PropertyName + "\n"; - } - return body; - } - } - - public List<PropertyDataCollector> InputList { get { return m_inputList; } } - public List<PropertyDataCollector> CustomInputList { get { return m_customInputList; } } - public List<PropertyDataCollector> PropertiesList { get { return m_propertiesList; } } - public List<PropertyDataCollector> InstancedPropertiesList { get { return m_instancedPropertiesList; } } - public List<PropertyDataCollector> DotsPropertiesList { get { return m_dotsPropertiesList; } } - public List<PropertyDataCollector> DotsDefinesList { get { return m_dotsDefinesList; } } - public List<PropertyDataCollector> UniformsList { get { return m_uniformsList; } } - public List<PropertyDataCollector> MiscList { get { return m_additionalDirectivesList; } } - public List<PropertyDataCollector> BeforeNativeDirectivesList { get { return m_additionalDirectivesList.FindAll( obj => obj.OrderIndex < 0 ); } } - public List<PropertyDataCollector> AfterNativeDirectivesList { get { return m_additionalDirectivesList.FindAll( obj => obj.OrderIndex > 0 ); } } - public List<PropertyDataCollector> IncludesList { get { return m_includesList; } } - //public List<PropertyDataCollector> TagsList { get { return m_tagsList; } } - public List<PropertyDataCollector> PragmasList { get { return m_pragmasList; } } - public List<PropertyDataCollector> DefinesList { get { return m_definesList; } } - public List<PropertyDataCollector> InstructionsList { get { return m_instructionsList; } } - public List<PropertyDataCollector> LocalVariablesList { get { return m_localVariablesList; } } - public List<PropertyDataCollector> VertexLocalVariablesList { get { return m_vertexLocalVariablesList; } } - public List<PropertyDataCollector> SpecialLocalVariablesList { get { return m_specialLocalVariablesList; } } - public List<PropertyDataCollector> VertexDataList { get { return m_vertexDataList; } } - public List<PropertyDataCollector> CustomOutputList { get { return m_customOutputList; } } - public List<PropertyDataCollector> FunctionsList { get { return m_functionsList; } } - public List<PropertyDataCollector> GrabPassList { get { return m_grabPassList; } } - public Dictionary<string, string> GrabPassDict { get { return m_grabPassDict; } } - public List<PropertyDataCollector> AboveUsePassesList { get { return m_aboveUsePassesList; } } - public List<PropertyDataCollector> BelowUsePassesList { get { return m_belowUsePassesList; } } - public Dictionary<string, string> AboveUsePassesDict { get { return m_usePassesDict; } } - public List<InputCoordsCollector> CustomShadowCoordsList { get { return m_customShadowCoordsList; } } - public List<int> PackSlotsList { get { return m_packSlotsList; } } - public Dictionary<string, string> LocalFunctions { get { return m_localFunctions; } } - //Templates - public List<string> VertexInputList { get { return m_vertexInputList; } } - public List<string> InterpolatorList { get { return m_interpolatorsList; } } - public List<string> VertexInterpDeclList { get { return m_vertexInterpDeclList; } } - public TemplateDataCollector TemplateDataCollectorInstance { get { return m_templateDataCollector; } } - public RenderPath CurrentRenderPath - { - get { return m_renderPath; } - set { m_renderPath = value; } - } - - public NodeAvailability CurrentCanvasMode { get { return m_currentCanvasMode; } set { m_currentCanvasMode = value; } } - public TemplateSRPType CurrentSRPType - { - get - { - if( IsTemplate ) - return m_templateDataCollector.CurrentSRPType; - - return TemplateSRPType.BuiltIn; - } - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/MasterNodeDataCollector.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/MasterNodeDataCollector.cs.meta deleted file mode 100644 index 2b16420a..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/MasterNodeDataCollector.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d026d775ff431f34789437db3fb4abbb -timeCreated: 1481126959 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/OutlineOpHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/OutlineOpHelper.cs deleted file mode 100644 index 38137434..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/OutlineOpHelper.cs +++ /dev/null @@ -1,629 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> -using UnityEngine; -using UnityEditor; -using System; -using System.Collections.Generic; - -namespace AmplifyShaderEditor -{ - public enum OutlineMode - { - VertexOffset, - VertexScale - } - - [Serializable] - public sealed class OutlineOpHelper - { - - private string[] ModeTags = - { - "Tags{ }", - "Tags{ \"RenderType\" = \"TransparentCutout\" \"Queue\" = \"AlphaTest+0\"}", - "Tags{ \"RenderType\" = \"Transparent\" \"Queue\" = \"Transparent+0\"}", - "Tags{ \"RenderType\" = \"Transparent\" \"Queue\" = \"Transparent+0\" }" - }; - - private string[] ModePragma = - { - string.Empty, - string.Empty, - "alpha:fade ", - "alpha:premul " - }; - - - private readonly string OutlineSurfaceConfig = "#pragma surface outlineSurf Outline {0} keepalpha noshadow noambient novertexlights nolightmap nodynlightmap nodirlightmap nometa noforwardadd vertex:outlineVertexDataFunc "; - - private readonly string OutlineBodyStructBegin = "struct Input {"; - private readonly string OutlineBodyStructDefault = "\thalf filler;"; - private readonly string OutlineBodyStructEnd = "};"; - - private readonly string OutlineDefaultUniformColor = "half4 _ASEOutlineColor;"; - private readonly string OutlineDefaultUniformWidth = "half _ASEOutlineWidth;"; - private readonly string OutlineDefaultUniformColorInstanced = "UNITY_DEFINE_INSTANCED_PROP( half4, _ASEOutlineColor )"; - private readonly string OutlineDefaultUniformWidthInstanced = "UNITY_DEFINE_INSTANCED_PROP( half, _ASEOutlineWidth )"; - - private readonly string OutlineDefaultVertexHeader = "void outlineVertexDataFunc( inout appdata_full v, out Input o )\n\t\t{"; - private readonly string OutlineTessVertexHeader = "void outlineVertexDataFunc( inout appdata_full v )\n\t\t{"; - - private readonly string OutlineDefaultVertexOutputDeclaration = "\tUNITY_INITIALIZE_OUTPUT( Input, o );"; - - private readonly string[] OutlineSurfBody = { - "\to.Emission = _ASEOutlineColor.rgb;", - "\to.Alpha = 1;" - }; - - private readonly string[] OutlineSurfBodyInstanced = { - "\to.Emission = UNITY_ACCESS_INSTANCED_PROP(_ASEOutlineColor).rgb;", - "\to.Alpha = 1;" - }; - - private readonly string[] OutlineBodyDefaultSurfBegin = { - "}", - "inline half4 LightingOutline( SurfaceOutput s, half3 lightDir, half atten ) { return half4 ( 0,0,0, s.Alpha); }", - "void outlineSurf( Input i, inout SurfaceOutput o )", - "{"}; - - private readonly string[] OutlineBodyDefaultSurfEnd = { - "}", - "ENDCG", - "\n"}; - - //private const string OutlineInstancedHeader = "#pragma multi_compile_instancing"; - - //private readonly string[] OutlineBodyInstancedBegin = { - // "UNITY_INSTANCING_CBUFFER_START({0})", - // "\tUNITY_DEFINE_INSTANCED_PROP( half4, _ASEOutlineColor )", - // "\tUNITY_DEFINE_INSTANCED_PROP(half, _ASEOutlineWidth)", - // "UNITY_INSTANCING_CBUFFER_END", - // "void outlineVertexDataFunc( inout appdata_full v, out Input o )", - // "{", - // "\tUNITY_INITIALIZE_OUTPUT( Input, o );"}; - - //private readonly string[] OutlineBodyInstancedEnd = { - // "}", - // "inline half4 LightingOutline( SurfaceOutput s, half3 lightDir, half atten ) { return half4 ( 0,0,0, s.Alpha); }", - // "void outlineSurf( Input i, inout SurfaceOutput o ) { o.Emission = UNITY_ACCESS_INSTANCED_PROP( _ASEOutlineColor ).rgb; o.Alpha = 1; }", - // "ENDCG", - // "\n"}; - - private const string WidthVariableAccessInstanced = "UNITY_ACCESS_INSTANCED_PROP( _ASEOutlineWidth )"; - - private const string OutlineVertexOffsetMode = "\tv.vertex.xyz += ( v.normal * {0} );"; - private const string OutlineVertexScaleMode = "\tv.vertex.xyz *= ( 1 + {0});"; - private const string OutlineVertexCustomMode = "\tv.vertex.xyz += {0};"; - - private const string OutlineColorLabel = "Color"; - private const string OutlineWidthLabel = "Width"; - - private const string ColorPropertyName = "_ASEOutlineColor"; - private const string WidthPropertyName = "_ASEOutlineWidth"; - - - private const string WidthPropertyNameInstanced = "UNITY_ACCESS_INSTANCED_PROP(_ASEOutlineWidth)"; - - - - private const string ColorPropertyDec = "_ASEOutlineColor( \"Outline Color\", Color ) = ({0})"; - private const string OutlinePropertyDec = "_ASEOutlineWidth( \"Outline Width\", Float ) = {0}"; - - private const string ModePropertyStr = "Mode"; - - private const string NoFogStr = "No Fog"; - - private const string BillboardInstructionFormat = "\t{0};"; - - [SerializeField] - private Color m_outlineColor; - - [SerializeField] - private float m_outlineWidth; - - [SerializeField] - private bool m_enabled; - - [SerializeField] - private OutlineMode m_mode = OutlineMode.VertexOffset; - - [SerializeField] - private bool m_noFog = true; - - private CullMode m_cullMode = CullMode.Front; - private int m_zTestMode = 0; - private int m_zWriteMode = 0; - private bool m_dirtyInput = false; - private string m_inputs = string.Empty; - private List<PropertyDataCollector> m_inputList = new List<PropertyDataCollector>(); - private string m_uniforms = string.Empty; - private List<PropertyDataCollector> m_uniformList = new List<PropertyDataCollector>(); - private List<PropertyDataCollector> m_instancedPropertiesList = new List<PropertyDataCollector>(); - private string m_instancedProperties = string.Empty; - private string m_instructions = string.Empty; - private string m_functions = string.Empty; - private string m_includes = string.Empty; - private string m_pragmas = string.Empty; - private string m_defines = string.Empty; - private string m_vertexData = string.Empty; - private string m_grabPasses = string.Empty; - private Dictionary<string, string> m_localFunctions; - - //private OutlineMode m_customMode = OutlineMode.VertexOffset; - private int m_offsetMode = 0; - private bool m_customNoFog = true; - - public void Draw( ParentNode owner, GUIStyle toolbarstyle, Material mat ) - { - Color cachedColor = GUI.color; - GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, 0.5f ); - EditorGUILayout.BeginHorizontal( toolbarstyle ); - GUI.color = cachedColor; - owner.ContainerGraph.ParentWindow.InnerWindowVariables.OutlineActiveMode = owner.GUILayoutToggle( owner.ContainerGraph.ParentWindow.InnerWindowVariables.OutlineActiveMode , EditorVariablesManager.OutlineActiveMode.LabelName, UIUtils.MenuItemToggleStyle, GUILayout.ExpandWidth( true ) ); - EditorGUI.BeginChangeCheck(); - m_enabled = owner.EditorGUILayoutToggle( string.Empty, m_enabled, UIUtils.MenuItemEnableStyle, GUILayout.Width( 16 ) ); - if( EditorGUI.EndChangeCheck() ) - { - if( m_enabled ) - UpdateToMaterial( mat ); - - UIUtils.RequestSave(); - } - EditorGUILayout.EndHorizontal(); - - if( owner.ContainerGraph.ParentWindow.InnerWindowVariables.OutlineActiveMode ) - { - cachedColor = GUI.color; - GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, ( EditorGUIUtility.isProSkin ? 0.5f : 0.25f ) ); - EditorGUILayout.BeginVertical( UIUtils.MenuItemBackgroundStyle ); - GUI.color = cachedColor; - - EditorGUILayout.Separator(); - EditorGUI.BeginDisabledGroup( !m_enabled ); - - EditorGUI.indentLevel += 1; - { - m_mode = (OutlineMode)owner.EditorGUILayoutEnumPopup( ModePropertyStr, m_mode ); - - EditorGUI.BeginChangeCheck(); - m_outlineColor = owner.EditorGUILayoutColorField( OutlineColorLabel, m_outlineColor ); - if( EditorGUI.EndChangeCheck() && mat != null ) - { - if( mat.HasProperty( ColorPropertyName ) ) - { - mat.SetColor( ColorPropertyName, m_outlineColor ); - } - } - - EditorGUI.BeginChangeCheck(); - m_outlineWidth = owner.EditorGUILayoutFloatField( OutlineWidthLabel, m_outlineWidth ); - if( EditorGUI.EndChangeCheck() && mat != null ) - { - if( mat.HasProperty( WidthPropertyName ) ) - { - mat.SetFloat( WidthPropertyName, m_outlineWidth ); - } - } - - m_noFog = owner.EditorGUILayoutToggle( NoFogStr, m_noFog ); - } - - EditorGUI.indentLevel -= 1; - EditorGUI.EndDisabledGroup(); - EditorGUILayout.Separator(); - EditorGUILayout.EndVertical(); - } - } - - public void UpdateToMaterial( Material mat ) - { - if( mat == null ) - return; - - if( mat.HasProperty( ColorPropertyName ) ) - { - mat.SetColor( ColorPropertyName, m_outlineColor ); - } - - if( mat.HasProperty( WidthPropertyName ) ) - { - mat.SetFloat( WidthPropertyName, m_outlineWidth ); - } - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - m_enabled = Convert.ToBoolean( nodeParams[ index++ ] ); - m_outlineWidth = Convert.ToSingle( nodeParams[ index++ ] ); - m_outlineColor = IOUtils.StringToColor( nodeParams[ index++ ] ); - if( UIUtils.CurrentShaderVersion() > 5004 ) - { - m_mode = (OutlineMode)Enum.Parse( typeof( OutlineMode ), nodeParams[ index++ ] ); - } - - if( UIUtils.CurrentShaderVersion() > 13902 ) - { - m_noFog = Convert.ToBoolean( nodeParams[ index++ ] ); - } - } - - public void WriteToString( ref string nodeInfo ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_enabled ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_outlineWidth ); - IOUtils.AddFieldValueToString( ref nodeInfo, IOUtils.ColorToString( m_outlineColor ) ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_mode ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_noFog ); - } - - public void AddToDataCollector( ref MasterNodeDataCollector dataCollector ) - { - if( !dataCollector.UsingCustomOutlineColor ) - dataCollector.AddToProperties( -1, string.Format( ColorPropertyDec, IOUtils.ColorToString( m_outlineColor ) ), -1 ); - if( !dataCollector.UsingCustomOutlineWidth ) - dataCollector.AddToProperties( -1, string.Format( OutlinePropertyDec, m_outlineWidth ), -1 ); - } - - public void UpdateFromMaterial( Material mat ) - { - if( mat.HasProperty( ColorPropertyName ) ) - { - m_outlineColor = mat.GetColor( ColorPropertyName ); - } - - if( mat.HasProperty( WidthPropertyName ) ) - { - m_outlineWidth = mat.GetFloat( WidthPropertyName ); - } - } - - void AddMultibodyString( string body , List<string> list ) - { - body = body.Replace( "\t\t", string.Empty ); - string[] strArr = body.Split( '\n' ); - for( int i = 0; i < strArr.Length; i++ ) - { - list.Add( strArr[ i ] ); - } - - } - public string[] OutlineFunctionBody( ref MasterNodeDataCollector dataCollector, bool instanced, bool isShadowCaster, string shaderName, string[] billboardInfo, ref TessellationOpHelper tessOpHelper, string target, PrecisionType precision ) - { - List<string> body = new List<string>(); - body.Add( ModeTags[ dataCollector.CustomOutlineSelectedAlpha ] ); - if( !string.IsNullOrEmpty( m_grabPasses )) - body.Add( m_grabPasses.Replace( "\t\t",string.Empty )); - - if( m_zWriteMode != 0 ) - body.Add( "ZWrite " + ZBufferOpHelper.ZWriteModeValues[ m_zWriteMode ] ); - if( m_zTestMode != 0 ) - body.Add( "ZTest " + ZBufferOpHelper.ZTestModeValues[ m_zTestMode ] ); - - body.Add( "Cull " + m_cullMode ); - body.Add( "CGPROGRAM" ); - if( tessOpHelper.EnableTesselation ) - { - body.Add( "#include \"" + TessellationOpHelper.TessInclude + "\"" ); - body.Add( "#pragma target " + target ); - } - else - { - body.Add( "#pragma target 3.0" ); - } - - bool customOutline = dataCollector.UsingCustomOutlineColor || dataCollector.UsingCustomOutlineWidth || dataCollector.UsingCustomOutlineAlpha; - int outlineMode = customOutline ? m_offsetMode : ( m_mode == OutlineMode.VertexOffset ? 0 : 1 ); - string extraOptions = ( customOutline ? m_customNoFog : m_noFog ) ? "nofog " : string.Empty; - if( dataCollector.CustomOutlineSelectedAlpha > 0 ) - { - extraOptions += ModePragma[ dataCollector.CustomOutlineSelectedAlpha ]; - } - - string surfConfig = string.Format( OutlineSurfaceConfig, extraOptions ); - - if( tessOpHelper.EnableTesselation ) - tessOpHelper.WriteToOptionalParams( ref surfConfig ); - - body.Add( surfConfig ); - if( !isShadowCaster ) - { - AddMultibodyString( m_defines, body ); - AddMultibodyString( m_includes, body ); - AddMultibodyString( m_pragmas, body ); - } - - //if( instanced ) - //{ - // body.Add( OutlineInstancedHeader ); - //} - - if( customOutline ) - { - if( isShadowCaster ) - { - - for( int i = 0; i < InputList.Count; i++ ) - { - dataCollector.AddToInput( InputList[ i ].NodeId, InputList[ i ].PropertyName, true ); - } - } - else - { - if( !string.IsNullOrEmpty( m_inputs ) ) - body.Add( m_inputs.Trim( '\t', '\n' ) ); - } - - if( !DirtyInput && !isShadowCaster ) - body.Add( OutlineBodyStructDefault ); - - if( !isShadowCaster ) - body.Add( OutlineBodyStructEnd ); - } - else if( !isShadowCaster ) - { - body.Add( OutlineBodyStructBegin ); - body.Add( OutlineBodyStructDefault ); - body.Add( OutlineBodyStructEnd ); - } - - if( instanced ) - { - //for( int i = 0; i < OutlineBodyInstancedBegin.Length; i++ ) - //{ - // body.Add( ( i == 0 ) ? string.Format( OutlineBodyInstancedBegin[ i ], shaderName ) : OutlineBodyInstancedBegin[ i ] ); - //} - - //if( (object)billboardInfo != null ) - //{ - // for( int j = 0; j < billboardInfo.Length; j++ ) - // { - // body.Add( string.Format( BillboardInstructionFormat, billboardInfo[ j ] ) ); - // } - //} - - //switch( outlineMode ) - //{ - // case 0: body.Add( string.Format( OutlineVertexOffsetMode, WidthVariableAccessInstanced ) ); break; - // case 1: body.Add( string.Format( OutlineVertexScaleMode, WidthVariableAccessInstanced ) ); break; - // case 2: body.Add( string.Format( OutlineVertexCustomMode, WidthVariableAccessInstanced ) ); break; - //} - //for( int i = 0; i < OutlineBodyInstancedEnd.Length; i++ ) - //{ - // body.Add( OutlineBodyInstancedEnd[ i ] ); - //} - bool openCBuffer = true; - if( customOutline ) - { - if( isShadowCaster ) - { - for( int i = 0; i < UniformList.Count; i++ ) - { - dataCollector.AddToUniforms( UniformList[ i ].NodeId, UniformList[ i ].PropertyName ); - } - - foreach( KeyValuePair<string, string> kvp in m_localFunctions ) - { - dataCollector.AddFunction( kvp.Key, kvp.Value ); - } - } - else - { - if( !string.IsNullOrEmpty( Uniforms ) ) - body.Add( Uniforms.Trim( '\t', '\n' ) ); - - openCBuffer = false; - body.Add( string.Format( IOUtils.InstancedPropertiesBegin, shaderName )); - if( !string.IsNullOrEmpty( InstancedProperties ) ) - body.Add( InstancedProperties.Trim( '\t', '\n' ) ); - } - } - - if( openCBuffer) - body.Add( string.Format( IOUtils.InstancedPropertiesBegin, shaderName ) ); - - if( !dataCollector.UsingCustomOutlineColor ) - body.Add( precision == PrecisionType.Float ? OutlineDefaultUniformColorInstanced.Replace( "half", "float" ) : OutlineDefaultUniformColorInstanced ); - - if( !dataCollector.UsingCustomOutlineWidth ) - body.Add( precision == PrecisionType.Float ? OutlineDefaultUniformWidthInstanced.Replace( "half", "float" ) : OutlineDefaultUniformWidthInstanced ); - - body.Add( IOUtils.InstancedPropertiesEnd ); - - //Functions - if( customOutline && !isShadowCaster ) - body.Add( Functions ); - - if( tessOpHelper.EnableTesselation && !isShadowCaster ) - { - body.Add( tessOpHelper.Uniforms().TrimStart( '\t' ) ); - body.Add( tessOpHelper.GetCurrentTessellationFunction.Trim( '\t', '\n' ) + "\n" ); - } - - if( tessOpHelper.EnableTesselation ) - { - body.Add( OutlineTessVertexHeader ); - } - else - { - body.Add( OutlineDefaultVertexHeader ); - body.Add( OutlineDefaultVertexOutputDeclaration ); - } - - if( customOutline ) - { - if( !string.IsNullOrEmpty( VertexData ) ) - body.Add( "\t" + VertexData.Trim( '\t', '\n' ) ); - } - - if( (object)billboardInfo != null ) - { - for( int j = 0; j < billboardInfo.Length; j++ ) - { - body.Add( string.Format( BillboardInstructionFormat, billboardInfo[ j ] ) ); - } - } - - switch( outlineMode ) - { - case 0: body.Add( string.Format( OutlineVertexOffsetMode, dataCollector.UsingCustomOutlineWidth ? "outlineVar" : WidthPropertyNameInstanced ) ); break; - case 1: body.Add( string.Format( OutlineVertexScaleMode, dataCollector.UsingCustomOutlineWidth ? "outlineVar" : WidthPropertyNameInstanced ) ); break; - case 2: body.Add( string.Format( OutlineVertexCustomMode, dataCollector.UsingCustomOutlineWidth ? "outlineVar" : WidthPropertyNameInstanced ) ); break; - } - - for( int i = 0; i < OutlineBodyDefaultSurfBegin.Length; i++ ) - { - body.Add( OutlineBodyDefaultSurfBegin[ i ] ); - } - if( dataCollector.UsingCustomOutlineColor || dataCollector.CustomOutlineSelectedAlpha > 0 ) - { - body.Add( "\t" + Instructions.Trim( '\t', '\n' ) ); - } - else - { - for( int i = 0; i < OutlineSurfBodyInstanced.Length; i++ ) - { - body.Add( OutlineSurfBodyInstanced[ i ] ); - } - } - - for( int i = 0; i < OutlineBodyDefaultSurfEnd.Length; i++ ) - { - body.Add( OutlineBodyDefaultSurfEnd[ i ] ); - } - } - else - { - if( customOutline ) - { - if( isShadowCaster ) - { - for( int i = 0; i < UniformList.Count; i++ ) - { - dataCollector.AddToUniforms( UniformList[ i ].NodeId, UniformList[ i ].PropertyName ); - } - - foreach( KeyValuePair<string, string> kvp in m_localFunctions ) - { - dataCollector.AddFunction( kvp.Key, kvp.Value ); - } - } - else - { - if( !string.IsNullOrEmpty( Uniforms ) ) - body.Add( Uniforms.Trim( '\t', '\n' ) ); - } - } - - if( !dataCollector.UsingCustomOutlineColor ) - body.Add( precision == PrecisionType.Float ? OutlineDefaultUniformColor.Replace( "half", "float" ) : OutlineDefaultUniformColor ); - - if( !dataCollector.UsingCustomOutlineWidth ) - body.Add( precision == PrecisionType.Float ? OutlineDefaultUniformWidth.Replace( "half", "float" ) : OutlineDefaultUniformWidth ); - - //Functions - if( customOutline && !isShadowCaster ) - body.Add( Functions ); - - if( tessOpHelper.EnableTesselation && !isShadowCaster ) - { - body.Add( tessOpHelper.Uniforms().TrimStart( '\t' ) ); - body.Add( tessOpHelper.GetCurrentTessellationFunction.Trim( '\t', '\n' ) + "\n" ); - } - - if( tessOpHelper.EnableTesselation ) - { - body.Add( OutlineTessVertexHeader ); - } - else - { - body.Add( OutlineDefaultVertexHeader ); - body.Add( OutlineDefaultVertexOutputDeclaration ); - } - - if( customOutline ) - { - if( !string.IsNullOrEmpty( VertexData ) ) - body.Add( "\t" + VertexData.Trim( '\t', '\n' ) ); - } - - if( (object)billboardInfo != null ) - { - for( int j = 0; j < billboardInfo.Length; j++ ) - { - body.Add( string.Format( BillboardInstructionFormat, billboardInfo[ j ] ) ); - } - } - - switch( outlineMode ) - { - case 0: body.Add( string.Format( OutlineVertexOffsetMode, dataCollector.UsingCustomOutlineWidth ? "outlineVar" : WidthPropertyName ) ); break; - case 1: body.Add( string.Format( OutlineVertexScaleMode, dataCollector.UsingCustomOutlineWidth ? "outlineVar" : WidthPropertyName ) ); break; - case 2: body.Add( string.Format( OutlineVertexCustomMode, dataCollector.UsingCustomOutlineWidth ? "outlineVar" : WidthPropertyName ) ); break; - } - for( int i = 0; i < OutlineBodyDefaultSurfBegin.Length; i++ ) - { - body.Add( OutlineBodyDefaultSurfBegin[ i ] ); - } - if( dataCollector.UsingCustomOutlineColor || dataCollector.CustomOutlineSelectedAlpha > 0 ) - { - body.Add( "\t" + Instructions.Trim( '\t', '\n' ) ); - } - else - { - for( int i = 0; i < OutlineSurfBody.Length; i++ ) - { - body.Add( OutlineSurfBody[ i ] ); - } - } - - for( int i = 0; i < OutlineBodyDefaultSurfEnd.Length; i++ ) - { - body.Add( OutlineBodyDefaultSurfEnd[ i ] ); - } - } - - string[] bodyArr = body.ToArray(); - body.Clear(); - body = null; - return bodyArr; - } - - - public void Destroy() - { - m_inputList = null; - m_uniformList = null; - m_instancedPropertiesList = null; - m_localFunctions = null; - } - - public bool EnableOutline { get { return m_enabled; } } - - public bool UsingCullMode { get { return m_cullMode != CullMode.Front; } } - public bool UsingZWrite { get { return m_zWriteMode != 0; } } - public bool UsingZTest { get { return m_zTestMode != 0; } } - public int ZWriteMode { get { return m_zWriteMode; } set { m_zWriteMode = value; } } - public int ZTestMode { get { return m_zTestMode; } set { m_zTestMode = value; } } - public CullMode OutlineCullMode { get { return m_cullMode; } set { m_cullMode = value; } } - public string Inputs { get { return m_inputs; } set { m_inputs = value; } } - public string Uniforms { get { return m_uniforms; } set { m_uniforms = value; } } - public string InstancedProperties { get { return m_instancedProperties; } set { m_instancedProperties = value; } } - public string Instructions { get { return m_instructions; } set { m_instructions = value; } } - public string Functions { get { return m_functions; } set { m_functions = value; } } - public string Includes { get { return m_includes; } set { m_includes = value; } } - public string Pragmas { get { return m_pragmas; } set { m_pragmas = value; } } - public string Defines { get { return m_defines; } set { m_defines = value; } } - public string VertexData { get { return m_vertexData; } set { m_vertexData = value; } } - public string GrabPasses { get { return m_grabPasses; } set { m_grabPasses = value; } } - public List<PropertyDataCollector> InputList { get { return m_inputList; } set { m_inputList = value; } } - public List<PropertyDataCollector> UniformList { get { return m_uniformList; } set { m_uniformList = value; } } - public List<PropertyDataCollector> InstancedPropertiesList { get { return m_instancedPropertiesList; } set { m_instancedPropertiesList = value; } } - - public Dictionary<string, string> LocalFunctions { get { return m_localFunctions; } set { m_localFunctions = value; } } - public bool DirtyInput { get { return m_dirtyInput; } set { m_dirtyInput = value; } } - - //public OutlineMode CustomMode { get { return m_customMode; } set { m_customMode = value; } } - public int OffsetMode { get { return m_offsetMode; } set { m_offsetMode = value; } } - public bool CustomNoFog { get { return m_customNoFog; } set { m_customNoFog = value; } } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/OutlineOpHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/OutlineOpHelper.cs.meta deleted file mode 100644 index bb79b681..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/OutlineOpHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d0900a4b7d1563e49b6184d7579dcbec -timeCreated: 1487331466 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/OutputNode.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/OutputNode.cs deleted file mode 100644 index 1fffc290..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/OutputNode.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using UnityEngine; - -namespace AmplifyShaderEditor -{ - public class OutputNode : SignalGeneratorNode - { - public static int LOD_SUBSHADER_VERSION = 17200; - [SerializeField] - protected bool m_isMainOutputNode = false; - - [SerializeField] - protected int m_lodIndex = -1; - - public OutputNode() : base() { } - public OutputNode( int uniqueId, float x, float y, float width, float height ) : base( uniqueId, x, y, width, height ) { } - - public override void ResetNodeData() - { - base.ResetNodeData(); - m_graphDepth = -1; - } - - public virtual void SetupNodeCategories() - { - ContainerGraph.ResetNodesData(); - //int count = m_inputPorts.Count; - //for( int i = 0; i < count; i++ ) - //{ - // if( m_inputPorts[ i ].IsConnected ) - // { - // NodeData nodeData = new NodeData( m_inputPorts[ i ].Category ); - // ParentNode node = m_inputPorts[ i ].GetOutputNode(); - // node.PropagateNodeData( nodeData, ref collector ); - // } - //} - } - - public override void WriteToString( ref string nodeInfo, ref string connectionsInfo ) - { - base.WriteToString( ref nodeInfo, ref connectionsInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_isMainOutputNode ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_lodIndex ); - } - - public override void ReadFromString( ref string[] nodeParams ) - { - base.ReadFromString( ref nodeParams ); - m_isMainOutputNode = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) ); - if( UIUtils.CurrentShaderVersion() > LOD_SUBSHADER_VERSION ) - { - m_lodIndex = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - } - - if( IsLODMainMasterNode && !ContainerGraph.IsDuplicating ) - { - ContainerGraph.AssignMasterNode( this, true ); - } - } - - public override void AfterDuplication() - { - base.AfterDuplication(); - m_isMainOutputNode = false; - } - - public bool IsMainOutputNode - { - get { return m_isMainOutputNode; } - set - { - if( value != m_isMainOutputNode ) - { - m_isMainOutputNode = value; - if( m_isMainOutputNode ) - { - GenerateSignalPropagation(); - } - else - { - GenerateSignalInibitor(); - } - } - } - } - - public int LODIndex { get { return m_lodIndex; } set { m_lodIndex = value; } } - public bool IsLODMainMasterNode { get { return m_isMainOutputNode && m_lodIndex == -1; } } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/OutputNode.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/OutputNode.cs.meta deleted file mode 100644 index 79cae85e..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/OutputNode.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ed0ee3a73f11f344495d16b54bb3af29 -timeCreated: 1491918470 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingOptionsOpHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingOptionsOpHelper.cs deleted file mode 100644 index 34c8e548..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingOptionsOpHelper.cs +++ /dev/null @@ -1,227 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; - -namespace AmplifyShaderEditor -{ - public enum DisableBatchingTagValues - { - True, - False, - LODFading - } - - [Serializable] - public class RenderingOptionsOpHelper - { - private const string RenderingOptionsStr = " Rendering Options"; - private readonly static GUIContent EmissionGIFlags = new GUIContent( "Emission GI Flag", "Modifies Emission GI flags" ); - private readonly static GUIContent LODCrossfadeContent = new GUIContent( " LOD Group Cross Fade", "Applies a dither crossfade to be used with LOD groups for smoother transitions. Uses one interpolator\nDefault: OFF" ); - private readonly static GUIContent DisableBatchingContent = new GUIContent( "Disable Batching", "\nDisables objects to be batched and used with DrawCallBatching Default: False" ); - private readonly static GUIContent IgnoreProjectorContent = new GUIContent( " Ignore Projector", "\nIf True then an object that uses this shader will not be affected by Projectors Default: False" ); - private readonly static GUIContent UseDefaultCasterContent = new GUIContent( " Use Default Shadow Caster", "\nIf True always use surface default shadow caster Default: False" ); - private readonly static GUIContent ForceNoShadowCastingContent = new GUIContent( " Force No Shadow Casting", "\nIf True then an object that is rendered using this subshader will never cast shadows Default: False" ); - private readonly static GUIContent ForceEnableInstancingContent = new GUIContent( " Force Enable Instancing", "\nIf True forces instancing on shader independent of having instanced properties" ); -#if UNITY_5_6_OR_NEWER - private readonly static GUIContent ForceDisableInstancingContent = new GUIContent( " Force Disable Instancing", "\nIf True forces disable instancing on shader independent of having instanced properties" ); -#endif - private readonly static GUIContent SpecularHightlightsContent = new GUIContent( " Fwd Specular Highlights Toggle", "\nIf True creates a material toggle to set Unity's internal specular highlight rendering keyword" ); - private readonly static GUIContent ReflectionsContent = new GUIContent( " Fwd Reflections Toggle", "\nIf True creates a material toggle to set Unity's internal reflections rendering keyword" ); - - [SerializeField] - private bool m_forceEnableInstancing = false; - - [SerializeField] - private bool m_forceDisableInstancing = false; - - [SerializeField] - private bool m_specularHighlightToggle = false; - - [SerializeField] - private bool m_reflectionsToggle = false; - - [SerializeField] - private bool m_lodCrossfade = false; - - [SerializeField] - private DisableBatchingTagValues m_disableBatching = DisableBatchingTagValues.False; - - [SerializeField] - private bool m_ignoreProjector = false; - - [SerializeField] - private bool m_useDefaultShadowCaster = false; - - [SerializeField] - private bool m_forceNoShadowCasting = false; - - [SerializeField] - private List<CodeGenerationData> m_codeGenerationDataList; - - public RenderingOptionsOpHelper() - { - m_codeGenerationDataList = new List<CodeGenerationData>(); - m_codeGenerationDataList.Add( new CodeGenerationData( " Exclude Deferred", "exclude_path:deferred" ) ); - m_codeGenerationDataList.Add( new CodeGenerationData( " Exclude Forward", "exclude_path:forward" ) ); - m_codeGenerationDataList.Add( new CodeGenerationData( " Exclude Legacy Deferred", "exclude_path:prepass" ) ); - m_codeGenerationDataList.Add( new CodeGenerationData( " Shadows", "noshadow" ) ); - m_codeGenerationDataList.Add( new CodeGenerationData( " Ambient Light", "noambient" ) ); - m_codeGenerationDataList.Add( new CodeGenerationData( " Per Vertex Light", "novertexlights" ) ); - m_codeGenerationDataList.Add( new CodeGenerationData( " Lightmaps", "nolightmap " ) ); - m_codeGenerationDataList.Add( new CodeGenerationData( " Dynamic Global GI", "nodynlightmap" ) ); - m_codeGenerationDataList.Add( new CodeGenerationData( " Directional lightmaps", "nodirlightmap" ) ); - m_codeGenerationDataList.Add( new CodeGenerationData( " Built-in Fog", "nofog" ) ); - m_codeGenerationDataList.Add( new CodeGenerationData( " Meta Pass", "nometa" ) ); - m_codeGenerationDataList.Add( new CodeGenerationData( " Add Pass", "noforwardadd" ) ); - } - - public bool IsOptionActive( string option ) - { - return !m_codeGenerationDataList.Find( x => x.Name.Equals( option ) ).IsActive; - } - - public void Draw( StandardSurfaceOutputNode owner ) - { - bool value = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedRenderingOptions; - NodeUtils.DrawPropertyGroup( ref value, RenderingOptionsStr, () => - { - int codeGenCount = m_codeGenerationDataList.Count; - // Starting from index 4 because other options are already contemplated with m_renderPath and add/receive shadows - for( int i = 4; i < codeGenCount; i++ ) - { - m_codeGenerationDataList[ i ].IsActive = !owner.EditorGUILayoutToggleLeft( m_codeGenerationDataList[ i ].Name, !m_codeGenerationDataList[ i ].IsActive ); - } - m_lodCrossfade = owner.EditorGUILayoutToggleLeft( LODCrossfadeContent, m_lodCrossfade ); - m_ignoreProjector = owner.EditorGUILayoutToggleLeft( IgnoreProjectorContent, m_ignoreProjector ); - EditorGUI.BeginDisabledGroup( !owner.CastShadows ); - m_useDefaultShadowCaster = owner.EditorGUILayoutToggleLeft( UseDefaultCasterContent, m_useDefaultShadowCaster ); - EditorGUI.EndDisabledGroup(); - m_forceNoShadowCasting = owner.EditorGUILayoutToggleLeft( ForceNoShadowCastingContent, m_forceNoShadowCasting ); - if( owner.ContainerGraph.IsInstancedShader ) - { - GUI.enabled = false; - owner.EditorGUILayoutToggleLeft( ForceEnableInstancingContent, true ); - GUI.enabled = true; - } - else - { - m_forceEnableInstancing = owner.EditorGUILayoutToggleLeft( ForceEnableInstancingContent, m_forceEnableInstancing ); - } - -#if UNITY_5_6_OR_NEWER - m_forceDisableInstancing = owner.EditorGUILayoutToggleLeft( ForceDisableInstancingContent, m_forceDisableInstancing ); -#endif - m_specularHighlightToggle = owner.EditorGUILayoutToggleLeft( SpecularHightlightsContent, m_specularHighlightToggle ); - m_reflectionsToggle = owner.EditorGUILayoutToggleLeft( ReflectionsContent, m_reflectionsToggle ); - m_disableBatching = (DisableBatchingTagValues)owner.EditorGUILayoutEnumPopup( DisableBatchingContent, m_disableBatching ); - Material mat = owner.ContainerGraph.CurrentMaterial; - if( mat != null ) - { - mat.globalIlluminationFlags = (MaterialGlobalIlluminationFlags)owner.EditorGUILayoutEnumPopup( EmissionGIFlags, mat.globalIlluminationFlags ); - } - } ); - owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedRenderingOptions = value; - } - - public void Build( ref string OptionalParameters ) - { - int codeGenCount = m_codeGenerationDataList.Count; - - for( int i = 0; i < codeGenCount; i++ ) - { - if( m_codeGenerationDataList[ i ].IsActive ) - { - OptionalParameters += m_codeGenerationDataList[ i ].Value + Constants.OptionalParametersSep; - } - } - -#if UNITY_2017_1_OR_NEWER - if( m_lodCrossfade ) - { - OptionalParameters += Constants.LodCrossFadeOption2017 + Constants.OptionalParametersSep; - } -#endif - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - for( int i = 0; i < m_codeGenerationDataList.Count; i++ ) - { - m_codeGenerationDataList[ i ].IsActive = Convert.ToBoolean( nodeParams[ index++ ] ); - } - - if( UIUtils.CurrentShaderVersion() > 10005 ) - { - m_lodCrossfade = Convert.ToBoolean( nodeParams[ index++ ] ); - } - - if( UIUtils.CurrentShaderVersion() > 10007 ) - { - m_disableBatching = (DisableBatchingTagValues)Enum.Parse( typeof( DisableBatchingTagValues ), nodeParams[ index++ ] ); - m_ignoreProjector = Convert.ToBoolean( nodeParams[ index++ ] ); - m_forceNoShadowCasting = Convert.ToBoolean( nodeParams[ index++ ] ); - } - - if( UIUtils.CurrentShaderVersion() > 11002 ) - { - m_forceEnableInstancing = Convert.ToBoolean( nodeParams[ index++ ] ); - } - - if( UIUtils.CurrentShaderVersion() > 15205 ) - { - m_forceDisableInstancing = Convert.ToBoolean( nodeParams[ index++ ] ); - } - - if( UIUtils.CurrentShaderVersion() > 14403 ) - { - m_specularHighlightToggle = Convert.ToBoolean( nodeParams[ index++ ] ); - m_reflectionsToggle = Convert.ToBoolean( nodeParams[ index++ ] ); - } - - if( UIUtils.CurrentShaderVersion() > 16307 ) - { - m_useDefaultShadowCaster = Convert.ToBoolean( nodeParams[ index++ ] ); - } - } - - public void WriteToString( ref string nodeInfo ) - { - for( int i = 0; i < m_codeGenerationDataList.Count; i++ ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_codeGenerationDataList[ i ].IsActive ); - } - - IOUtils.AddFieldValueToString( ref nodeInfo, m_lodCrossfade ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_disableBatching ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_ignoreProjector ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_forceNoShadowCasting ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_forceEnableInstancing ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_forceDisableInstancing ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_specularHighlightToggle ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_reflectionsToggle ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_useDefaultShadowCaster ); - } - - public void Destroy() - { - m_codeGenerationDataList.Clear(); - m_codeGenerationDataList = null; - } - public bool UseDefaultShadowCaster { get { return m_useDefaultShadowCaster; } } - public bool ForceEnableInstancing { get { return m_forceEnableInstancing; } } - public bool ForceDisableInstancing { get { return m_forceDisableInstancing; } } - - public bool LodCrossfade { get { return m_lodCrossfade; } } - public bool IgnoreProjectorValue { get { return m_ignoreProjector; } set { m_ignoreProjector = value; } } - public bool SpecularHighlightToggle { get { return m_specularHighlightToggle; } set { m_specularHighlightToggle = value; } } - public bool ReflectionsToggle { get { return m_reflectionsToggle; } set { m_reflectionsToggle = value; } } - - public string DisableBatchingTag { get { return ( m_disableBatching != DisableBatchingTagValues.False ) ? string.Format( Constants.TagFormat, "DisableBatching", m_disableBatching ) : string.Empty; } } - public string IgnoreProjectorTag { get { return ( m_ignoreProjector ) ? string.Format( Constants.TagFormat, "IgnoreProjector", "True" ) : string.Empty; } } - public string ForceNoShadowCastingTag { get { return ( m_forceNoShadowCasting ) ? string.Format( Constants.TagFormat, "ForceNoShadowCasting", "True" ) : string.Empty; } } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingOptionsOpHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingOptionsOpHelper.cs.meta deleted file mode 100644 index e94a1528..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingOptionsOpHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 26d840af03d4f7b418e9c7bece143648 -timeCreated: 1488906067 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingPlatformsOpHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingPlatformsOpHelper.cs deleted file mode 100644 index c049d6d7..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingPlatformsOpHelper.cs +++ /dev/null @@ -1,238 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using System; -using UnityEditor; -using UnityEngine; -using System.Collections.Generic; - -namespace AmplifyShaderEditor -{ - [Serializable] - public class RenderPlatformInfo - { - public string Label; - public RenderPlatforms Value; - } - - [Serializable] - public class RenderingPlatformOpHelper - { - private const string RenderingPlatformsStr = " Rendering Platforms"; - private readonly RenderPlatformInfo[] RenderingPlatformsInfo = - { - new RenderPlatformInfo(){Label = " Direct3D 9", Value = RenderPlatforms.d3d9}, - new RenderPlatformInfo(){Label = " Direct3D 11 9.x", Value = RenderPlatforms.d3d11_9x}, - new RenderPlatformInfo(){Label = " Direct3D 11/12", Value = RenderPlatforms.d3d11}, - new RenderPlatformInfo(){Label = " OpenGL 3.x/4.x", Value = RenderPlatforms.glcore}, - new RenderPlatformInfo(){Label = " OpenGL ES 2.0", Value = RenderPlatforms.gles}, - new RenderPlatformInfo(){Label = " OpenGL ES 3.x", Value = RenderPlatforms.gles3}, - new RenderPlatformInfo(){Label = " iOS/Mac Metal", Value = RenderPlatforms.metal}, - new RenderPlatformInfo(){Label = " Vulkan", Value = RenderPlatforms.vulkan}, - new RenderPlatformInfo(){Label = " Xbox 360", Value = RenderPlatforms.xbox360}, - new RenderPlatformInfo(){Label = " Xbox One", Value = RenderPlatforms.xboxone}, - new RenderPlatformInfo(){Label = " PlayStation 4", Value = RenderPlatforms.ps4}, - new RenderPlatformInfo(){Label = " PlayStation Vita", Value = RenderPlatforms.psp2}, - new RenderPlatformInfo(){Label = " Nintendo 3DS", Value = RenderPlatforms.n3ds}, - new RenderPlatformInfo(){Label = " Nintendo Wii U", Value = RenderPlatforms.wiiu} - }; - - // Values from this dictionary must be the indices corresponding from the list above - private readonly Dictionary<RenderPlatforms, int> PlatformToIndex = new Dictionary<RenderPlatforms, int>() - { - {RenderPlatforms.d3d9, 0}, - {RenderPlatforms.d3d11_9x, 1}, - {RenderPlatforms.d3d11, 2}, - {RenderPlatforms.glcore, 3}, - {RenderPlatforms.gles, 4}, - {RenderPlatforms.gles3, 5}, - {RenderPlatforms.metal, 6}, - {RenderPlatforms.vulkan, 7}, - {RenderPlatforms.xbox360, 8}, - {RenderPlatforms.xboxone, 9}, - {RenderPlatforms.ps4, 10}, - {RenderPlatforms.psp2, 11}, - {RenderPlatforms.n3ds, 12}, - {RenderPlatforms.wiiu, 13} - }; - - - private readonly List<RenderPlatforms> LegacyIndexToPlatform = new List<RenderPlatforms>() - { - RenderPlatforms.d3d9, - RenderPlatforms.d3d11, - RenderPlatforms.glcore, - RenderPlatforms.gles, - RenderPlatforms.gles3, - RenderPlatforms.metal, - RenderPlatforms.d3d11_9x, - RenderPlatforms.xbox360, - RenderPlatforms.xboxone, - RenderPlatforms.ps4, - RenderPlatforms.psp2, - RenderPlatforms.n3ds, - RenderPlatforms.wiiu - }; - - [SerializeField] - private bool[] m_renderingPlatformValues; - - public RenderingPlatformOpHelper() - { - m_renderingPlatformValues = new bool[ RenderingPlatformsInfo.Length ]; - for( int i = 0; i < m_renderingPlatformValues.Length; i++ ) - { - m_renderingPlatformValues[ i ] = true; - } - } - - - public void Draw( ParentNode owner ) - { - bool value = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedRenderingPlatforms; - NodeUtils.DrawPropertyGroup( ref value, RenderingPlatformsStr, () => - { - for( int i = 0; i < m_renderingPlatformValues.Length; i++ ) - { - m_renderingPlatformValues[ i ] = owner.EditorGUILayoutToggleLeft( RenderingPlatformsInfo[ i ].Label, m_renderingPlatformValues[ i ] ); - } - } ); - owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedRenderingPlatforms = value; - } - - public void SetRenderingPlatforms( ref string ShaderBody ) - { - int checkedPlatforms = 0; - int uncheckedPlatforms = 0; - - for( int i = 0; i < m_renderingPlatformValues.Length; i++ ) - { - if( m_renderingPlatformValues[ i ] ) - { - checkedPlatforms += 1; - } - else - { - uncheckedPlatforms += 1; - } - } - - if( checkedPlatforms > 0 && checkedPlatforms < m_renderingPlatformValues.Length ) - { - string result = string.Empty; - if( checkedPlatforms < uncheckedPlatforms ) - { - result = "only_renderers "; - for( int i = 0; i < m_renderingPlatformValues.Length; i++ ) - { - if( m_renderingPlatformValues[ i ] ) - { - result += (RenderPlatforms)RenderingPlatformsInfo[i].Value + " "; - } - } - } - else - { - result = "exclude_renderers "; - for( int i = 0; i < m_renderingPlatformValues.Length; i++ ) - { - if( !m_renderingPlatformValues[ i ] ) - { - result += (RenderPlatforms)RenderingPlatformsInfo[ i ].Value + " "; - } - } - } - MasterNode.AddShaderPragma( ref ShaderBody, result ); - } - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - if( UIUtils.CurrentShaderVersion() < 17006 ) - { - for( int i = 0; i < m_renderingPlatformValues.Length; i++ ) - { - m_renderingPlatformValues[ i ] = false; - } - - int count = LegacyIndexToPlatform.Count; - int activeCount = 0; - for( int i = 0; i < count; i++ ) - { - RenderPlatforms platform = LegacyIndexToPlatform[ i ]; - int newIndex = PlatformToIndex[ platform ]; - bool value = Convert.ToBoolean( nodeParams[ index++ ] ); - if( value ) - { - m_renderingPlatformValues[ newIndex ] = true; - activeCount += 1; - } - else - { - m_renderingPlatformValues[ newIndex ] = false; - } - } - - if( activeCount == count ) - { - m_renderingPlatformValues[ PlatformToIndex[ RenderPlatforms.vulkan ] ] = true; - } - } - else - { - int count = Convert.ToInt32( nodeParams[ index++ ] ); - if( count > 0 ) - { - RenderPlatforms firstPlatform = (RenderPlatforms)Enum.Parse( typeof(RenderPlatforms), nodeParams[ index++ ] ); - if( firstPlatform == RenderPlatforms.all ) - { - for( int i = 0; i < m_renderingPlatformValues.Length; i++ ) - { - m_renderingPlatformValues[ i ] = true; - } - } - else - { - for( int i = 0; i < m_renderingPlatformValues.Length; i++ ) - { - m_renderingPlatformValues[ i ] = false; - } - - m_renderingPlatformValues[ PlatformToIndex[ firstPlatform ]] = true; - for( int i = 1; i < count; i++ ) - { - RenderPlatforms currPlatform = (RenderPlatforms)Enum.Parse( typeof( RenderPlatforms ), nodeParams[ index++ ] ); - m_renderingPlatformValues[ PlatformToIndex[ currPlatform ] ] = true; - } - } - } - } - } - - public void WriteToString( ref string nodeInfo ) - { - int active = 0; - for( int i = 0; i < m_renderingPlatformValues.Length; i++ ) - { - if( m_renderingPlatformValues[ i ] ) - active += 1; - } - IOUtils.AddFieldValueToString( ref nodeInfo, active ); - if( active == m_renderingPlatformValues.Length ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, RenderPlatforms.all ); - } - else - { - for( int i = 0; i < m_renderingPlatformValues.Length; i++ ) - { - if( m_renderingPlatformValues[ i ] ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, RenderingPlatformsInfo[i].Value ); - } - } - } - - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingPlatformsOpHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingPlatformsOpHelper.cs.meta deleted file mode 100644 index 96f19245..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingPlatformsOpHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 50a1f03b042823f469cef7d97c73fdc3 -timeCreated: 1488907373 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/StandardSurface.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/StandardSurface.cs deleted file mode 100644 index 9fd57e8a..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/StandardSurface.cs +++ /dev/null @@ -1,3302 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; -using UnityEditorInternal; - -namespace AmplifyShaderEditor -{ - public enum VertexMode - { - Relative, - Absolute - } - - public enum RenderPath - { - All, - ForwardOnly, - DeferredOnly - } - - public enum StandardShaderLightModel - { - Standard, - StandardSpecular, - Lambert, - BlinnPhong, - Unlit, - CustomLighting - } - - public enum CullMode - { - Back, - Front, - Off - } - - public enum AlphaMode - { - Opaque = 0, - Masked = 1, - Transparent = 2, // Transparent (alpha:fade) - Translucent = 3, - Premultiply = 4, // Alpha Premul (alpha:premul) - Custom = 5, - } - - public enum RenderType - { - Opaque, - Transparent, - TransparentCutout, - Background, - Overlay, - TreeOpaque, - TreeTransparentCutout, - TreeBillboard, - Grass, - GrassBillboard, - Custom - } - - public enum RenderQueue - { - Background, - Geometry, - AlphaTest, - Transparent, - Overlay - } - - public enum RenderPlatforms - { - d3d9, - d3d11, - glcore, - gles, - gles3, - metal, - d3d11_9x, - xbox360, - xboxone, - ps4, - psp2, - n3ds, - wiiu, - vulkan, - all - } - - [Serializable] - public class NodeCache - { - public int TargetNodeId = -1; - public int TargetPortId = -1; - - public NodeCache( int targetNodeId, int targetPortId ) - { - SetData( targetNodeId, targetPortId ); - } - - public void SetData( int targetNodeId, int targetPortId ) - { - TargetNodeId = targetNodeId; - TargetPortId = targetPortId; - } - - public void Invalidate() - { - TargetNodeId = -1; - TargetPortId = -1; - } - - public bool IsValid - { - get { return ( TargetNodeId >= 0 ); } - } - - public override string ToString() - { - return "TargetNodeId " + TargetNodeId + " TargetPortId " + TargetPortId; - } - } - - [Serializable] - public class CacheNodeConnections - { - public Dictionary<string, List<NodeCache>> NodeCacheArray; - - public CacheNodeConnections() - { - NodeCacheArray = new Dictionary<string, List<NodeCache>>(); - } - - public void Add( string key, NodeCache value ) - { - if( NodeCacheArray.ContainsKey( key ) ) - { - NodeCacheArray[ key ].Add( value ); - } - else - { - NodeCacheArray.Add( key, new List<NodeCache>() ); - NodeCacheArray[ key ].Add( value ); - } - } - - public NodeCache Get( string key, int idx = 0 ) - { - if( NodeCacheArray.ContainsKey( key ) ) - { - if( idx < NodeCacheArray[ key ].Count ) - return NodeCacheArray[ key ][ idx ]; - } - return null; - } - - public List<NodeCache> GetList( string key ) - { - if( NodeCacheArray.ContainsKey( key ) ) - { - return NodeCacheArray[ key ]; - } - return null; - } - - public void Clear() - { - foreach( KeyValuePair<string, List<NodeCache>> kvp in NodeCacheArray ) - { - kvp.Value.Clear(); - } - NodeCacheArray.Clear(); - } - } - - [Serializable] - [NodeAttributes( "Standard Surface Output", "Master", "Surface shader generator output", null, KeyCode.None, false )] - public sealed class StandardSurfaceOutputNode : MasterNode, ISerializationCallbackReceiver - { - private readonly static string[] VertexLitFunc = { "\t\tinline half4 LightingUnlit( SurfaceOutput s, half3 lightDir, half atten )", - "\t\t{", - "\t\t\treturn half4 ( 0, 0, 0, s.Alpha );", - "\t\t}\n"}; - - private readonly static string[] FadeModeOptions = { "Opaque", "Masked", "Transparent", "Translucent", "Alpha Premultipled", "Custom" }; - private const string VertexModeStr = "Vertex Output"; - private readonly static GUIContent RenderPathContent = new GUIContent( "Render Path", "Selects and generates passes for the supported rendering paths\nDefault: All" ); - private const string ShaderModelStr = "Shader Model"; - private readonly static GUIContent LightModelContent = new GUIContent( "Light Model", "Surface shader lighting model defines how the surface reflects light\nDefault: Standard" ); - private readonly static GUIContent ShaderLODContent = new GUIContent( "Shader LOD", "Shader LOD" ); - private readonly static GUIContent CullModeContent = new GUIContent( "Cull Mode", "Polygon culling mode prevents rendering of either back-facing or front-facing polygons to save performance, turn it off if you want to render both sides\nDefault: Back" ); - - private const string ChromaticAberrationStr = "Chromatic Aberration"; - private const string DiscardStr = "Opacity Mask"; - private const string VertexDisplacementStr = "Local Vertex Offset"; - private const string VertexPositionStr = "Local Vertex Position"; - private const string VertexDataStr = "VertexData"; - private const string VertexNormalStr = "Local Vertex Normal"; - private const string CustomLightingStr = "Custom Lighting"; - private const string AlbedoStr = "Albedo"; - private const string NormalStr = "Normal"; - private const string EmissionStr = "Emission"; - private const string MetallicStr = "Metallic"; - private const string SmoothnessStr = "Smoothness"; - private const string OcclusionDataStr = "Occlusion"; - private const string OcclusionLabelStr = "Ambient Occlusion"; - private const string TransmissionStr = "Transmission"; - private const string TranslucencyStr = "Translucency"; - private const string RefractionStr = "Refraction"; - private const string AlphaStr = "Opacity"; - private const string AlphaDataStr = "Alpha"; - private const string DebugStr = "Debug"; - private const string SpecularStr = "Specular"; - private const string GlossStr = "Gloss"; - private const string CustomRenderTypeStr = "Custom Type"; - private readonly static GUIContent AlphaModeContent = new GUIContent( " Blend Mode", "Defines how the surface blends with the background\nDefault: Opaque" ); - private const string OpacityMaskClipValueStr = "Mask Clip Value"; - private readonly static GUIContent OpacityMaskClipValueContent = new GUIContent( "Mask Clip Value", "Default clip value to be compared with opacity alpha ( 0 = fully Opaque, 1 = fully Masked )\nDefault: 0.5" ); - private readonly static GUIContent CastShadowsContent = new GUIContent( "Cast Shadows", "Generates a shadow caster pass for vertex modifications and point lights in forward rendering\nDefault: ON" ); - private readonly static GUIContent ReceiveShadowsContent = new GUIContent( "Receive Shadows", "Untick it to disable shadow receiving, this includes self-shadowing (only for forward rendering) \nDefault: ON" ); - private readonly static GUIContent QueueIndexContent = new GUIContent( "Queue Index", "Value to offset the render queue, accepts both positive values to render later and negative values to render sooner\nDefault: 0" ); - private readonly static GUIContent RefractionLayerStr = new GUIContent( "Refraction Layer", "Use it to group or ungroup different refraction shaders into the same or different grabpass (only for forward rendering) \nDefault: 0" ); - private readonly static GUIContent AlphaToCoverageStr = new GUIContent( "Alpha To Coverage", "" ); - private readonly static GUIContent RenderQueueContent = new GUIContent( "Render Queue", "Base rendering queue index\n(Background = 1000, Geometry = 2000, AlphaTest = 2450, Transparent = 3000, Overlay = 4000)\nDefault: Geometry" ); - private readonly static GUIContent RenderTypeContent = new GUIContent( "Render Type", "Categorizes shaders into several predefined groups, usually to be used with screen shader effects\nDefault: Opaque" ); - - private const string ShaderInputOrderStr = "Shader Input Order"; - - - [SerializeField] - private BlendOpsHelper m_blendOpsHelper = new BlendOpsHelper(); - - [SerializeField] - private StencilBufferOpHelper m_stencilBufferHelper = new StencilBufferOpHelper(); - - [SerializeField] - private ZBufferOpHelper m_zBufferHelper = new ZBufferOpHelper(); - - [SerializeField] - private OutlineOpHelper m_outlineHelper = new OutlineOpHelper(); - - [SerializeField] - private TessellationOpHelper m_tessOpHelper = new TessellationOpHelper(); - - [SerializeField] - private ColorMaskHelper m_colorMaskHelper = new ColorMaskHelper(); - - [SerializeField] - private RenderingPlatformOpHelper m_renderingPlatformOpHelper = new RenderingPlatformOpHelper(); - - [SerializeField] - private RenderingOptionsOpHelper m_renderingOptionsOpHelper = new RenderingOptionsOpHelper(); - - [SerializeField] - private BillboardOpHelper m_billboardOpHelper = new BillboardOpHelper(); - - [SerializeField] - private FallbackPickerHelper m_fallbackHelper = null; - - [SerializeField] - private TerrainDrawInstancedHelper m_drawInstancedHelper = new TerrainDrawInstancedHelper(); - - //legacy - [SerializeField] - private AdditionalIncludesHelper m_additionalIncludes = new AdditionalIncludesHelper(); - //legacy - [SerializeField] - private AdditionalPragmasHelper m_additionalPragmas = new AdditionalPragmasHelper(); - //legacy - [SerializeField] - private AdditionalDefinesHelper m_additionalDefines = new AdditionalDefinesHelper(); - - [SerializeField] - private TemplateAdditionalDirectivesHelper m_additionalDirectives = new TemplateAdditionalDirectivesHelper( " Additional Directives" ); - - [SerializeField] - private AdditionalSurfaceOptionsHelper m_additionalSurfaceOptions = new AdditionalSurfaceOptionsHelper(); - - [SerializeField] - private UsePassHelper m_usePass; - - [SerializeField] - private CustomTagsHelper m_customTagsHelper = new CustomTagsHelper(); - - [SerializeField] - private DependenciesHelper m_dependenciesHelper = new DependenciesHelper(); - - [SerializeField] - private StandardShaderLightModel m_currentLightModel; - - [SerializeField] - private StandardShaderLightModel m_lastLightModel; - - [SerializeField] - private CullMode m_cullMode = CullMode.Back; - - [SerializeField] - private InlineProperty m_inlineCullMode = new InlineProperty(); - - [SerializeField] - private InlineProperty m_inlineChromaticAberration = new InlineProperty(0.1f); - - [SerializeField] - private AlphaMode m_alphaMode = AlphaMode.Opaque; - - [SerializeField] - private RenderType m_renderType = RenderType.Opaque; - - [SerializeField] - private string m_customRenderType = string.Empty; - - [SerializeField] - private RenderQueue m_renderQueue = RenderQueue.Geometry; - - [SerializeField] - private RenderPath m_renderPath = RenderPath.All; - - [SerializeField] - private VertexMode m_vertexMode = VertexMode.Relative; - - [SerializeField] - private bool m_customBlendMode = false; - - [SerializeField] - private float m_opacityMaskClipValue = 0.5f; - - [SerializeField] - private InlineProperty m_inlineOpacityMaskClipValue = new InlineProperty(); - - [SerializeField] - private InlineProperty m_inlineAlphaToCoverage = new InlineProperty(); - - [SerializeField] - private int m_customLightingPortId = -1; - - [SerializeField] - private int m_emissionPortId = -1; - - [SerializeField] - private int m_discardPortId = -1; - - [SerializeField] - private int m_opacityPortId = -1; - - [SerializeField] - private int m_vertexPortId = -1; - - [SerializeField] - private bool m_keepAlpha = true; - - [SerializeField] - private bool m_castShadows = true; - - //[SerializeField] - private bool m_customShadowCaster = false; - - [SerializeField] - private bool m_receiveShadows = true; - - [SerializeField] - private int m_queueOrder = 0; - - [SerializeField] - private int m_grabOrder = 0; - - [SerializeField] - private bool m_alphaToCoverage = false; - - private InputPort m_transmissionPort; - private InputPort m_translucencyPort; - private InputPort m_tessellationPort; - private bool m_previousTranslucencyOn = false; - private bool m_previousRefractionOn = false; - - [SerializeField] - private CacheNodeConnections m_cacheNodeConnections = new CacheNodeConnections(); - - - private bool m_usingProSkin = false; - private GUIStyle m_inspectorFoldoutStyle; - private GUIStyle m_inspectorToolbarStyle; - private GUIStyle m_inspectorTooldropdownStyle; - - - private bool m_customBlendAvailable = false; - - private Color m_cachedColor = Color.white; - private float m_titleOpacity = 0.5f; - private float m_boxOpacity = 0.5f; - - private InputPort m_refractionPort; - private InputPort m_normalPort; - - - private GUIStyle m_inspectorDefaultStyle; - - [SerializeField] - private ReordenatorNode m_specColorReorder = null; - - [SerializeField] - private int m_specColorOrderIndex = -1; - - [SerializeField] - private ReordenatorNode m_maskClipReorder = null; - - [SerializeField] - private int m_maskClipOrderIndex = -1; - - [SerializeField] - private ReordenatorNode m_translucencyReorder = null; - - [SerializeField] - private int m_translucencyOrderIndex = -1; - - [SerializeField] - private ReordenatorNode m_refractionReorder = null; - - [SerializeField] - private int m_refractionOrderIndex = -1; - - [SerializeField] - private ReordenatorNode m_tessellationReorder = null; - - [SerializeField] - private int m_tessellationOrderIndex = -1; - - private bool m_previousTessellationOn = false; - private bool m_initialize = true; - private bool m_checkChanges = true; - private bool m_lightModelChanged = true; - - private PropertyNode m_dummyProperty = null; - - protected override void CommonInit( int uniqueId ) - { - m_currentLightModel = m_lastLightModel = StandardShaderLightModel.Standard; - m_textLabelWidth = 120; - m_autoDrawInternalPortData = false; - base.CommonInit( uniqueId ); - m_zBufferHelper.ParentSurface = this; - m_tessOpHelper.ParentSurface = this; - m_customPrecision = true; - } - - public override void OnEnable() - { - base.OnEnable(); - if( m_usePass == null ) - { - m_usePass = ScriptableObject.CreateInstance<UsePassHelper>(); - m_usePass.Init( " Additional Use Passes" ); - } - - if( m_fallbackHelper == null ) - { - m_fallbackHelper = ScriptableObject.CreateInstance<FallbackPickerHelper>(); - m_fallbackHelper.Init(); - } - } - - public override void AddMasterPorts() - { - int vertexCorrection = 2; - int index = vertexCorrection + 2; - base.AddMasterPorts(); - switch( m_currentLightModel ) - { - case StandardShaderLightModel.Standard: - { - AddInputPort( WirePortDataType.FLOAT3, false, AlbedoStr, vertexCorrection + 1, MasterNodePortCategory.Fragment, 0 ); - AddInputPort( WirePortDataType.FLOAT3, false, NormalStr, vertexCorrection + 0, MasterNodePortCategory.Fragment, 1 ); - m_normalPort = m_inputPorts[ m_inputPorts.Count - 1 ]; - AddInputPort( WirePortDataType.FLOAT3, false, EmissionStr, index++, MasterNodePortCategory.Fragment, 2 ); - AddInputPort( WirePortDataType.FLOAT, false, MetallicStr, index++, MasterNodePortCategory.Fragment, 3 ); - AddInputPort( WirePortDataType.FLOAT, false, SmoothnessStr, index++, MasterNodePortCategory.Fragment, 4 ); - AddInputPort( WirePortDataType.FLOAT, false, OcclusionLabelStr, OcclusionDataStr, index++, MasterNodePortCategory.Fragment, 5 ); - } - break; - case StandardShaderLightModel.StandardSpecular: - { - AddInputPort( WirePortDataType.FLOAT3, false, AlbedoStr, vertexCorrection + 1, MasterNodePortCategory.Fragment, 0 ); - AddInputPort( WirePortDataType.FLOAT3, false, NormalStr, vertexCorrection + 0, MasterNodePortCategory.Fragment, 1 ); - m_normalPort = m_inputPorts[ m_inputPorts.Count - 1 ]; - AddInputPort( WirePortDataType.FLOAT3, false, EmissionStr, index++, MasterNodePortCategory.Fragment, 2 ); - AddInputPort( WirePortDataType.FLOAT3, false, SpecularStr, index++, MasterNodePortCategory.Fragment, 3 ); - AddInputPort( WirePortDataType.FLOAT, false, SmoothnessStr, index++, MasterNodePortCategory.Fragment, 4 ); - AddInputPort( WirePortDataType.FLOAT, false, OcclusionLabelStr, OcclusionDataStr, index++, MasterNodePortCategory.Fragment, 5 ); - } - break; - case StandardShaderLightModel.CustomLighting: - { - AddInputPort( WirePortDataType.FLOAT3, false, AlbedoStr, vertexCorrection + 1, MasterNodePortCategory.Fragment, 0 ); - AddInputPort( WirePortDataType.FLOAT3, false, NormalStr, vertexCorrection + 0, MasterNodePortCategory.Fragment, 1 ); - m_normalPort = m_inputPorts[ m_inputPorts.Count - 1 ]; - m_inputPorts[ m_inputPorts.Count - 1 ].Locked = true; - AddInputPort( WirePortDataType.FLOAT3, false, EmissionStr, index++, MasterNodePortCategory.Fragment, 2 ); - AddInputPort( WirePortDataType.FLOAT, false, SpecularStr, index++, MasterNodePortCategory.Fragment, 3 ); - m_inputPorts[ m_inputPorts.Count - 1 ].Locked = true; - AddInputPort( WirePortDataType.FLOAT, false, GlossStr, index++, MasterNodePortCategory.Fragment, 4 ); - m_inputPorts[ m_inputPorts.Count - 1 ].Locked = true; - } - break; - case StandardShaderLightModel.Unlit: - { - AddInputPort( WirePortDataType.FLOAT3, false, AlbedoStr, vertexCorrection + 1, MasterNodePortCategory.Fragment, 0 ); - m_inputPorts[ m_inputPorts.Count - 1 ].Locked = true; - AddInputPort( WirePortDataType.FLOAT3, false, NormalStr, vertexCorrection + 0, MasterNodePortCategory.Fragment, 1 ); - m_normalPort = m_inputPorts[ m_inputPorts.Count - 1 ]; - m_inputPorts[ m_inputPorts.Count - 1 ].Locked = true; - AddInputPort( WirePortDataType.FLOAT3, false, EmissionStr, index++, MasterNodePortCategory.Fragment, 2 ); - AddInputPort( WirePortDataType.FLOAT, false, SpecularStr, index++, MasterNodePortCategory.Fragment, 3 ); - m_inputPorts[ m_inputPorts.Count - 1 ].Locked = true; - AddInputPort( WirePortDataType.FLOAT, false, GlossStr, index++, MasterNodePortCategory.Fragment, 4 ); - m_inputPorts[ m_inputPorts.Count - 1 ].Locked = true; - } - break; - case StandardShaderLightModel.Lambert: - { - AddInputPort( WirePortDataType.FLOAT3, false, AlbedoStr, vertexCorrection + 1, MasterNodePortCategory.Fragment, 0 ); - AddInputPort( WirePortDataType.FLOAT3, false, NormalStr, vertexCorrection + 0, MasterNodePortCategory.Fragment, 1 ); - m_normalPort = m_inputPorts[ m_inputPorts.Count - 1 ]; - AddInputPort( WirePortDataType.FLOAT3, false, EmissionStr, index++, MasterNodePortCategory.Fragment, 2 ); - AddInputPort( WirePortDataType.FLOAT, false, SpecularStr, index++, MasterNodePortCategory.Fragment, 3 ); - AddInputPort( WirePortDataType.FLOAT, false, GlossStr, index++, MasterNodePortCategory.Fragment, 4 ); - } - break; - case StandardShaderLightModel.BlinnPhong: - { - AddInputPort( WirePortDataType.FLOAT3, false, AlbedoStr, vertexCorrection + 1, MasterNodePortCategory.Fragment, 0 ); - AddInputPort( WirePortDataType.FLOAT3, false, NormalStr, vertexCorrection + 0, MasterNodePortCategory.Fragment, 1 ); - m_normalPort = m_inputPorts[ m_inputPorts.Count - 1 ]; - AddInputPort( WirePortDataType.FLOAT3, false, EmissionStr, index++, MasterNodePortCategory.Fragment, 2 ); - AddInputPort( WirePortDataType.FLOAT, false, SpecularStr, index++, MasterNodePortCategory.Fragment, 3 ); - AddInputPort( WirePortDataType.FLOAT, false, GlossStr, index++, MasterNodePortCategory.Fragment, 4 ); - } - break; - } - - // instead of setting in the switch emission port is always at position 2; - m_emissionPortId = 2; - - AddInputPort( WirePortDataType.FLOAT3, false, TransmissionStr, index++, MasterNodePortCategory.Fragment, 6 ); - m_transmissionPort = m_inputPorts[ m_inputPorts.Count - 1 ]; - m_inputPorts[ m_inputPorts.Count - 1 ].Locked = ( m_currentLightModel == StandardShaderLightModel.Standard ) || ( m_currentLightModel == StandardShaderLightModel.StandardSpecular ) ? false : true; - - AddInputPort( WirePortDataType.FLOAT3, false, TranslucencyStr, index++, MasterNodePortCategory.Fragment, 7 ); - m_translucencyPort = m_inputPorts[ m_inputPorts.Count - 1 ]; - m_inputPorts[ m_inputPorts.Count - 1 ].Locked = ( m_currentLightModel == StandardShaderLightModel.Standard ) || ( m_currentLightModel == StandardShaderLightModel.StandardSpecular ) ? false : true; - - AddInputPort( WirePortDataType.FLOAT, false, RefractionStr, index + 2, MasterNodePortCategory.Fragment, 8 ); - m_refractionPort = m_inputPorts[ m_inputPorts.Count - 1 ]; - m_inputPorts[ m_inputPorts.Count - 1 ].Locked = ( m_alphaMode == AlphaMode.Opaque || m_alphaMode == AlphaMode.Masked || m_currentLightModel == StandardShaderLightModel.Unlit || m_currentLightModel == StandardShaderLightModel.CustomLighting ); - - AddInputPort( WirePortDataType.FLOAT, false, AlphaStr, index++, MasterNodePortCategory.Fragment, 9 ); - m_inputPorts[ m_inputPorts.Count - 1 ].DataName = AlphaDataStr; - m_opacityPortId = m_inputPorts.Count - 1; - m_inputPorts[ m_inputPorts.Count - 1 ].Locked = ( m_alphaMode == AlphaMode.Opaque || m_alphaMode == AlphaMode.Masked ); - - AddInputPort( WirePortDataType.FLOAT, false, DiscardStr, index++, MasterNodePortCategory.Fragment, 10 ); - m_inputPorts[ m_inputPorts.Count - 1 ].Locked = ( m_alphaMode != AlphaMode.Masked && m_alphaMode != AlphaMode.Custom ); - m_discardPortId = m_inputPorts.Count - 1; - - // This is done to take the index + 2 from refraction port into account and not overlap indexes - index++; - - AddInputPort( WirePortDataType.FLOAT3, false, CustomLightingStr, index++, MasterNodePortCategory.Fragment, 13 ); - m_inputPorts[ m_inputPorts.Count - 1 ].Locked = ( m_currentLightModel != StandardShaderLightModel.CustomLighting ); - m_inputPorts[ m_inputPorts.Count - 1 ].GenType = PortGenType.CustomLighting; - m_customLightingPortId = m_inputPorts.Count - 1; - - //////////////////////////////////////////////////////////////////////////////////////////////// - // Vertex functions - Adding ordex index in order to force these to be the last ones - // Well now they have been moved to be the first ones so operations on vertex are to be taken into account - // by dither, screen position and similar nodes - //////////////////////////////////////////////////////////////////////////////////////////////// - m_vertexPortId = m_inputPorts.Count; - m_tessOpHelper.VertexOffsetIndexPort = m_vertexPortId; - AddInputPort( WirePortDataType.FLOAT3, false, ( m_vertexMode == VertexMode.Relative ? VertexDisplacementStr : VertexPositionStr ), VertexDataStr, 0/*index++*/, MasterNodePortCategory.Vertex, 11 ); - AddInputPort( WirePortDataType.FLOAT3, false, VertexNormalStr, 1/*index++*/, MasterNodePortCategory.Vertex, 12 ); - - //AddInputPort( WirePortDataType.FLOAT3, false, CustomLightModelStr, index++, MasterNodePortCategory.Fragment, 13 ); - //m_inputPorts[ m_inputPorts.Count - 1 ].Locked = true;// !(m_currentLightModel == StandardShaderLightModel.CustomLighting); - - AddInputPort( WirePortDataType.FLOAT4, false, TessellationOpHelper.TessellationPortStr, index++, MasterNodePortCategory.Tessellation, 14 ); - m_tessellationPort = m_inputPorts[ m_inputPorts.Count - 1 ]; - m_tessOpHelper.MasterNodeIndexPort = m_tessellationPort.PortId; - - //////////////////////////////////////////////////////////////////////////////////// - AddInputPort( WirePortDataType.FLOAT3, false, DebugStr, index++, MasterNodePortCategory.Debug, 15 ); - - for( int i = 0; i < m_inputPorts.Count; i++ ) - { - m_inputPorts[ i ].CustomColor = Color.white; - } - m_sizeIsDirty = true; - } - - public override void ForcePortType() - { - int portId = 0; - switch( m_currentLightModel ) - { - case StandardShaderLightModel.Standard: - { - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT, false ); - } - break; - case StandardShaderLightModel.StandardSpecular: - { - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT, false ); - } - break; - case StandardShaderLightModel.CustomLighting: - { - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT, false ); - } - break; - case StandardShaderLightModel.Unlit: - case StandardShaderLightModel.Lambert: - { - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT, false ); - } - break; - case StandardShaderLightModel.BlinnPhong: - { - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT, false ); - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT, false ); - } - break; - } - - //Transmission - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - //Translucency - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - //Refraction - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT, false ); - //Alpha - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT, false ); - //Discard - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT, false ); - //Custom Lighting - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - //Vertex Offset - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - //Vertex Normal - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - //Tessellation - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT4, false ); - //Debug - m_inputPorts[ portId++ ].ChangeType( WirePortDataType.FLOAT3, false ); - } - - public override void SetName( string name ) - { - ShaderName = name; - } - - public void DrawInspectorProperty() - { - if( m_inspectorDefaultStyle == null ) - { - m_inspectorDefaultStyle = UIUtils.GetCustomStyle( CustomStyle.ResetToDefaultInspectorButton ); - } - - DrawCustomInspector( false ); - } - - private void RecursiveLog() - { - List<PropertyNode> nodes = UIUtils.PropertyNodesList(); - nodes.Sort( ( x, y ) => { return x.OrderIndex.CompareTo( y.OrderIndex ); } ); - for( int i = 0; i < nodes.Count; i++ ) - { - if( ( nodes[ i ] is ReordenatorNode ) ) - ( nodes[ i ] as ReordenatorNode ).RecursiveLog(); - else - Debug.Log( nodes[ i ].OrderIndex + " " + nodes[ i ].PropertyName ); - } - } - - public void DrawGeneralOptions() - { - DrawShaderName(); - DrawCurrentShaderType(); - - EditorGUI.BeginChangeCheck(); - m_currentLightModel = (StandardShaderLightModel)EditorGUILayoutEnumPopup( LightModelContent, m_currentLightModel ); - if( EditorGUI.EndChangeCheck() ) - { - ContainerGraph.ChangedLightingModel = true; - if( m_currentLightModel == StandardShaderLightModel.CustomLighting ) - { - ContainerGraph.ParentWindow.CurrentNodeAvailability = NodeAvailability.CustomLighting; - //ContainerGraph.CurrentCanvasMode = NodeAvailability.CustomLighting; - } - else - { - ContainerGraph.ParentWindow.CurrentNodeAvailability = NodeAvailability.SurfaceShader; - //ContainerGraph.CurrentCanvasMode = NodeAvailability.SurfaceShader; - } - } - - m_shaderModelIdx = EditorGUILayoutPopup( ShaderModelStr, m_shaderModelIdx, ShaderModelTypeArr ); - - EditorGUI.BeginChangeCheck(); - DrawPrecisionProperty( false ); - if( EditorGUI.EndChangeCheck() ) - ContainerGraph.CurrentPrecision = m_currentPrecisionType; - //m_cullMode = (CullMode)EditorGUILayoutEnumPopup( CullModeContent, m_cullMode ); - UndoParentNode inst = this; - m_inlineCullMode.CustomDrawer( ref inst, ( x ) => { m_cullMode = (CullMode)EditorGUILayoutEnumPopup( CullModeContent, m_cullMode ); }, CullModeContent.text ); - //m_inlineCullMode.Value = (int)m_cullMode; - //m_inlineCullMode.EnumTypePopup( ref inst, CullModeContent.text, Enum.GetNames( typeof( CullMode ) ) ); - //m_cullMode = (CullMode) m_inlineCullMode.Value; - - m_renderPath = (RenderPath)EditorGUILayoutEnumPopup( RenderPathContent, m_renderPath ); - - m_castShadows = EditorGUILayoutToggle( CastShadowsContent, m_castShadows ); - - m_receiveShadows = EditorGUILayoutToggle( ReceiveShadowsContent, m_receiveShadows ); - - m_drawInstancedHelper.Draw( this ); - - m_queueOrder = EditorGUILayoutIntField( QueueIndexContent, m_queueOrder ); - EditorGUI.BeginChangeCheck(); - m_vertexMode = (VertexMode)EditorGUILayoutEnumPopup( VertexModeStr, m_vertexMode ); - if( EditorGUI.EndChangeCheck() ) - { - m_inputPorts[ m_vertexPortId ].Name = m_vertexMode == VertexMode.Relative ? VertexDisplacementStr : VertexPositionStr; - m_sizeIsDirty = true; - } - - ShaderLOD = Mathf.Clamp( EditorGUILayoutIntField( ShaderLODContent, ShaderLOD ), 0, Shader.globalMaximumLOD ); - ////m_lodCrossfade = EditorGUILayoutToggle( LODCrossfadeContent, m_lodCrossfade ); - m_fallbackHelper.Draw( this ); - DrawInspectorProperty(); - - } - - public void ShowOpacityMaskValueUI() - { - EditorGUI.BeginChangeCheck(); - UndoParentNode inst = this; - m_inlineOpacityMaskClipValue.CustomDrawer( ref inst, ( x ) => { m_opacityMaskClipValue = EditorGUILayoutFloatField( OpacityMaskClipValueContent, m_opacityMaskClipValue ); }, OpacityMaskClipValueContent.text ); - if( EditorGUI.EndChangeCheck() ) - { - m_checkChanges = true; - if( m_currentMaterial != null && m_currentMaterial.HasProperty( IOUtils.MaskClipValueName ) ) - { - m_currentMaterial.SetFloat( IOUtils.MaskClipValueName, m_opacityMaskClipValue ); - } - } - } - - public override void DrawProperties() - { - if( m_inspectorFoldoutStyle == null || EditorGUIUtility.isProSkin != m_usingProSkin ) - m_inspectorFoldoutStyle = new GUIStyle( GUI.skin.GetStyle( "foldout" ) ); - - if( m_inspectorToolbarStyle == null || EditorGUIUtility.isProSkin != m_usingProSkin ) - { - m_inspectorToolbarStyle = new GUIStyle( GUI.skin.GetStyle( "toolbarbutton" ) ) - { - fixedHeight = 20 - }; - } - - if( m_inspectorTooldropdownStyle == null || EditorGUIUtility.isProSkin != m_usingProSkin ) - { - m_inspectorTooldropdownStyle = new GUIStyle( GUI.skin.GetStyle( "toolbardropdown" ) ) - { - fixedHeight = 20 - }; - m_inspectorTooldropdownStyle.margin.bottom = 2; - } - - if( EditorGUIUtility.isProSkin != m_usingProSkin ) - m_usingProSkin = EditorGUIUtility.isProSkin; - - base.DrawProperties(); - - EditorGUILayout.BeginVertical(); - { - EditorGUILayout.Separator(); - - m_titleOpacity = 0.5f; - m_boxOpacity = ( EditorGUIUtility.isProSkin ? 0.5f : 0.25f ); - m_cachedColor = GUI.color; - - // General - bool generalIsVisible = ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedGeneralShaderOptions; - NodeUtils.DrawPropertyGroup( ref generalIsVisible, GeneralFoldoutStr, DrawGeneralOptions ); - ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedGeneralShaderOptions = generalIsVisible; - - //Blend Mode - GUI.color = new Color( m_cachedColor.r, m_cachedColor.g, m_cachedColor.b, m_titleOpacity ); - EditorGUILayout.BeginHorizontal( m_inspectorToolbarStyle ); - GUI.color = m_cachedColor; - - bool blendOptionsVisible = GUILayout.Toggle( ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedBlendOptions, AlphaModeContent, UIUtils.MenuItemToggleStyle, GUILayout.ExpandWidth( true ) ); - if( Event.current.button == Constants.FoldoutMouseId ) - { - ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedBlendOptions = blendOptionsVisible; - } - - - if( !EditorGUIUtility.isProSkin ) - GUI.color = new Color( 0.25f, 0.25f, 0.25f, 1f ); - - float boxSize = 60; - switch( m_alphaMode ) - { - case AlphaMode.Transparent: - boxSize = 85; - break; - case AlphaMode.Translucent: - boxSize = 80; - break; - case AlphaMode.Premultiply: - boxSize = 120; - break; - } - EditorGUI.BeginChangeCheck(); - m_alphaMode = (AlphaMode)EditorGUILayoutPopup( string.Empty, (int)m_alphaMode, FadeModeOptions, UIUtils.InspectorPopdropdownStyle, GUILayout.Width( boxSize ), GUILayout.Height( 19 ) ); - if( EditorGUI.EndChangeCheck() ) - { - UpdateFromBlendMode(); - } - - GUI.color = m_cachedColor; - EditorGUILayout.EndHorizontal(); - - m_customBlendAvailable = ( m_alphaMode == AlphaMode.Custom || m_alphaMode == AlphaMode.Opaque ); - - if( ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedBlendOptions ) - { - GUI.color = new Color( m_cachedColor.r, m_cachedColor.g, m_cachedColor.b, m_boxOpacity ); - EditorGUILayout.BeginVertical( UIUtils.MenuItemBackgroundStyle ); - GUI.color = m_cachedColor; - EditorGUI.indentLevel++; - EditorGUILayout.Separator(); - EditorGUI.BeginChangeCheck(); - - - m_renderType = (RenderType)EditorGUILayoutEnumPopup( RenderTypeContent, m_renderType ); - if( m_renderType == RenderType.Custom ) - { - EditorGUI.BeginChangeCheck(); - m_customRenderType = EditorGUILayoutTextField( CustomRenderTypeStr, m_customRenderType ); - if( EditorGUI.EndChangeCheck() ) - { - m_customRenderType = UIUtils.RemoveInvalidCharacters( m_customRenderType ); - } - } - - m_renderQueue = (RenderQueue)EditorGUILayoutEnumPopup( RenderQueueContent, m_renderQueue ); - - if( EditorGUI.EndChangeCheck() ) - { - if( m_renderType == RenderType.Opaque && m_renderQueue == RenderQueue.Geometry ) - m_alphaMode = AlphaMode.Opaque; - else if( m_renderType == RenderType.TransparentCutout && m_renderQueue == RenderQueue.AlphaTest ) - m_alphaMode = AlphaMode.Masked; - else if( m_renderType == RenderType.Transparent && m_renderQueue == RenderQueue.Transparent ) - m_alphaMode = AlphaMode.Transparent; - else if( m_renderType == RenderType.Opaque && m_renderQueue == RenderQueue.Transparent ) - m_alphaMode = AlphaMode.Translucent; - else - m_alphaMode = AlphaMode.Custom; - - - UpdateFromBlendMode(); - } - - bool bufferedEnabled = GUI.enabled; - - GUI.enabled = ( m_alphaMode == AlphaMode.Masked || m_alphaMode == AlphaMode.Custom ); - m_inputPorts[ m_discardPortId ].Locked = !GUI.enabled; - ShowOpacityMaskValueUI(); - - GUI.enabled = bufferedEnabled; - - EditorGUI.BeginDisabledGroup( !( m_alphaMode == AlphaMode.Transparent || m_alphaMode == AlphaMode.Premultiply || m_alphaMode == AlphaMode.Translucent || m_alphaMode == AlphaMode.Custom ) ); - m_grabOrder = EditorGUILayoutIntField( RefractionLayerStr, m_grabOrder ); - float cachedLabelWidth = EditorGUIUtility.labelWidth; - UndoParentNode inst = this; - if( m_refractionPort.IsConnected ) - { - EditorGUIUtility.labelWidth = 145; - EditorGUI.BeginChangeCheck(); - m_inlineChromaticAberration.RangedFloatField( ref inst, ChromaticAberrationStr, 0.0f,0.3f ); - if( EditorGUI.EndChangeCheck() ) - { - if( m_currentMaterial != null && m_currentMaterial.HasProperty( IOUtils.ChromaticAberrationProperty ) ) - { - m_currentMaterial.SetFloat( IOUtils.ChromaticAberrationProperty, m_inlineChromaticAberration.FloatValue ); - } - } - } - - EditorGUIUtility.labelWidth = 130; - m_inlineAlphaToCoverage.CustomDrawer( ref inst, ( x ) => { m_alphaToCoverage = EditorGUILayoutToggle( AlphaToCoverageStr, m_alphaToCoverage ); }, AlphaToCoverageStr.text ); - EditorGUIUtility.labelWidth = cachedLabelWidth; - EditorGUI.EndDisabledGroup(); - - EditorGUILayout.Separator(); - - if( !m_customBlendAvailable ) - { - EditorGUILayout.HelpBox( "Advanced options are only available for Custom blend modes", MessageType.Warning ); - } - - EditorGUI.BeginDisabledGroup( !m_customBlendAvailable ); - m_blendOpsHelper.Draw( this, m_customBlendAvailable ); - m_colorMaskHelper.Draw( this ); - - EditorGUI.EndDisabledGroup(); - EditorGUILayout.Separator(); - EditorGUI.indentLevel--; - EditorGUILayout.EndVertical(); - } - - m_stencilBufferHelper.Draw( this ); - m_tessOpHelper.Draw( this, m_inspectorToolbarStyle, m_currentMaterial, m_tessellationPort.IsConnected ); - m_outlineHelper.Draw( this, m_inspectorToolbarStyle, m_currentMaterial ); - m_billboardOpHelper.Draw( this ); - m_zBufferHelper.Draw( this, m_inspectorToolbarStyle, m_customBlendAvailable ); - m_renderingOptionsOpHelper.Draw( this ); - m_renderingPlatformOpHelper.Draw( this ); - //m_additionalDefines.Draw( this ); - //m_additionalIncludes.Draw( this ); - //m_additionalPragmas.Draw( this ); - m_additionalSurfaceOptions.Draw( this ); - m_usePass.Draw( this ); - m_additionalDirectives.Draw( this ); - m_customTagsHelper.Draw( this ); - m_dependenciesHelper.Draw( this ); - DrawMaterialInputs( m_inspectorToolbarStyle ); - } - - EditorGUILayout.EndVertical(); - } - - public override void OnNodeLogicUpdate( DrawInfo drawInfo ) - { - base.OnNodeLogicUpdate( drawInfo ); - - if( m_initialize ) - { - m_initialize = false; - - if( m_dummyProperty == null ) - { - m_dummyProperty = ScriptableObject.CreateInstance<PropertyNode>(); - m_dummyProperty.ContainerGraph = ContainerGraph; - } - } - - if( m_currentLightModel != m_lastLightModel ) - m_lightModelChanged = true; - - if( m_lightModelChanged ) - { - m_lightModelChanged = false; - if( m_currentLightModel == StandardShaderLightModel.BlinnPhong ) - { - if( m_specColorReorder == null ) - { - m_specColorReorder = ScriptableObject.CreateInstance<ReordenatorNode>(); - m_specColorReorder.ContainerGraph = ContainerGraph; - m_specColorReorder.OrderIndex = m_specColorOrderIndex; - m_specColorReorder.Init( "_SpecColor", "Specular Color", null ); - } - - UIUtils.RegisterPropertyNode( m_specColorReorder ); - } - else - { - if( m_specColorReorder != null ) - UIUtils.UnregisterPropertyNode( m_specColorReorder ); - } - - if( m_currentLightModel == StandardShaderLightModel.CustomLighting && m_masterNodeCategory == 0 ) - ContainerGraph.CurrentCanvasMode = NodeAvailability.CustomLighting; - else if( m_masterNodeCategory == 0 ) - ContainerGraph.CurrentCanvasMode = NodeAvailability.SurfaceShader; - CacheCurrentSettings(); - m_lastLightModel = m_currentLightModel; - DeleteAllInputConnections( true, true ); - AddMasterPorts(); - ConnectFromCache(); - } - - if( drawInfo.CurrentEventType != EventType.Layout ) - return; - - if( m_transmissionPort != null && m_transmissionPort.IsConnected && m_renderPath != RenderPath.ForwardOnly ) - { - m_renderPath = RenderPath.ForwardOnly; - UIUtils.ShowMessage( "Render Path changed to Forward Only since transmission only works in forward rendering" ); - } - - if( m_translucencyPort != null && m_translucencyPort.IsConnected && m_renderPath != RenderPath.ForwardOnly ) - { - m_renderPath = RenderPath.ForwardOnly; - UIUtils.ShowMessage( "Render Path changed to Forward Only since translucency only works in forward rendering" ); - } - - if( m_translucencyPort.IsConnected != m_previousTranslucencyOn ) - m_checkChanges = true; - - if( m_refractionPort.IsConnected != m_previousRefractionOn ) - m_checkChanges = true; - - if( ( m_tessOpHelper.EnableTesselation && !m_tessellationPort.IsConnected ) != m_previousTessellationOn ) - m_checkChanges = true; - - m_previousTranslucencyOn = m_translucencyPort.IsConnected; - - m_previousRefractionOn = m_refractionPort.IsConnected; - - m_previousTessellationOn = ( m_tessOpHelper.EnableTesselation && !m_tessellationPort.IsConnected ); - - if( m_checkChanges ) - { - if( m_translucencyPort.IsConnected ) - { - if( m_translucencyReorder == null ) - { - List<PropertyNode> translucencyList = new List<PropertyNode>(); - for( int i = 0; i < 7; i++ ) - { - translucencyList.Add( m_dummyProperty ); - } - - m_translucencyReorder = ScriptableObject.CreateInstance<ReordenatorNode>(); - m_translucencyReorder.ContainerGraph = ContainerGraph; - m_translucencyReorder.OrderIndex = m_translucencyOrderIndex; - m_translucencyReorder.Init( "_TranslucencyGroup", "Translucency", translucencyList ); - } - - UIUtils.RegisterPropertyNode( m_translucencyReorder ); - } - else - { - if( m_translucencyReorder != null ) - UIUtils.UnregisterPropertyNode( m_translucencyReorder ); - } - - if( m_refractionPort.IsConnected ) - { - if( m_refractionReorder == null ) - { - List<PropertyNode> refractionList = new List<PropertyNode>(); - for( int i = 0; i < 2; i++ ) - { - refractionList.Add( m_dummyProperty ); - } - - m_refractionReorder = ScriptableObject.CreateInstance<ReordenatorNode>(); - m_refractionReorder.ContainerGraph = ContainerGraph; - m_refractionReorder.OrderIndex = m_refractionOrderIndex; - m_refractionReorder.Init( "_RefractionGroup", "Refraction", refractionList ); - } - - UIUtils.RegisterPropertyNode( m_refractionReorder ); - } - else - { - if( m_refractionReorder != null ) - UIUtils.UnregisterPropertyNode( m_refractionReorder ); - } - - if( m_tessOpHelper.EnableTesselation && !m_tessellationPort.IsConnected ) - { - if( m_tessellationReorder == null ) - { - List<PropertyNode> tessellationList = new List<PropertyNode>(); - for( int i = 0; i < 4; i++ ) - { - tessellationList.Add( m_dummyProperty ); - } - - m_tessellationReorder = ScriptableObject.CreateInstance<ReordenatorNode>(); - m_tessellationReorder.ContainerGraph = ContainerGraph; - m_tessellationReorder.OrderIndex = m_tessellationOrderIndex; - m_tessellationReorder.Init( "_TessellationGroup", "Tessellation", tessellationList ); - m_tessellationReorder.HeaderTitle = "Tesselation"; - } - - UIUtils.RegisterPropertyNode( m_tessellationReorder ); - } - else - { - if( m_tessellationReorder != null ) - UIUtils.UnregisterPropertyNode( m_tessellationReorder ); - } - - if( m_inputPorts[ m_discardPortId ].Available && !m_inlineOpacityMaskClipValue.IsValid ) - { - if( m_maskClipReorder == null ) - { - // Create dragable clip material property - m_maskClipReorder = ScriptableObject.CreateInstance<ReordenatorNode>(); - m_maskClipReorder.ContainerGraph = ContainerGraph; - m_maskClipReorder.OrderIndex = m_maskClipOrderIndex; - m_maskClipReorder.Init( "_Cutoff", "Mask Clip Value", null ); - } - - UIUtils.RegisterPropertyNode( m_maskClipReorder ); - } - else - { - if( m_maskClipReorder != null ) - UIUtils.UnregisterPropertyNode( m_maskClipReorder ); - } - - m_checkChanges = false; - } - } - - public override void OnNodeRepaint( DrawInfo drawInfo ) - { - base.OnNodeRepaint( drawInfo ); - - if( m_containerGraph.IsInstancedShader || m_renderingOptionsOpHelper.ForceEnableInstancing ) - { - DrawInstancedIcon( drawInfo ); - } - } - - private void CacheCurrentSettings() - { - m_cacheNodeConnections.Clear(); - for( int portId = 0; portId < m_inputPorts.Count; portId++ ) - { - if( m_inputPorts[ portId ].IsConnected ) - { - WireReference connection = m_inputPorts[ portId ].GetConnection(); - m_cacheNodeConnections.Add( m_inputPorts[ portId ].Name, new NodeCache( connection.NodeId, connection.PortId ) ); - } - } - } - - private void ConnectFromCache() - { - for( int i = 0; i < m_inputPorts.Count; i++ ) - { - NodeCache cache = m_cacheNodeConnections.Get( m_inputPorts[ i ].Name ); - if( cache != null ) - { - UIUtils.SetConnection( UniqueId, m_inputPorts[ i ].PortId, cache.TargetNodeId, cache.TargetPortId ); - } - } - } - - public override void UpdateMaterial( Material mat ) - { - base.UpdateMaterial( mat ); - if( m_alphaMode == AlphaMode.Masked || m_alphaMode == AlphaMode.Custom ) - { - if( mat.HasProperty( IOUtils.MaskClipValueName ) ) - mat.SetFloat( IOUtils.MaskClipValueName, m_opacityMaskClipValue ); - } - - if( m_refractionPort.IsConnected && !m_inlineChromaticAberration.Active ) - { - if( mat.HasProperty( IOUtils.ChromaticAberrationProperty ) ) - mat.SetFloat( IOUtils.ChromaticAberrationProperty, m_inlineChromaticAberration.FloatValue ); - } - } - - public override void SetMaterialMode( Material mat, bool fetchMaterialValues ) - { - base.SetMaterialMode( mat, fetchMaterialValues ); - if( m_alphaMode == AlphaMode.Masked || m_alphaMode == AlphaMode.Custom ) - { - if( fetchMaterialValues && m_materialMode && mat.HasProperty( IOUtils.MaskClipValueName ) ) - { - m_opacityMaskClipValue = mat.GetFloat( IOUtils.MaskClipValueName ); - } - } - - if( m_refractionPort.IsConnected && !m_inlineChromaticAberration.Active ) - { - if( fetchMaterialValues && m_materialMode && mat.HasProperty( IOUtils.ChromaticAberrationProperty ) ) - m_inlineChromaticAberration.FloatValue = mat.GetFloat( IOUtils.ChromaticAberrationProperty); - } - } - - public override void ForceUpdateFromMaterial( Material material ) - { - m_tessOpHelper.UpdateFromMaterial( material ); - m_outlineHelper.UpdateFromMaterial( material ); - - if( m_alphaMode == AlphaMode.Masked || m_alphaMode == AlphaMode.Custom ) - { - if( material.HasProperty( IOUtils.MaskClipValueName ) ) - m_opacityMaskClipValue = material.GetFloat( IOUtils.MaskClipValueName ); - } - - if( m_refractionPort.IsConnected && !m_inlineChromaticAberration.Active ) - { - if( material.HasProperty( IOUtils.ChromaticAberrationProperty ) ) - m_inlineChromaticAberration.FloatValue = material.GetFloat( IOUtils.ChromaticAberrationProperty ); - } - } - - public override void UpdateMasterNodeMaterial( Material material ) - { - m_currentMaterial = material; - UpdateMaterialEditor(); - } - - void UpdateMaterialEditor() - { - FireMaterialChangedEvt(); - } - - public string CreateInstructionsForVertexPort( InputPort port ) - { - //Vertex displacement and per vertex custom data - WireReference connection = port.GetConnection(); - ParentNode node = UIUtils.GetNode( connection.NodeId ); - - string vertexInstructions = node.GetValueFromOutputStr( connection.PortId, port.DataType, ref m_currentDataCollector, false ); - - if( m_currentDataCollector.DirtySpecialLocalVariables ) - { - m_currentDataCollector.AddVertexInstruction( m_currentDataCollector.SpecialLocalVariables, UniqueId, false ); - m_currentDataCollector.ClearSpecialLocalVariables(); - } - - if( m_currentDataCollector.DirtyVertexVariables ) - { - m_currentDataCollector.AddVertexInstruction( m_currentDataCollector.VertexLocalVariables, UniqueId, false ); - m_currentDataCollector.ClearVertexLocalVariables(); - } - - return vertexInstructions; - } - - public void CreateInstructionsForPort( InputPort port, string portName, bool addCustomDelimiters = false, string customDelimiterIn = null, string customDelimiterOut = null, bool ignoreLocalVar = false, bool normalIsConnected = false , bool isDebugPort = false ) - { - WireReference connection = port.GetConnection(); - ParentNode node = UIUtils.GetNode( connection.NodeId ); - - string newInstruction = node.GetValueFromOutputStr( connection.PortId, port.DataType, ref m_currentDataCollector, ignoreLocalVar ); - - if( m_currentDataCollector.DirtySpecialLocalVariables ) - { - m_currentDataCollector.AddInstructions( m_currentDataCollector.SpecialLocalVariables ); - m_currentDataCollector.ClearSpecialLocalVariables(); - } - - if( m_currentDataCollector.DirtyVertexVariables ) - { - m_currentDataCollector.AddVertexInstruction( m_currentDataCollector.VertexLocalVariables, port.NodeId, false ); - m_currentDataCollector.ClearVertexLocalVariables(); - } - - if( m_currentDataCollector.ForceNormal && !normalIsConnected ) - { - m_currentDataCollector.AddToStartInstructions( "\t\t\t" + Constants.OutputVarStr + ".Normal = float3(0,0,1);\n" ); - m_currentDataCollector.DirtyNormal = true; - m_currentDataCollector.ForceNormal = false; - } - - m_currentDataCollector.AddInstructions( addCustomDelimiters ? customDelimiterIn : ( "\t\t\t" + portName + " = " ) ); - m_currentDataCollector.AddInstructions( newInstruction ); - m_currentDataCollector.AddInstructions( addCustomDelimiters ? customDelimiterOut :((isDebugPort)?" + 1E-5;\n":";\n") ); - } - - public string CreateInstructionStringForPort( InputPort port, bool ignoreLocalVar = false ) - { - WireReference connection = port.GetConnection(); - ParentNode node = UIUtils.GetNode( connection.NodeId ); - - string newInstruction = node.GetValueFromOutputStr( connection.PortId, port.DataType, ref m_currentDataCollector, ignoreLocalVar ); - - if( m_currentDataCollector.DirtySpecialLocalVariables ) - { - m_currentDataCollector.AddInstructions( m_currentDataCollector.SpecialLocalVariables ); - m_currentDataCollector.ClearSpecialLocalVariables(); - } - - if( m_currentDataCollector.DirtyVertexVariables ) - { - m_currentDataCollector.AddVertexInstruction( m_currentDataCollector.VertexLocalVariables, port.NodeId, false ); - m_currentDataCollector.ClearVertexLocalVariables(); - } - - if( m_currentDataCollector.ForceNormal ) - { - m_currentDataCollector.AddToStartInstructions( "\t\t\t" + Constants.OutputVarStr + ".Normal = float3(0,0,1);\n" ); - m_currentDataCollector.DirtyNormal = true; - m_currentDataCollector.ForceNormal = false; - } - - return newInstruction; - } - - public override Shader Execute( string pathname, bool isFullPath ) - { - ForcePortType(); - ForceReordering(); - UpdateFromBlendMode(); - base.Execute( pathname, isFullPath ); - RegisterStandaloneFuntions(); - - bool isInstancedShader = m_renderingOptionsOpHelper.ForceEnableInstancing || UIUtils.IsInstancedShader(); - bool hasVirtualTexture = UIUtils.HasVirtualTexture(); - bool hasTranslucency = false; - bool hasTransmission = false; - bool hasEmission = false; - bool hasOpacity = false; - bool hasOpacityMask = false; - bool hasRefraction = false; - //bool hasVertexOffset = false; - //bool hasCustomLightingAlpha = false; - bool hasCustomLightingMask = false; - - string customLightingCode = string.Empty; - string customLightingAlphaCode = string.Empty; - string customLightingMaskCode = string.Empty; - string customLightingInstructions = string.Empty; - - string refractionCode = string.Empty; - string refractionInstructions = string.Empty; - string refractionFix = string.Empty; - - string aboveUsePasses = string.Empty; - string bellowUsePasses = string.Empty; - - - m_currentDataCollector.TesselationActive = m_tessOpHelper.EnableTesselation; - m_currentDataCollector.CurrentRenderPath = m_renderPath; - - StandardShaderLightModel cachedLightModel = m_currentLightModel; - NodeAvailability cachedAvailability = ContainerGraph.CurrentCanvasMode; - - bool debugIsUsingCustomLighting = false; - bool usingDebugPort = false; - if( m_inputPorts[ m_inputPorts.Count - 1 ].IsConnected ) - { - usingDebugPort = true; - debugIsUsingCustomLighting = m_currentLightModel == StandardShaderLightModel.CustomLighting; - - m_currentDataCollector.GenType = PortGenType.CustomLighting; - m_currentLightModel = StandardShaderLightModel.CustomLighting; - ContainerGraph.CurrentCanvasMode = NodeAvailability.CustomLighting; - } - - if( isInstancedShader ) - { - m_currentDataCollector.AddToPragmas( UniqueId, IOUtils.InstancedPropertiesHeader ); - } - - if( m_renderingOptionsOpHelper.SpecularHighlightToggle || m_renderingOptionsOpHelper.ReflectionsToggle ) - m_currentDataCollector.AddToProperties( UniqueId, "[Header(Forward Rendering Options)]", 10001 ); - if( m_renderingOptionsOpHelper.SpecularHighlightToggle ) - { - m_currentDataCollector.AddToProperties( UniqueId, "[ToggleOff] _SpecularHighlights(\"Specular Highlights\", Float) = 1.0", 10002 ); - m_currentDataCollector.AddToPragmas( UniqueId, "shader_feature _SPECULARHIGHLIGHTS_OFF" ); - } - if( m_renderingOptionsOpHelper.ReflectionsToggle ) - { - m_currentDataCollector.AddToProperties( UniqueId, "[ToggleOff] _GlossyReflections(\"Reflections\", Float) = 1.0", 10003 ); - m_currentDataCollector.AddToPragmas( UniqueId, "shader_feature _GLOSSYREFLECTIONS_OFF" ); - } - - - // See if each node is being used on frag and/or vert ports - SetupNodeCategories(); - m_containerGraph.CheckPropertiesAutoRegister( ref m_currentDataCollector ); - - if( m_refractionPort.IsConnected || m_inputPorts[ m_inputPorts.Count - 1 ].IsConnected ) - { - m_currentDataCollector.DirtyNormal = true; - m_currentDataCollector.ForceNormal = true; - } - //this.PropagateNodeData( nodeData ); - - string tags = "\"RenderType\" = \"{0}\" \"Queue\" = \"{1}\""; - string finalRenderType = ( m_renderType == RenderType.Custom && m_customRenderType.Length > 0 ) ? m_customRenderType : m_renderType.ToString(); - tags = string.Format( tags, finalRenderType, ( m_renderQueue + ( ( m_queueOrder >= 0 ) ? "+" : string.Empty ) + m_queueOrder ) ); - //if ( !m_customBlendMode ) - { - if( m_alphaMode == AlphaMode.Transparent || m_alphaMode == AlphaMode.Premultiply ) - { - //tags += " \"IgnoreProjector\" = \"True\""; - if( !m_renderingOptionsOpHelper.IgnoreProjectorValue ) - { - Debug.Log( string.Format( "Setting Ignore Projector to True since it's requires by Blend Mode {0}.", m_alphaMode ) ); - m_renderingOptionsOpHelper.IgnoreProjectorValue = true; - } - } - } - - tags += m_renderingOptionsOpHelper.IgnoreProjectorTag; - tags += m_renderingOptionsOpHelper.ForceNoShadowCastingTag; - tags += m_renderingOptionsOpHelper.DisableBatchingTag; - - //add virtual texture support - if( hasVirtualTexture ) - { - tags += " \"Amplify\" = \"True\" "; - } - - //tags = "Tags{ " + tags + " }"; - - string outputStruct = ""; - switch( m_currentLightModel ) - { - case StandardShaderLightModel.CustomLighting: outputStruct = "SurfaceOutputCustomLightingCustom"; break; - case StandardShaderLightModel.Standard: outputStruct = "SurfaceOutputStandard"; break; - case StandardShaderLightModel.StandardSpecular: outputStruct = "SurfaceOutputStandardSpecular"; break; - case StandardShaderLightModel.Unlit: - case StandardShaderLightModel.Lambert: - case StandardShaderLightModel.BlinnPhong: outputStruct = "SurfaceOutput"; break; - } - - if( m_currentLightModel == StandardShaderLightModel.CustomLighting ) - { - m_currentDataCollector.AddToIncludes( UniqueId, Constants.UnityPBSLightingLib ); - - m_currentDataCollector.ChangeCustomInputHeader( m_currentLightModel.ToString() + Constants.CustomLightStructStr ); - m_currentDataCollector.AddToCustomInput( UniqueId, "half3 Albedo", true ); - m_currentDataCollector.AddToCustomInput( UniqueId, "half3 Normal", true ); - m_currentDataCollector.AddToCustomInput( UniqueId, "half3 Emission", true ); - m_currentDataCollector.AddToCustomInput( UniqueId, "half Metallic", true ); - m_currentDataCollector.AddToCustomInput( UniqueId, "half Smoothness", true ); - m_currentDataCollector.AddToCustomInput( UniqueId, "half Occlusion", true ); - m_currentDataCollector.AddToCustomInput( UniqueId, "half Alpha", true ); - m_currentDataCollector.AddToCustomInput( UniqueId, "Input SurfInput", true ); - m_currentDataCollector.AddToCustomInput( UniqueId, "UnityGIInput GIData", true ); - } - - //Terrain Draw Instanced - if( m_drawInstancedHelper.Enabled ) - { - if( !m_currentDataCollector.DirtyPerVertexData ) - { - m_currentDataCollector.OpenPerVertexHeader( !m_tessOpHelper.EnableTesselation ); - } - m_drawInstancedHelper.UpdateDataCollectorForStandard( ref m_currentDataCollector ); - } - - // Need to sort before creating local vars so they can inspect the normal port correctly - SortedList<int, InputPort> sortedPorts = new SortedList<int, InputPort>(); - for( int i = 0; i < m_inputPorts.Count; i++ ) - { - sortedPorts.Add( m_inputPorts[ i ].OrderId, m_inputPorts[ i ] ); - } - - bool normalIsConnected = m_normalPort.IsConnected; - m_tessOpHelper.Reset(); - if( m_inputPorts[ m_inputPorts.Count - 1 ].IsConnected ) - { - //Debug Port active - InputPort debugPort = m_inputPorts[ m_inputPorts.Count - 1 ]; - m_currentDataCollector.PortCategory = debugPort.Category; - if( debugIsUsingCustomLighting ) - { - m_currentDataCollector.UsingCustomOutput = true; - WireReference connection = m_inputPorts[ m_inputPorts.Count - 1 ].GetConnection(); - ParentNode node = UIUtils.GetNode( connection.NodeId ); - customLightingCode = node.GetValueFromOutputStr( connection.PortId, WirePortDataType.FLOAT3, ref m_currentDataCollector, false ); - customLightingInstructions = m_currentDataCollector.CustomOutput; - - if( m_currentDataCollector.ForceNormal ) - { - m_currentDataCollector.AddToStartInstructions( "\t\t\t" + Constants.OutputVarStr + ".Normal = float3(0,0,1);\n" ); - m_currentDataCollector.DirtyNormal = true; - m_currentDataCollector.ForceNormal = false; - } - - if( m_currentDataCollector.DirtyVertexVariables ) - { - m_currentDataCollector.AddVertexInstruction( m_currentDataCollector.VertexLocalVariables, UniqueId, false ); - m_currentDataCollector.ClearVertexLocalVariables(); - } - m_currentDataCollector.UsingCustomOutput = false; - } - else - { - CreateInstructionsForPort( debugPort, Constants.OutputVarStr + ".Emission", false, null, null, false, false,true ); - } - } - else - { - MasterNodePortCategory currentCategory = sortedPorts[ 0 ].Category; - //Collect data from standard nodes - for( int i = 0; i < sortedPorts.Count; i++ ) - { - // prepare ports for custom lighting - m_currentDataCollector.GenType = sortedPorts[ i ].GenType; - if( m_currentLightModel == StandardShaderLightModel.CustomLighting && sortedPorts[ i ].Name.Equals( AlphaStr ) ) - ContainerGraph.ResetNodesLocalVariablesIfNot( MasterNodePortCategory.Vertex ); - - if( sortedPorts[ i ].IsConnected ) - { - m_currentDataCollector.PortCategory = sortedPorts[ i ].Category; - - if( sortedPorts[ i ].Name.Equals( NormalStr ) )// Normal Map is Connected - { - m_currentDataCollector.DirtyNormal = true; - } - if( sortedPorts[ i ].Name.Equals( TranslucencyStr ) ) - { - hasTranslucency = true; - } - if( sortedPorts[ i ].Name.Equals( TransmissionStr ) ) - { - hasTransmission = true; - } - if( sortedPorts[ i ].Name.Equals( EmissionStr ) ) - { - hasEmission = true; - } - - if( sortedPorts[ i ].Name.Equals( RefractionStr ) ) - { - hasRefraction = true; - } - - if( sortedPorts[ i ].Name.Equals( AlphaStr ) ) - { - hasOpacity = true; - } - - if( sortedPorts[ i ].Name.Equals( DiscardStr ) ) - { - hasOpacityMask = true; - } - - if( hasRefraction ) - { - m_currentDataCollector.AddToInput( UniqueId, SurfaceInputs.SCREEN_POS ); - m_currentDataCollector.AddToInput( UniqueId, SurfaceInputs.WORLD_POS ); - - //not necessary, just being safe - m_currentDataCollector.DirtyNormal = true; - m_currentDataCollector.ForceNormal = true; - - if( m_grabOrder != 0 ) - { - m_currentDataCollector.AddGrabPass( "RefractionGrab" + m_grabOrder ); - m_currentDataCollector.AddToUniforms( UniqueId, "uniform sampler2D RefractionGrab" + m_grabOrder + ";" ); - } - else - { - m_currentDataCollector.AddGrabPass( "" ); - m_currentDataCollector.AddToUniforms( UniqueId, "uniform sampler2D _GrabTexture;" ); - } - - if( !m_inlineChromaticAberration.Active ) - { - m_currentDataCollector.AddToUniforms( UniqueId, "uniform float _ChromaticAberration;" ); - - m_currentDataCollector.AddToProperties( UniqueId, "[Header(Refraction)]", m_refractionReorder.OrderIndex ); - m_currentDataCollector.AddToProperties( UniqueId, "_ChromaticAberration(\"Chromatic Aberration\", Range( 0 , 0.3)) = 0.1", m_refractionReorder.OrderIndex + 1 ); - } - - m_currentDataCollector.AddToPragmas( UniqueId, "multi_compile _ALPHAPREMULTIPLY_ON" ); - } - - if( hasTranslucency || hasTransmission ) - { - //Translucency and Transmission Generation - - //Add properties and uniforms - m_currentDataCollector.AddToIncludes( UniqueId, Constants.UnityPBSLightingLib ); - - if( hasTranslucency ) - { - m_currentDataCollector.AddToProperties( UniqueId, "[Header(Translucency)]", m_translucencyReorder.OrderIndex ); - m_currentDataCollector.AddToProperties( UniqueId, "_Translucency(\"Strength\", Range( 0 , 50)) = 1", m_translucencyReorder.OrderIndex + 1 ); - m_currentDataCollector.AddToProperties( UniqueId, "_TransNormalDistortion(\"Normal Distortion\", Range( 0 , 1)) = 0.1", m_translucencyReorder.OrderIndex + 2 ); - m_currentDataCollector.AddToProperties( UniqueId, "_TransScattering(\"Scaterring Falloff\", Range( 1 , 50)) = 2", m_translucencyReorder.OrderIndex + 3 ); - m_currentDataCollector.AddToProperties( UniqueId, "_TransDirect(\"Direct\", Range( 0 , 1)) = 1", m_translucencyReorder.OrderIndex + 4 ); - m_currentDataCollector.AddToProperties( UniqueId, "_TransAmbient(\"Ambient\", Range( 0 , 1)) = 0.2", m_translucencyReorder.OrderIndex + 5 ); - m_currentDataCollector.AddToProperties( UniqueId, "_TransShadow(\"Shadow\", Range( 0 , 1)) = 0.9", m_translucencyReorder.OrderIndex + 6 ); - - m_currentDataCollector.AddToUniforms( UniqueId, "uniform half _Translucency;" ); - m_currentDataCollector.AddToUniforms( UniqueId, "uniform half _TransNormalDistortion;" ); - m_currentDataCollector.AddToUniforms( UniqueId, "uniform half _TransScattering;" ); - m_currentDataCollector.AddToUniforms( UniqueId, "uniform half _TransDirect;" ); - m_currentDataCollector.AddToUniforms( UniqueId, "uniform half _TransAmbient;" ); - m_currentDataCollector.AddToUniforms( UniqueId, "uniform half _TransShadow;" ); - } - - //Add custom struct - switch( m_currentLightModel ) - { - case StandardShaderLightModel.Standard: - case StandardShaderLightModel.StandardSpecular: - outputStruct = "SurfaceOutput" + m_currentLightModel.ToString() + Constants.CustomLightStructStr; break; - } - - m_currentDataCollector.ChangeCustomInputHeader( m_currentLightModel.ToString() + Constants.CustomLightStructStr ); - m_currentDataCollector.AddToCustomInput( UniqueId, "half3 Albedo", true ); - m_currentDataCollector.AddToCustomInput( UniqueId, "half3 Normal", true ); - m_currentDataCollector.AddToCustomInput( UniqueId, "half3 Emission", true ); - switch( m_currentLightModel ) - { - case StandardShaderLightModel.Standard: - m_currentDataCollector.AddToCustomInput( UniqueId, "half Metallic", true ); - break; - case StandardShaderLightModel.StandardSpecular: - m_currentDataCollector.AddToCustomInput( UniqueId, "half3 Specular", true ); - break; - } - m_currentDataCollector.AddToCustomInput( UniqueId, "half Smoothness", true ); - m_currentDataCollector.AddToCustomInput( UniqueId, "half Occlusion", true ); - m_currentDataCollector.AddToCustomInput( UniqueId, "half Alpha", true ); - if( hasTranslucency ) - m_currentDataCollector.AddToCustomInput( UniqueId, "half3 Translucency", true ); - - if( hasTransmission ) - m_currentDataCollector.AddToCustomInput( UniqueId, "half3 Transmission", true ); - } - - if( sortedPorts[ i ].Name.Equals( DiscardStr ) ) - { - //Discard Op Node - if( m_currentLightModel == StandardShaderLightModel.CustomLighting ) - { - hasCustomLightingMask = true; - m_currentDataCollector.UsingCustomOutput = true; - m_currentDataCollector.GenType = PortGenType.CustomLighting; - WireReference connection = sortedPorts[ i ].GetConnection(); - ParentNode node = UIUtils.GetNode( connection.NodeId ); - - customLightingMaskCode = node.GetValueFromOutputStr( connection.PortId, WirePortDataType.FLOAT, ref m_currentDataCollector, false ); - customLightingMaskCode = "clip( " + customLightingMaskCode + " - " + m_inlineOpacityMaskClipValue.GetValueOrProperty( IOUtils.MaskClipValueName, false ) + " )"; - customLightingInstructions = m_currentDataCollector.CustomOutput; - - m_currentDataCollector.GenType = PortGenType.NonCustomLighting; - m_currentDataCollector.UsingCustomOutput = false; - continue; - } - else - { - string clipIn = "\t\t\tclip( "; - string clipOut = " - " + m_inlineOpacityMaskClipValue.GetValueOrProperty( IOUtils.MaskClipValueName, false ) + " );\n"; - //if( ( m_alphaToCoverage || m_inlineAlphaToCoverage.Active ) && m_castShadows ) - //{ - // clipIn = "\t\t\t#if UNITY_PASS_SHADOWCASTER\n" + clipIn; - // clipOut = clipOut + "\t\t\t#endif\n"; - //} - CreateInstructionsForPort( sortedPorts[ i ], Constants.OutputVarStr + "." + sortedPorts[ i ].DataName, true, clipIn, clipOut, false, normalIsConnected ); - } - } - else if( sortedPorts[ i ].DataName.Equals( VertexDataStr ) ) - { - string vertexInstructions = CreateInstructionsForVertexPort( sortedPorts[ i ] ); - m_currentDataCollector.AddToVertexDisplacement( vertexInstructions, m_vertexMode ); - } - else if( sortedPorts[ i ].DataName.Equals( VertexNormalStr ) ) - { - string vertexInstructions = CreateInstructionsForVertexPort( sortedPorts[ i ] ); - m_currentDataCollector.AddToVertexNormal( vertexInstructions ); - } - else if( m_tessOpHelper.IsTessellationPort( sortedPorts[ i ].PortId ) && sortedPorts[ i ].IsConnected /* && m_tessOpHelper.EnableTesselation*/) - { - //Vertex displacement and per vertex custom data - WireReference connection = sortedPorts[ i ].GetConnection(); - ParentNode node = UIUtils.GetNode( connection.NodeId ); - - string vertexInstructions = node.GetValueFromOutputStr( connection.PortId, sortedPorts[ i ].DataType, ref m_currentDataCollector, false ); - - if( m_currentDataCollector.DirtySpecialLocalVariables ) - { - m_tessOpHelper.AddAdditionalData( m_currentDataCollector.SpecialLocalVariables ); - m_currentDataCollector.ClearSpecialLocalVariables(); - } - - if( m_currentDataCollector.DirtyVertexVariables ) - { - m_tessOpHelper.AddAdditionalData( m_currentDataCollector.VertexLocalVariables ); - m_currentDataCollector.ClearVertexLocalVariables(); - } - - m_tessOpHelper.AddCustomFunction( vertexInstructions ); - } - else if( sortedPorts[ i ].Name.Equals( RefractionStr ) ) - { - ContainerGraph.ResetNodesLocalVariables(); - m_currentDataCollector.UsingCustomOutput = true; - - refractionFix = " + 0.00001 * i.screenPos * i.worldPos"; - m_currentDataCollector.AddInstructions( "\t\t\to.Normal = o.Normal" + refractionFix + ";\n" ); - refractionCode = CreateInstructionStringForPort( sortedPorts[ i ], false ); - refractionInstructions = m_currentDataCollector.CustomOutput; - - m_currentDataCollector.UsingCustomOutput = false; - } - else if( sortedPorts[ i ].Name.Equals( CustomLightingStr ) ) - { - m_currentDataCollector.UsingCustomOutput = true; - WireReference connection = sortedPorts[ i ].GetConnection(); - ParentNode node = UIUtils.GetNode( connection.NodeId ); - - customLightingCode = node.GetValueFromOutputStr( connection.PortId, WirePortDataType.FLOAT3, ref m_currentDataCollector, false ); - customLightingInstructions = m_currentDataCollector.CustomOutput; - - if( m_currentDataCollector.ForceNormal ) - { - m_currentDataCollector.AddToStartInstructions( "\t\t\t" + Constants.OutputVarStr + ".Normal = float3(0,0,1);\n" ); - m_currentDataCollector.DirtyNormal = true; - m_currentDataCollector.ForceNormal = false; - } - - if( m_currentDataCollector.DirtyVertexVariables ) - { - m_currentDataCollector.AddVertexInstruction( m_currentDataCollector.VertexLocalVariables, UniqueId, false ); - m_currentDataCollector.ClearVertexLocalVariables(); - } - - m_currentDataCollector.UsingCustomOutput = false; - - } - else if( sortedPorts[ i ].Name.Equals( AlphaStr ) && m_currentLightModel == StandardShaderLightModel.CustomLighting ) - { - m_currentDataCollector.UsingCustomOutput = true; - m_currentDataCollector.GenType = PortGenType.CustomLighting; - - WireReference connection = sortedPorts[ i ].GetConnection(); - ParentNode node = UIUtils.GetNode( connection.NodeId ); - - customLightingAlphaCode = node.GetValueFromOutputStr( connection.PortId, WirePortDataType.FLOAT, ref m_currentDataCollector, false ); - customLightingInstructions = m_currentDataCollector.CustomOutput; - - if( m_currentDataCollector.ForceNormal ) - { - m_currentDataCollector.AddToStartInstructions( "\t\t\t" + Constants.OutputVarStr + ".Normal = float3(0,0,1);\n" ); - m_currentDataCollector.DirtyNormal = true; - m_currentDataCollector.ForceNormal = false; - } - - if( m_currentDataCollector.DirtyVertexVariables ) - { - m_currentDataCollector.AddVertexInstruction( m_currentDataCollector.VertexLocalVariables, UniqueId, false ); - m_currentDataCollector.ClearVertexLocalVariables(); - } - - m_currentDataCollector.GenType = PortGenType.NonCustomLighting; - m_currentDataCollector.UsingCustomOutput = false; - } - else - { - // Surface shader instruccions - // if working on normals and have normal dependent node then ignore local var generation - CreateInstructionsForPort( sortedPorts[ i ], Constants.OutputVarStr + "." + sortedPorts[ i ].DataName, false, null, null, false, normalIsConnected ); - } - } - else if( sortedPorts[ i ].Name.Equals( AlphaStr ) ) - { - if( m_currentLightModel != StandardShaderLightModel.CustomLighting ) - { - m_currentDataCollector.AddInstructions( string.Format( "\t\t\t{0}.{1} = 1;\n", Constants.OutputVarStr, sortedPorts[ i ].DataName ) ); - } - } - } - - m_billboardOpHelper.FillDataCollectorWithInternalData( ref m_currentDataCollector ); - } - - - if( !m_renderingOptionsOpHelper.UseDefaultShadowCaster && - ( ( m_castShadows && ( m_alphaToCoverage || m_inlineAlphaToCoverage.Active ) ) || - ( m_castShadows && hasOpacity ) || - ( m_castShadows && ( m_currentDataCollector.UsingWorldNormal || m_currentDataCollector.UsingWorldReflection || m_currentDataCollector.UsingViewDirection ) ) || - ( m_castShadows && m_inputPorts[ m_discardPortId ].Available && m_inputPorts[ m_discardPortId ].IsConnected && m_currentLightModel == StandardShaderLightModel.CustomLighting ) )) - m_customShadowCaster = true; - else - m_customShadowCaster = false; - - //m_customShadowCaster = true; - - for( int i = 0; i < 4; i++ ) - { - if( m_currentDataCollector.GetChannelUsage( i ) == TextureChannelUsage.Required ) - { - string channelName = UIUtils.GetChannelName( i ); - m_currentDataCollector.AddToProperties( -1, UIUtils.GetTex2DProperty( channelName, TexturePropertyValues.white ), -1 ); - } - } - - m_currentDataCollector.AddToProperties( -1, IOUtils.DefaultASEDirtyCheckProperty, 10000 ); - if( m_inputPorts[ m_discardPortId ].Available && m_inputPorts[ m_discardPortId ].IsConnected ) - { - if( m_inlineOpacityMaskClipValue.IsValid ) - { - RangedFloatNode fnode = UIUtils.GetNode( m_inlineOpacityMaskClipValue.NodeId ) as RangedFloatNode; - if( fnode != null ) - { - m_currentDataCollector.AddToProperties( fnode.UniqueId, fnode.GetPropertyValue(), fnode.OrderIndex ); - m_currentDataCollector.AddToUniforms( fnode.UniqueId, fnode.GetUniformValue() ); - } - else - { - IntNode inode = UIUtils.GetNode( m_inlineOpacityMaskClipValue.NodeId ) as IntNode; - m_currentDataCollector.AddToProperties( inode.UniqueId, inode.GetPropertyValue(), inode.OrderIndex ); - m_currentDataCollector.AddToUniforms( inode.UniqueId, inode.GetUniformValue() ); - } - } - else - { - m_currentDataCollector.AddToProperties( -1, string.Format( IOUtils.MaskClipValueProperty, OpacityMaskClipValueStr, m_opacityMaskClipValue ), ( m_maskClipReorder != null ) ? m_maskClipReorder.OrderIndex : -1 ); - m_currentDataCollector.AddToUniforms( -1, string.Format( IOUtils.MaskClipValueUniform, m_opacityMaskClipValue ) ); - } - } - - if( !m_currentDataCollector.DirtyInputs ) - m_currentDataCollector.AddToInput( UniqueId, "half filler", true ); - - if( m_currentLightModel == StandardShaderLightModel.BlinnPhong ) - m_currentDataCollector.AddToProperties( -1, "_SpecColor(\"Specular Color\",Color)=(1,1,1,1)", m_specColorReorder.OrderIndex ); - - //Tesselation - if( m_tessOpHelper.EnableTesselation ) - { - m_tessOpHelper.AddToDataCollector( ref m_currentDataCollector, m_tessellationReorder != null ? m_tessellationReorder.OrderIndex : -1 ); - if( !m_currentDataCollector.DirtyPerVertexData ) - { - m_currentDataCollector.OpenPerVertexHeader( false ); - } - } - - - if( m_outlineHelper.EnableOutline || ( m_currentDataCollector.UsingCustomOutlineColor || m_currentDataCollector.CustomOutlineSelectedAlpha > 0 || m_currentDataCollector.UsingCustomOutlineWidth ) ) - { - m_outlineHelper.AddToDataCollector( ref m_currentDataCollector ); - } - -#if !UNITY_2017_1_OR_NEWER - if( m_renderingOptionsOpHelper.LodCrossfade ) - { - m_currentDataCollector.AddToPragmas( UniqueId, "multi_compile _ LOD_FADE_CROSSFADE" ); - m_currentDataCollector.AddToStartInstructions( "\t\t\tUNITY_APPLY_DITHER_CROSSFADE(i);\n" ); - m_currentDataCollector.AddToInput( UniqueId, "UNITY_DITHER_CROSSFADE_COORDS", false ); - m_currentDataCollector.AddVertexInstruction( "UNITY_TRANSFER_DITHER_CROSSFADE( " + Constants.VertexShaderOutputStr + ", " + Constants.VertexShaderInputStr + ".vertex )", UniqueId, true ); - } -#endif - //m_additionalIncludes.AddToDataCollector( ref m_currentDataCollector ); - //m_additionalPragmas.AddToDataCollector( ref m_currentDataCollector ); - //m_additionalDefines.AddToDataCollector( ref m_currentDataCollector ); - m_additionalDirectives.AddAllToDataCollector( ref m_currentDataCollector ); - - //m_currentDataCollector.CloseInputs(); - m_currentDataCollector.CloseCustomInputs(); - m_currentDataCollector.CloseProperties(); - m_currentDataCollector.ClosePerVertexHeader(); - - //build Shader Body - string ShaderBody = string.Empty; - OpenShaderBody( ref ShaderBody, m_shaderName ); - { - //set properties - if( m_currentDataCollector.DirtyProperties ) - { - ShaderBody += m_currentDataCollector.BuildPropertiesString(); - } - //set subshader - OpenSubShaderBody( ref ShaderBody ); - { - - // Add extra depth pass - m_zBufferHelper.DrawExtraDepthPass( ref ShaderBody ); - - // Add optionalPasses - if( m_outlineHelper.EnableOutline || ( m_currentDataCollector.UsingCustomOutlineColor || m_currentDataCollector.CustomOutlineSelectedAlpha > 0 || m_currentDataCollector.UsingCustomOutlineWidth ) ) - { - if( !usingDebugPort ) - AddMultilineBody( ref ShaderBody, m_outlineHelper.OutlineFunctionBody( ref m_currentDataCollector, isInstancedShader, m_customShadowCaster, UIUtils.RemoveInvalidCharacters( ShaderName ), ( m_billboardOpHelper.IsBillboard && !usingDebugPort ? m_billboardOpHelper.GetInternalMultilineInstructions() : null ), ref m_tessOpHelper, ShaderModelTypeArr[ m_shaderModelIdx ], CurrentPrecisionType ) ); - } - - //Add SubShader tags - if( hasEmission ) - { - tags += " \"IsEmissive\" = \"true\" "; - } - - tags += m_customTagsHelper.GenerateCustomTags(); - - tags = "Tags{ " + tags + " }"; - m_usePass.BuildUsePassInfo( m_currentDataCollector, ref aboveUsePasses, ref bellowUsePasses, "\t\t" ); - if( !string.IsNullOrEmpty( aboveUsePasses ) ) - { - ShaderBody += aboveUsePasses; - } - - AddRenderTags( ref ShaderBody, tags ); - AddShaderLOD( ref ShaderBody, ShaderLOD ); - AddRenderState( ref ShaderBody, "Cull", m_inlineCullMode.GetValueOrProperty( m_cullMode.ToString() ) ); - m_customBlendAvailable = ( m_alphaMode == AlphaMode.Custom || m_alphaMode == AlphaMode.Opaque ); - if( ( m_zBufferHelper.IsActive && m_customBlendAvailable ) || m_outlineHelper.UsingZWrite || m_outlineHelper.UsingZTest ) - { - ShaderBody += m_zBufferHelper.CreateDepthInfo( m_outlineHelper.UsingZWrite, m_outlineHelper.UsingZTest ); - } - if( m_stencilBufferHelper.Active ) - { - ShaderBody += m_stencilBufferHelper.CreateStencilOp( this ); - } - - if( m_blendOpsHelper.Active ) - { - ShaderBody += m_blendOpsHelper.CreateBlendOps(); - } - - if( m_alphaToCoverage || m_inlineAlphaToCoverage.Active ) - { - ShaderBody += "\t\tAlphaToMask "+ m_inlineAlphaToCoverage.GetValueOrProperty( "On" )+"\n"; - } - - // Build Color Mask - m_colorMaskHelper.BuildColorMask( ref ShaderBody, m_customBlendAvailable ); - - //ShaderBody += "\t\tZWrite " + _zWriteMode + '\n'; - //ShaderBody += "\t\tZTest " + _zTestMode + '\n'; - - //Add GrabPass - if( m_currentDataCollector.DirtyGrabPass ) - { - ShaderBody += m_currentDataCollector.GrabPass; - } - - // build optional parameters - string OptionalParameters = string.Empty; - - // addword standard to custom lighting to accepts standard lighting models - string standardCustomLighting = string.Empty; - if( m_currentLightModel == StandardShaderLightModel.CustomLighting ) - standardCustomLighting = "Standard"; - - //add cg program - if( m_customShadowCaster ) - OpenCGInclude( ref ShaderBody ); - else - OpenCGProgram( ref ShaderBody ); - { - //Add Defines - if( m_currentDataCollector.DirtyDefines ) - ShaderBody += m_currentDataCollector.Defines; - - //Add Includes - if( m_customShadowCaster ) - { - m_currentDataCollector.AddToIncludes( UniqueId, Constants.UnityPBSLightingLib ); - m_currentDataCollector.AddToIncludes( UniqueId, "Lighting.cginc" ); - } - if( m_currentDataCollector.DirtyIncludes ) - ShaderBody += m_currentDataCollector.Includes; - - //define as surface shader and specify lighting model - if( UIUtils.GetTextureArrayNodeAmount() > 0 && m_shaderModelIdx < 3 ) - { - UIUtils.ShowMessage( "Automatically changing Shader Model to 3.5 since\nit's the minimum required by texture arrays." ); - m_shaderModelIdx = 3; - } - - // if tessellation is active then we need be at least using shader model 4.6 - if( m_tessOpHelper.EnableTesselation && m_shaderModelIdx < 6 ) - { - UIUtils.ShowMessage( "Automatically changing Shader Model to 4.6 since\nit's the minimum required by tessellation." ); - m_shaderModelIdx = 6; - } - - // if translucency is ON change render path - if( hasTranslucency && m_renderPath != RenderPath.ForwardOnly ) - { - UIUtils.ShowMessage( "Automatically changing Render Path to Forward Only since\ntranslucency only works in forward rendering." ); - m_renderPath = RenderPath.ForwardOnly; - } - - // if outline is ON change render path - if( m_outlineHelper.EnableOutline && m_renderPath != RenderPath.ForwardOnly ) - { - UIUtils.ShowMessage( "Automatically changing Render Path to Forward Only since\noutline only works in forward rendering." ); - m_renderPath = RenderPath.ForwardOnly; - } - - // if transmission is ON change render path - if( hasTransmission && m_renderPath != RenderPath.ForwardOnly ) - { - UIUtils.ShowMessage( "Automatically changing Render Path to Forward Only since\ntransmission only works in forward rendering." ); - m_renderPath = RenderPath.ForwardOnly; - } - - // if refraction is ON change render path - if( hasRefraction && m_renderPath != RenderPath.ForwardOnly ) - { - UIUtils.ShowMessage( "Automatically changing Render Path to Forward Only since\nrefraction only works in forward rendering." ); - m_renderPath = RenderPath.ForwardOnly; - } - - ShaderBody += string.Format( IOUtils.PragmaTargetHeader, ShaderModelTypeArr[ m_shaderModelIdx ] ); - - - //Add pragmas (needs check to see if all pragmas work with custom shadow caster) - if( m_currentDataCollector.DirtyPragmas/* && !m_customShadowCaster */) - ShaderBody += m_currentDataCollector.Pragmas; - - if( m_currentDataCollector.DirtyAdditionalDirectives ) - ShaderBody += m_currentDataCollector.StandardAdditionalDirectives; - - //if ( !m_customBlendMode ) - { - switch( m_alphaMode ) - { - case AlphaMode.Opaque: - case AlphaMode.Masked: break; - case AlphaMode.Transparent: - { - OptionalParameters += "alpha:fade" + Constants.OptionalParametersSep; - } - break; - case AlphaMode.Premultiply: - { - OptionalParameters += "alpha:premul" + Constants.OptionalParametersSep; - } - break; - } - } - - if( m_keepAlpha ) - { - OptionalParameters += "keepalpha" + Constants.OptionalParametersSep; - } - - if( hasRefraction ) - { - OptionalParameters += "finalcolor:RefractionF" + Constants.OptionalParametersSep; - } - - if( !m_customShadowCaster && m_castShadows ) - { - OptionalParameters += "addshadow" + Constants.OptionalParametersSep; - } - - if( m_castShadows ) - { - OptionalParameters += "fullforwardshadows" + Constants.OptionalParametersSep; - } - - if( !m_receiveShadows ) - { - OptionalParameters += "noshadow" + Constants.OptionalParametersSep; - } - - if( m_renderingOptionsOpHelper.IsOptionActive( " Add Pass" ) && usingDebugPort ) - { - OptionalParameters += "noforwardadd" + Constants.OptionalParametersSep; - } - - if( m_renderingOptionsOpHelper.ForceDisableInstancing ) - { - OptionalParameters += "noinstancing" + Constants.OptionalParametersSep; - } - - switch( m_renderPath ) - { - case RenderPath.All: break; - case RenderPath.DeferredOnly: OptionalParameters += "exclude_path:forward" + Constants.OptionalParametersSep; break; - case RenderPath.ForwardOnly: OptionalParameters += "exclude_path:deferred" + Constants.OptionalParametersSep; break; - } - - //Add code generation options - m_renderingOptionsOpHelper.Build( ref OptionalParameters ); - - if( !m_customShadowCaster ) - { - string customLightSurface = string.Empty; - if( hasTranslucency || hasTransmission ) - customLightSurface = "Custom"; - m_renderingPlatformOpHelper.SetRenderingPlatforms( ref ShaderBody ); - - //Check if Custom Vertex is being used and add tag - if( m_currentDataCollector.DirtyPerVertexData ) - OptionalParameters += "vertex:" + Constants.VertexDataFunc + Constants.OptionalParametersSep; - - if( m_tessOpHelper.EnableTesselation && !usingDebugPort ) - { - m_tessOpHelper.WriteToOptionalParams( ref OptionalParameters ); - } - - m_additionalSurfaceOptions.WriteToOptionalSurfaceOptions( ref OptionalParameters ); - - AddShaderPragma( ref ShaderBody, "surface surf " + standardCustomLighting + m_currentLightModel.ToString() + customLightSurface + Constants.OptionalParametersSep + OptionalParameters ); - } - else - { - if( /*m_currentDataCollector.UsingWorldNormal ||*/ m_currentDataCollector.UsingInternalData ) - { - ShaderBody += "\t\t#ifdef UNITY_PASS_SHADOWCASTER\n"; - ShaderBody += "\t\t\t#undef INTERNAL_DATA\n"; - ShaderBody += "\t\t\t#undef WorldReflectionVector\n"; - ShaderBody += "\t\t\t#undef WorldNormalVector\n"; - ShaderBody += "\t\t\t#define INTERNAL_DATA half3 internalSurfaceTtoW0; half3 internalSurfaceTtoW1; half3 internalSurfaceTtoW2;\n"; - ShaderBody += "\t\t\t#define WorldReflectionVector(data,normal) reflect (data.worldRefl, half3(dot(data.internalSurfaceTtoW0,normal), dot(data.internalSurfaceTtoW1,normal), dot(data.internalSurfaceTtoW2,normal)))\n"; - ShaderBody += "\t\t\t#define WorldNormalVector(data,normal) half3(dot(data.internalSurfaceTtoW0,normal), dot(data.internalSurfaceTtoW1,normal), dot(data.internalSurfaceTtoW2,normal))\n"; - ShaderBody += "\t\t#endif\n"; - } - } - - if( m_currentDataCollector.UsingHigherSizeTexcoords ) - { - ShaderBody += "\t\t#undef TRANSFORM_TEX\n"; - ShaderBody += "\t\t#define TRANSFORM_TEX(tex,name) float4(tex.xy * name##_ST.xy + name##_ST.zw, tex.z, tex.w)\n"; - } - - if( m_currentDataCollector.DirtyAppData ) - ShaderBody += m_currentDataCollector.CustomAppData; - - // Add Input struct - if( m_currentDataCollector.DirtyInputs ) - ShaderBody += "\t\t" + m_currentDataCollector.Inputs + "\t\t};" + "\n\n"; - - // Add Custom Lighting struct - if( m_currentDataCollector.DirtyCustomInput ) - ShaderBody += m_currentDataCollector.CustomInput + "\n\n"; - - //Add Uniforms - if( m_currentDataCollector.DirtyUniforms ) - ShaderBody += m_currentDataCollector.Uniforms + "\n"; - - // Add Array Derivatives Macros - //if( m_currentDataCollector.UsingArrayDerivatives ) - //{ - // ShaderBody += "\t\t#if defined(UNITY_COMPILER_HLSL2GLSL) || defined(SHADER_TARGET_SURFACE_ANALYSIS)\n"; - // ShaderBody += "\t\t\t#define ASE_SAMPLE_TEX2DARRAY_GRAD(tex,coord,dx,dy) UNITY_SAMPLE_TEX2DARRAY (tex,coord)\n"; - // ShaderBody += "\t\t#else\n"; - // ShaderBody += "\t\t\t#define ASE_SAMPLE_TEX2DARRAY_GRAD(tex,coord,dx,dy) tex.SampleGrad (sampler##tex,coord,dx,dy)\n"; - // ShaderBody += "\t\t#endif\n\n"; - //} - - //Add Instanced Properties - if( isInstancedShader && m_currentDataCollector.DirtyInstancedProperties ) - { - m_currentDataCollector.SetupInstancePropertiesBlock( UIUtils.RemoveInvalidCharacters( ShaderName ) ); - ShaderBody += m_currentDataCollector.InstancedProperties + "\n"; - } - - if( m_currentDataCollector.DirtyFunctions ) - ShaderBody += m_currentDataCollector.Functions + "\n"; - - - //Tesselation - if( m_tessOpHelper.EnableTesselation && !usingDebugPort ) - { - ShaderBody += m_tessOpHelper.GetCurrentTessellationFunction + "\n"; - } - - //Add Custom Vertex Data - if( m_currentDataCollector.DirtyPerVertexData ) - { - ShaderBody += m_currentDataCollector.VertexData; - } - - if( m_currentLightModel == StandardShaderLightModel.Unlit ) - { - for( int i = 0; i < VertexLitFunc.Length; i++ ) - { - ShaderBody += VertexLitFunc[ i ] + "\n"; - } - } - - //Add custom lighting - if( m_currentLightModel == StandardShaderLightModel.CustomLighting ) - { - ShaderBody += "\t\tinline half4 LightingStandard" + m_currentLightModel.ToString() + "( inout " + outputStruct + " " + Constants.CustomLightOutputVarStr + ", half3 viewDir, UnityGI gi )\n\t\t{\n"; - ShaderBody += "\t\t\tUnityGIInput data = s.GIData;\n"; - ShaderBody += "\t\t\tInput i = s.SurfInput;\n"; - ShaderBody += "\t\t\thalf4 c = 0;\n"; - if( m_currentDataCollector.UsingLightAttenuation ) - { - ShaderBody += "\t\t\t#ifdef UNITY_PASS_FORWARDBASE\n"; - ShaderBody += "\t\t\tfloat ase_lightAtten = data.atten;\n"; - ShaderBody += "\t\t\tif( _LightColor0.a == 0)\n"; - ShaderBody += "\t\t\tase_lightAtten = 0;\n"; - ShaderBody += "\t\t\t#else\n"; - ShaderBody += "\t\t\tfloat3 ase_lightAttenRGB = gi.light.color / ( ( _LightColor0.rgb ) + 0.000001 );\n"; - ShaderBody += "\t\t\tfloat ase_lightAtten = max( max( ase_lightAttenRGB.r, ase_lightAttenRGB.g ), ase_lightAttenRGB.b );\n"; - ShaderBody += "\t\t\t#endif\n"; - - ShaderBody += "\t\t\t#if defined(HANDLE_SHADOWS_BLENDING_IN_GI)\n"; - ShaderBody += "\t\t\thalf bakedAtten = UnitySampleBakedOcclusion(data.lightmapUV.xy, data.worldPos);\n"; - ShaderBody += "\t\t\tfloat zDist = dot(_WorldSpaceCameraPos - data.worldPos, UNITY_MATRIX_V[2].xyz);\n"; - ShaderBody += "\t\t\tfloat fadeDist = UnityComputeShadowFadeDistance(data.worldPos, zDist);\n"; - ShaderBody += "\t\t\tase_lightAtten = UnityMixRealtimeAndBakedShadows(data.atten, bakedAtten, UnityComputeShadowFade(fadeDist));\n"; - ShaderBody += "\t\t\t#endif\n"; - } - - //if( m_currentDataCollector.dirtyc ) - ShaderBody += customLightingInstructions; - ShaderBody += "\t\t\tc.rgb = " + ( !string.IsNullOrEmpty( customLightingCode ) ? customLightingCode : "0" ) + ";\n"; - ShaderBody += "\t\t\tc.a = " + ( !string.IsNullOrEmpty( customLightingAlphaCode ) ? customLightingAlphaCode : "1" ) + ";\n"; - if( m_alphaMode == AlphaMode.Premultiply || ( ( m_alphaMode == AlphaMode.Custom || m_alphaMode == AlphaMode.Opaque ) && m_blendOpsHelper.CurrentBlendRGB.IndexOf( "Premultiplied" ) > -1 ) ) - ShaderBody += "\t\t\tc.rgb *= c.a;\n"; - if( hasCustomLightingMask ) - ShaderBody += "\t\t\t" + customLightingMaskCode + ";\n"; - ShaderBody += "\t\t\treturn c;\n"; - ShaderBody += "\t\t}\n\n"; - - //Add GI function - ShaderBody += "\t\tinline void LightingStandard" + m_currentLightModel.ToString() + "_GI( inout " + outputStruct + " " + Constants.CustomLightOutputVarStr + ", UnityGIInput data, inout UnityGI gi )\n\t\t{\n"; - ShaderBody += "\t\t\ts.GIData = data;\n"; - //ShaderBody += "\t\t\tUNITY_GI(gi, " + Constants.CustomLightOutputVarStr + ", data);\n"; - ShaderBody += "\t\t}\n\n"; - } - - //Add custom lighting function - if( hasTranslucency || hasTransmission ) - { - ShaderBody += "\t\tinline half4 Lighting" + m_currentLightModel.ToString() + Constants.CustomLightStructStr + "(" + outputStruct + " " + Constants.CustomLightOutputVarStr + ", half3 viewDir, UnityGI gi )\n\t\t{\n"; - if( hasTranslucency ) - { - ShaderBody += "\t\t\t#if !DIRECTIONAL\n"; - ShaderBody += "\t\t\tfloat3 lightAtten = gi.light.color;\n"; - ShaderBody += "\t\t\t#else\n"; - ShaderBody += "\t\t\tfloat3 lightAtten = lerp( _LightColor0.rgb, gi.light.color, _TransShadow );\n"; - ShaderBody += "\t\t\t#endif\n"; - ShaderBody += "\t\t\thalf3 lightDir = gi.light.dir + " + Constants.CustomLightOutputVarStr + ".Normal * _TransNormalDistortion;\n"; - ShaderBody += "\t\t\thalf transVdotL = pow( saturate( dot( viewDir, -lightDir ) ), _TransScattering );\n"; - ShaderBody += "\t\t\thalf3 translucency = lightAtten * (transVdotL * _TransDirect + gi.indirect.diffuse * _TransAmbient) * " + Constants.CustomLightOutputVarStr + ".Translucency;\n"; - ShaderBody += "\t\t\thalf4 c = half4( " + Constants.CustomLightOutputVarStr + ".Albedo * translucency * _Translucency, 0 );\n\n"; - } - - if( hasTransmission ) - { - ShaderBody += "\t\t\thalf3 transmission = max(0 , -dot(" + Constants.CustomLightOutputVarStr + ".Normal, gi.light.dir)) * gi.light.color * " + Constants.CustomLightOutputVarStr + ".Transmission;\n"; - ShaderBody += "\t\t\thalf4 d = half4(" + Constants.CustomLightOutputVarStr + ".Albedo * transmission , 0);\n\n"; - } - - ShaderBody += "\t\t\tSurfaceOutput" + m_currentLightModel.ToString() + " r;\n"; - ShaderBody += "\t\t\tr.Albedo = " + Constants.CustomLightOutputVarStr + ".Albedo;\n"; - ShaderBody += "\t\t\tr.Normal = " + Constants.CustomLightOutputVarStr + ".Normal;\n"; - ShaderBody += "\t\t\tr.Emission = " + Constants.CustomLightOutputVarStr + ".Emission;\n"; - switch( m_currentLightModel ) - { - case StandardShaderLightModel.Standard: - ShaderBody += "\t\t\tr.Metallic = " + Constants.CustomLightOutputVarStr + ".Metallic;\n"; - break; - case StandardShaderLightModel.StandardSpecular: - ShaderBody += "\t\t\tr.Specular = " + Constants.CustomLightOutputVarStr + ".Specular;\n"; - break; - } - ShaderBody += "\t\t\tr.Smoothness = " + Constants.CustomLightOutputVarStr + ".Smoothness;\n"; - ShaderBody += "\t\t\tr.Occlusion = " + Constants.CustomLightOutputVarStr + ".Occlusion;\n"; - ShaderBody += "\t\t\tr.Alpha = " + Constants.CustomLightOutputVarStr + ".Alpha;\n"; - ShaderBody += "\t\t\treturn Lighting" + m_currentLightModel.ToString() + " (r, viewDir, gi)" + ( hasTranslucency ? " + c" : "" ) + ( hasTransmission ? " + d" : "" ) + ";\n"; - ShaderBody += "\t\t}\n\n"; - - //Add GI function - ShaderBody += "\t\tinline void Lighting" + m_currentLightModel.ToString() + Constants.CustomLightStructStr + "_GI(" + outputStruct + " " + Constants.CustomLightOutputVarStr + ", UnityGIInput data, inout UnityGI gi )\n\t\t{\n"; - - ShaderBody += "\t\t\t#if defined(UNITY_PASS_DEFERRED) && UNITY_ENABLE_REFLECTION_BUFFERS\n"; - ShaderBody += "\t\t\t\tgi = UnityGlobalIllumination(data, " + Constants.CustomLightOutputVarStr + ".Occlusion, " + Constants.CustomLightOutputVarStr + ".Normal);\n"; - ShaderBody += "\t\t\t#else\n"; - ShaderBody += "\t\t\t\tUNITY_GLOSSY_ENV_FROM_SURFACE( g, " + Constants.CustomLightOutputVarStr + ", data );\n"; - ShaderBody += "\t\t\t\tgi = UnityGlobalIllumination( data, " + Constants.CustomLightOutputVarStr + ".Occlusion, " + Constants.CustomLightOutputVarStr + ".Normal, g );\n"; - ShaderBody += "\t\t\t#endif\n"; - - //ShaderBody += "\t\t\tUNITY_GI(gi, " + Constants.CustomLightOutputVarStr + ", data);\n"; - ShaderBody += "\t\t}\n\n"; - } - - if( hasRefraction ) - { - ShaderBody += "\t\tinline float4 Refraction( Input " + Constants.InputVarStr + ", " + outputStruct + " " + Constants.OutputVarStr + ", float indexOfRefraction, float chomaticAberration ) {\n"; - ShaderBody += "\t\t\tfloat3 worldNormal = " + Constants.OutputVarStr + ".Normal;\n"; - ShaderBody += "\t\t\tfloat4 screenPos = " + Constants.InputVarStr + ".screenPos;\n"; - ShaderBody += "\t\t\t#if UNITY_UV_STARTS_AT_TOP\n"; - ShaderBody += "\t\t\t\tfloat scale = -1.0;\n"; - ShaderBody += "\t\t\t#else\n"; - ShaderBody += "\t\t\t\tfloat scale = 1.0;\n"; - ShaderBody += "\t\t\t#endif\n"; - ShaderBody += "\t\t\tfloat halfPosW = screenPos.w * 0.5;\n"; - ShaderBody += "\t\t\tscreenPos.y = ( screenPos.y - halfPosW ) * _ProjectionParams.x * scale + halfPosW;\n"; - ShaderBody += "\t\t\t#if SHADER_API_D3D9 || SHADER_API_D3D11\n"; - ShaderBody += "\t\t\t\tscreenPos.w += 0.00000000001;\n"; - ShaderBody += "\t\t\t#endif\n"; - ShaderBody += "\t\t\tfloat2 projScreenPos = ( screenPos / screenPos.w ).xy;\n"; - ShaderBody += "\t\t\tfloat3 worldViewDir = normalize( UnityWorldSpaceViewDir( " + Constants.InputVarStr + ".worldPos ) );\n"; - ShaderBody += "\t\t\tfloat3 refractionOffset = ( indexOfRefraction - 1.0 ) * mul( UNITY_MATRIX_V, float4( worldNormal, 0.0 ) ) * ( 1.0 - dot( worldNormal, worldViewDir ) );\n"; - ShaderBody += "\t\t\tfloat2 cameraRefraction = float2( refractionOffset.x, refractionOffset.y );\n"; - - string grabpass = "_GrabTexture"; - if( m_grabOrder != 0 ) - grabpass = "RefractionGrab" + m_grabOrder; - ShaderBody += "\t\t\tfloat4 redAlpha = tex2D( " + grabpass + ", ( projScreenPos + cameraRefraction ) );\n"; - ShaderBody += "\t\t\tfloat green = tex2D( " + grabpass + ", ( projScreenPos + ( cameraRefraction * ( 1.0 - chomaticAberration ) ) ) ).g;\n"; - ShaderBody += "\t\t\tfloat blue = tex2D( " + grabpass + ", ( projScreenPos + ( cameraRefraction * ( 1.0 + chomaticAberration ) ) ) ).b;\n"; - ShaderBody += "\t\t\treturn float4( redAlpha.r, green, blue, redAlpha.a );\n"; - ShaderBody += "\t\t}\n\n"; - - ShaderBody += "\t\tvoid RefractionF( Input " + Constants.InputVarStr + ", " + outputStruct + " " + Constants.OutputVarStr + ", inout half4 color )\n"; - ShaderBody += "\t\t{\n"; - ShaderBody += "\t\t\t#ifdef UNITY_PASS_FORWARDBASE\n"; - ShaderBody += refractionInstructions; - if( m_inlineChromaticAberration.Active ) - { - ShaderBody += "\t\t\tcolor.rgb = color.rgb + Refraction( " + Constants.InputVarStr + ", " + Constants.OutputVarStr + ", " + refractionCode + ", " + m_inlineChromaticAberration.GetValueOrProperty(false) + " ) * ( 1 - color.a );\n"; - } - else - { - ShaderBody += "\t\t\tcolor.rgb = color.rgb + Refraction( " + Constants.InputVarStr + ", " + Constants.OutputVarStr + ", " + refractionCode + ", _ChromaticAberration ) * ( 1 - color.a );\n"; - } - ShaderBody += "\t\t\tcolor.a = 1;\n"; - ShaderBody += "\t\t\t#endif\n"; - ShaderBody += "\t\t}\n\n"; - } - - //Add Surface Shader body - ShaderBody += "\t\tvoid surf( Input " + Constants.InputVarStr + " , inout " + outputStruct + " " + Constants.OutputVarStr + " )\n\t\t{\n"; - { - // Pass input information to custom lighting function - if( m_currentLightModel == StandardShaderLightModel.CustomLighting ) - ShaderBody += "\t\t\t" + Constants.OutputVarStr + ".SurfInput = " + Constants.InputVarStr + ";\n"; - - //add local vars - if( m_currentDataCollector.DirtyLocalVariables ) - ShaderBody += m_currentDataCollector.LocalVariables; - - //add nodes ops - if( m_currentDataCollector.DirtyInstructions ) - ShaderBody += m_currentDataCollector.Instructions; - } - ShaderBody += "\t\t}\n"; - } - CloseCGProgram( ref ShaderBody ); - - - //Add custom Shadow Caster - if( m_customShadowCaster ) - { - OpenCGProgram( ref ShaderBody ); - string customLightSurface = hasTranslucency || hasTransmission ? "Custom" : ""; - m_renderingPlatformOpHelper.SetRenderingPlatforms( ref ShaderBody ); - - //Check if Custom Vertex is being used and add tag - if( m_currentDataCollector.DirtyPerVertexData ) - OptionalParameters += "vertex:" + Constants.VertexDataFunc + Constants.OptionalParametersSep; - - if( m_tessOpHelper.EnableTesselation && !usingDebugPort ) - { - m_tessOpHelper.WriteToOptionalParams( ref OptionalParameters ); - } - //if ( hasRefraction ) - // ShaderBody += "\t\t#pragma multi_compile _ALPHAPREMULTIPLY_ON\n"; - - m_additionalSurfaceOptions.WriteToOptionalSurfaceOptions( ref OptionalParameters ); - - AddShaderPragma( ref ShaderBody, "surface surf " + standardCustomLighting + m_currentLightModel.ToString() + customLightSurface + Constants.OptionalParametersSep + OptionalParameters ); - CloseCGProgram( ref ShaderBody ); - - ShaderBody += "\t\tPass\n"; - ShaderBody += "\t\t{\n"; - ShaderBody += "\t\t\tName \"ShadowCaster\"\n"; - ShaderBody += "\t\t\tTags{ \"LightMode\" = \"ShadowCaster\" }\n"; - ShaderBody += "\t\t\tZWrite On\n"; - if( m_alphaToCoverage || m_inlineAlphaToCoverage.Active ) - ShaderBody += "\t\t\tAlphaToMask Off\n"; - ShaderBody += "\t\t\tCGPROGRAM\n"; - ShaderBody += "\t\t\t#pragma vertex vert\n"; - ShaderBody += "\t\t\t#pragma fragment frag\n"; - ShaderBody += "\t\t\t#pragma target " + ShaderModelTypeArr[ m_shaderModelIdx ] + "\n"; - //ShaderBody += "\t\t\t#pragma multi_compile_instancing\n"; - ShaderBody += "\t\t\t#pragma multi_compile_shadowcaster\n"; - ShaderBody += "\t\t\t#pragma multi_compile UNITY_PASS_SHADOWCASTER\n"; - ShaderBody += "\t\t\t#pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2\n"; - ShaderBody += "\t\t\t#include \"HLSLSupport.cginc\"\n"; -#if UNITY_2018_3_OR_NEWER - //Preventing WebGL to throw error Duplicate system value semantic definition: input semantic 'SV_POSITION' and input semantic 'VPOS' - ShaderBody += "\t\t\t#if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN )\n"; -#else - ShaderBody += "\t\t\t#if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN )\n"; -#endif - ShaderBody += "\t\t\t\t#define CAN_SKIP_VPOS\n"; - ShaderBody += "\t\t\t#endif\n"; - ShaderBody += "\t\t\t#include \"UnityCG.cginc\"\n"; - ShaderBody += "\t\t\t#include \"Lighting.cginc\"\n"; - ShaderBody += "\t\t\t#include \"UnityPBSLighting.cginc\"\n"; - - if( !( ( m_alphaToCoverage || m_inlineAlphaToCoverage.Active ) && hasOpacity && hasOpacityMask ) ) - if( hasOpacity ) - ShaderBody += "\t\t\tsampler3D _DitherMaskLOD;\n"; - - //ShaderBody += "\t\t\tsampler3D _DitherMaskLOD;\n"; - - ShaderBody += "\t\t\tstruct v2f\n"; - ShaderBody += "\t\t\t{\n"; - ShaderBody += "\t\t\t\tV2F_SHADOW_CASTER;\n"; - int texcoordIndex = 1; - for( int i = 0; i < m_currentDataCollector.PackSlotsList.Count; i++ ) - { - int size = 4 - m_currentDataCollector.PackSlotsList[ i ]; - if( size > 0 ) - { - ShaderBody += "\t\t\t\tfloat" + size + " customPack" + ( i + 1 ) + " : TEXCOORD" + ( i + 1 ) + ";\n"; - } - texcoordIndex++; - } - - if( !m_currentDataCollector.UsingInternalData ) - ShaderBody += "\t\t\t\tfloat3 worldPos : TEXCOORD" + ( texcoordIndex++ ) + ";\n"; - if( m_currentDataCollector.UsingScreenPos ) - ShaderBody += "\t\t\t\tfloat4 screenPos : TEXCOORD" + ( texcoordIndex++ ) + ";\n"; - if( /*m_currentDataCollector.UsingWorldNormal || m_currentDataCollector.UsingWorldPosition ||*/ m_currentDataCollector.UsingInternalData || m_currentDataCollector.DirtyNormal ) - { - ShaderBody += "\t\t\t\tfloat4 tSpace0 : TEXCOORD" + ( texcoordIndex++ ) + ";\n"; - ShaderBody += "\t\t\t\tfloat4 tSpace1 : TEXCOORD" + ( texcoordIndex++ ) + ";\n"; - ShaderBody += "\t\t\t\tfloat4 tSpace2 : TEXCOORD" + ( texcoordIndex++ ) + ";\n"; - } - else if( !m_currentDataCollector.UsingInternalData && m_currentDataCollector.UsingWorldNormal ) - { - ShaderBody += "\t\t\t\tfloat3 worldNormal : TEXCOORD" + ( texcoordIndex++ ) + ";\n"; - } - - if( m_currentDataCollector.UsingVertexColor ) - ShaderBody += "\t\t\t\thalf4 color : COLOR0;\n"; - ShaderBody += "\t\t\t\tUNITY_VERTEX_INPUT_INSTANCE_ID\n"; - ShaderBody += "\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n"; - ShaderBody += "\t\t\t};\n"; - - ShaderBody += "\t\t\tv2f vert( " + m_currentDataCollector.CustomAppDataName + " v )\n"; - ShaderBody += "\t\t\t{\n"; - ShaderBody += "\t\t\t\tv2f o;\n"; - - ShaderBody += "\t\t\t\tUNITY_SETUP_INSTANCE_ID( v );\n"; - ShaderBody += "\t\t\t\tUNITY_INITIALIZE_OUTPUT( v2f, o );\n"; - ShaderBody += "\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o );\n"; - ShaderBody += "\t\t\t\tUNITY_TRANSFER_INSTANCE_ID( v, o );\n"; - - if( m_currentDataCollector.DirtyPerVertexData || m_currentDataCollector.CustomShadowCoordsList.Count > 0 ) - ShaderBody += "\t\t\t\tInput customInputData;\n"; - if( m_currentDataCollector.DirtyPerVertexData ) - { - ShaderBody += "\t\t\t\tvertexDataFunc( v" + ( m_currentDataCollector.TesselationActive ? "" : ", customInputData" ) + " );\n"; - } - - ShaderBody += "\t\t\t\tfloat3 worldPos = mul( unity_ObjectToWorld, v.vertex ).xyz;\n"; - ShaderBody += "\t\t\t\thalf3 worldNormal = UnityObjectToWorldNormal( v.normal );\n"; - if( m_currentDataCollector.UsingInternalData || m_currentDataCollector.DirtyNormal ) - { - ShaderBody += "\t\t\t\thalf3 worldTangent = UnityObjectToWorldDir( v.tangent.xyz );\n"; - ShaderBody += "\t\t\t\thalf tangentSign = v.tangent.w * unity_WorldTransformParams.w;\n"; - ShaderBody += "\t\t\t\thalf3 worldBinormal = cross( worldNormal, worldTangent ) * tangentSign;\n"; - ShaderBody += "\t\t\t\to.tSpace0 = float4( worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x );\n"; - ShaderBody += "\t\t\t\to.tSpace1 = float4( worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y );\n"; - ShaderBody += "\t\t\t\to.tSpace2 = float4( worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z );\n"; - } - else if( !m_currentDataCollector.UsingInternalData && m_currentDataCollector.UsingWorldNormal ) - { - ShaderBody += "\t\t\t\to.worldNormal = worldNormal;\n"; - } - - for( int i = 0; i < m_currentDataCollector.CustomShadowCoordsList.Count; i++ ) - { - int size = UIUtils.GetChannelsAmount( m_currentDataCollector.CustomShadowCoordsList[ i ].DataType ); - string channels = string.Empty; - for( int j = 0; j < size; j++ ) - { - channels += Convert.ToChar( 120 + m_currentDataCollector.CustomShadowCoordsList[ i ].TextureIndex + j ); - } - channels = channels.Replace( '{', 'w' ); - ShaderBody += "\t\t\t\to.customPack" + ( m_currentDataCollector.CustomShadowCoordsList[ i ].TextureSlot + 1 ) + "." + channels + " = customInputData." + m_currentDataCollector.CustomShadowCoordsList[ i ].CoordName + ";\n"; - - //TODO: TEMPORARY SOLUTION, this needs to go somewhere else, there's no need for these comparisons - if( m_currentDataCollector.CustomShadowCoordsList[ i ].CoordName.StartsWith( "uv_" ) ) - { - ShaderBody += "\t\t\t\to.customPack" + ( m_currentDataCollector.CustomShadowCoordsList[ i ].TextureSlot + 1 ) + "." + channels + " = v.texcoord;\n"; - } - else if( m_currentDataCollector.CustomShadowCoordsList[ i ].CoordName.StartsWith( "uv2_" ) ) - { - ShaderBody += "\t\t\t\to.customPack" + ( m_currentDataCollector.CustomShadowCoordsList[ i ].TextureSlot + 1 ) + "." + channels + " = v.texcoord1;\n"; - } - else if( m_currentDataCollector.CustomShadowCoordsList[ i ].CoordName.StartsWith( "uv3_" ) ) - { - ShaderBody += "\t\t\t\to.customPack" + ( m_currentDataCollector.CustomShadowCoordsList[ i ].TextureSlot + 1 ) + "." + channels + " = v.texcoord2;\n"; - } - else if( m_currentDataCollector.CustomShadowCoordsList[ i ].CoordName.StartsWith( "uv4_" ) ) - { - ShaderBody += "\t\t\t\to.customPack" + ( m_currentDataCollector.CustomShadowCoordsList[ i ].TextureSlot + 1 ) + "." + channels + " = v.texcoord3;\n"; - } - } - - if( !m_currentDataCollector.UsingInternalData ) - ShaderBody += "\t\t\t\to.worldPos = worldPos;\n"; - ShaderBody += "\t\t\t\tTRANSFER_SHADOW_CASTER_NORMALOFFSET( o )\n"; - if( m_currentDataCollector.UsingScreenPos ) - ShaderBody += "\t\t\t\to.screenPos = ComputeScreenPos( o.pos );\n"; - if( m_currentDataCollector.UsingVertexColor ) - ShaderBody += "\t\t\t\to.color = v.color;\n"; - ShaderBody += "\t\t\t\treturn o;\n"; - ShaderBody += "\t\t\t}\n"; - - ShaderBody += "\t\t\thalf4 frag( v2f IN\n"; - ShaderBody += "\t\t\t#if !defined( CAN_SKIP_VPOS )\n"; - ShaderBody += "\t\t\t, UNITY_VPOS_TYPE vpos : VPOS\n"; - ShaderBody += "\t\t\t#endif\n"; - ShaderBody += "\t\t\t) : SV_Target\n"; - ShaderBody += "\t\t\t{\n"; - ShaderBody += "\t\t\t\tUNITY_SETUP_INSTANCE_ID( IN );\n"; - ShaderBody += "\t\t\t\tInput surfIN;\n"; - ShaderBody += "\t\t\t\tUNITY_INITIALIZE_OUTPUT( Input, surfIN );\n"; - - for( int i = 0; i < m_currentDataCollector.CustomShadowCoordsList.Count; i++ ) - { - int size = UIUtils.GetChannelsAmount( m_currentDataCollector.CustomShadowCoordsList[ i ].DataType ); - string channels = string.Empty; - for( int j = 0; j < size; j++ ) - { - channels += Convert.ToChar( 120 + m_currentDataCollector.CustomShadowCoordsList[ i ].TextureIndex + j ); - } - channels = channels.Replace( '{', 'w' ); - ShaderBody += "\t\t\t\tsurfIN." + m_currentDataCollector.CustomShadowCoordsList[ i ].CoordName + " = IN.customPack" + ( m_currentDataCollector.CustomShadowCoordsList[ i ].TextureSlot + 1 ) + "." + channels + ";\n"; - } - - if( m_currentDataCollector.UsingInternalData ) - ShaderBody += "\t\t\t\tfloat3 worldPos = float3( IN.tSpace0.w, IN.tSpace1.w, IN.tSpace2.w );\n"; - else - ShaderBody += "\t\t\t\tfloat3 worldPos = IN.worldPos;\n"; - ShaderBody += "\t\t\t\thalf3 worldViewDir = normalize( UnityWorldSpaceViewDir( worldPos ) );\n"; - - if( m_currentDataCollector.UsingViewDirection && !m_currentDataCollector.DirtyNormal ) - ShaderBody += "\t\t\t\tsurfIN.viewDir = worldViewDir;\n"; - else if( m_currentDataCollector.UsingViewDirection ) - ShaderBody += "\t\t\t\tsurfIN.viewDir = IN.tSpace0.xyz * worldViewDir.x + IN.tSpace1.xyz * worldViewDir.y + IN.tSpace2.xyz * worldViewDir.z;\n"; - - if( m_currentDataCollector.UsingWorldPosition ) - ShaderBody += "\t\t\t\tsurfIN.worldPos = worldPos;\n"; - - if( m_currentDataCollector.UsingWorldNormal && m_currentDataCollector.UsingInternalData ) - ShaderBody += "\t\t\t\tsurfIN.worldNormal = float3( IN.tSpace0.z, IN.tSpace1.z, IN.tSpace2.z );\n"; - else if( !m_currentDataCollector.UsingInternalData && m_currentDataCollector.UsingWorldNormal ) - ShaderBody += "\t\t\t\tsurfIN.worldNormal = IN.worldNormal;\n"; - - if( m_currentDataCollector.UsingWorldReflection ) - ShaderBody += "\t\t\t\tsurfIN.worldRefl = -worldViewDir;\n"; - - if( m_currentDataCollector.UsingInternalData ) - { - ShaderBody += "\t\t\t\tsurfIN.internalSurfaceTtoW0 = IN.tSpace0.xyz;\n"; - ShaderBody += "\t\t\t\tsurfIN.internalSurfaceTtoW1 = IN.tSpace1.xyz;\n"; - ShaderBody += "\t\t\t\tsurfIN.internalSurfaceTtoW2 = IN.tSpace2.xyz;\n"; - } - - if( m_currentDataCollector.UsingScreenPos ) - ShaderBody += "\t\t\t\tsurfIN.screenPos = IN.screenPos;\n"; - - if( m_currentDataCollector.UsingVertexColor ) - ShaderBody += "\t\t\t\tsurfIN.vertexColor = IN.color;\n"; - - ShaderBody += "\t\t\t\t" + outputStruct + " o;\n"; - ShaderBody += "\t\t\t\tUNITY_INITIALIZE_OUTPUT( " + outputStruct + ", o )\n"; - ShaderBody += "\t\t\t\tsurf( surfIN, o );\n"; - if( ( hasOpacity || hasOpacityMask ) && m_currentLightModel == StandardShaderLightModel.CustomLighting ) - { - ShaderBody += "\t\t\t\tUnityGI gi;\n"; - ShaderBody += "\t\t\t\tUNITY_INITIALIZE_OUTPUT( UnityGI, gi );\n"; - ShaderBody += "\t\t\t\to.Alpha = LightingStandardCustomLighting( o, worldViewDir, gi ).a;\n"; - } - ShaderBody += "\t\t\t\t#if defined( CAN_SKIP_VPOS )\n"; - ShaderBody += "\t\t\t\tfloat2 vpos = IN.pos;\n"; - ShaderBody += "\t\t\t\t#endif\n"; - - /*if( ( ( m_alphaToCoverage || m_inlineAlphaToCoverage.Active ) && hasOpacity && m_inputPorts[ m_discardPortId ].IsConnected ) ) - { - - } - else*/ if(!( ( m_alphaToCoverage || m_inlineAlphaToCoverage.Active ) && hasOpacity && m_inputPorts[ m_discardPortId ].IsConnected ) && hasOpacity ) - { - ShaderBody += "\t\t\t\thalf alphaRef = tex3D( _DitherMaskLOD, float3( vpos.xy * 0.25, o.Alpha * 0.9375 ) ).a;\n"; - ShaderBody += "\t\t\t\tclip( alphaRef - 0.01 );\n"; - } - - ShaderBody += "\t\t\t\tSHADOW_CASTER_FRAGMENT( IN )\n"; - ShaderBody += "\t\t\t}\n"; - - ShaderBody += "\t\t\tENDCG\n"; - - ShaderBody += "\t\t}\n"; - } - - } - - if( !string.IsNullOrEmpty( bellowUsePasses ) ) - { - ShaderBody += bellowUsePasses; - } - - CloseSubShaderBody( ref ShaderBody ); - - if( m_dependenciesHelper.HasDependencies ) - { - ShaderBody += m_dependenciesHelper.GenerateDependencies(); - } - - if( m_fallbackHelper.Active ) - { - ShaderBody += m_fallbackHelper.TabbedFallbackShader; - } - else if( m_castShadows || m_receiveShadows ) - { - AddShaderProperty( ref ShaderBody, "Fallback", "Diffuse" ); - } - - if( !string.IsNullOrEmpty( m_customInspectorName ) ) - { - AddShaderProperty( ref ShaderBody, "CustomEditor", m_customInspectorName ); - } - } - CloseShaderBody( ref ShaderBody ); - - if( usingDebugPort ) - { - m_currentLightModel = cachedLightModel; - ContainerGraph.CurrentCanvasMode = cachedAvailability; - } - - // Generate Graph info - ShaderBody += ContainerGraph.ParentWindow.GenerateGraphInfo(); - - //TODO: Remove current SaveDebugShader and uncomment SaveToDisk as soon as pathname is editable - if( !String.IsNullOrEmpty( pathname ) ) - { - IOUtils.StartSaveThread( ShaderBody, ( isFullPath ? pathname : ( IOUtils.dataPath + pathname ) ) ); - } - else - { - IOUtils.StartSaveThread( ShaderBody, Application.dataPath + "/AmplifyShaderEditor/Samples/Shaders/" + m_shaderName + ".shader" ); - } - - // Load new shader into material - - if( CurrentShader == null ) - { - AssetDatabase.Refresh( ImportAssetOptions.ForceUpdate ); - CurrentShader = Shader.Find( ShaderName ); - } - //else - //{ - // // need to always get asset datapath because a user can change and asset location from the project window - // AssetDatabase.ImportAsset( AssetDatabase.GetAssetPath( m_currentShader ) ); - // //ShaderUtil.UpdateShaderAsset( m_currentShader, ShaderBody ); - //} - - if( m_currentShader != null ) - { - m_currentDataCollector.UpdateShaderImporter( ref m_currentShader ); - if( m_currentMaterial != null ) - { - if( m_currentShader != m_currentMaterial.shader ) - m_currentMaterial.shader = m_currentShader; -#if UNITY_5_6_OR_NEWER - if ( isInstancedShader ) - { - m_currentMaterial.enableInstancing = true; - } -#endif - m_currentDataCollector.UpdateMaterialOnPropertyNodes( m_currentMaterial ); - UpdateMaterialEditor(); - // need to always get asset datapath because a user can change and asset location from the project window - //AssetDatabase.ImportAsset( AssetDatabase.GetAssetPath( m_currentMaterial ) ); - } - } - - m_currentDataCollector.Destroy(); - m_currentDataCollector = null; - - return m_currentShader; - } - - public override void UpdateFromShader( Shader newShader ) - { - if( m_currentMaterial != null && m_currentMaterial.shader != newShader ) - { - m_currentMaterial.shader = newShader; - } - CurrentShader = newShader; - } - - public override void Destroy() - { - base.Destroy(); - - if( m_dummyProperty != null ) - { - m_dummyProperty.Destroy(); - GameObject.DestroyImmediate( m_dummyProperty ); - m_dummyProperty = null; - } - - m_drawInstancedHelper = null; - - m_translucencyPort = null; - m_transmissionPort = null; - m_refractionPort = null; - m_normalPort = null; - - m_renderingOptionsOpHelper.Destroy(); - m_renderingOptionsOpHelper = null; - - m_additionalIncludes.Destroy(); - m_additionalIncludes = null; - - m_additionalPragmas.Destroy(); - m_additionalPragmas = null; - - m_additionalDefines.Destroy(); - m_additionalDefines = null; - - m_additionalSurfaceOptions.Destroy(); - m_additionalSurfaceOptions = null; - - m_additionalDirectives.Destroy(); - m_additionalDirectives = null; - - m_customTagsHelper.Destroy(); - m_customTagsHelper = null; - - m_dependenciesHelper.Destroy(); - m_dependenciesHelper = null; - - m_renderingPlatformOpHelper = null; - m_inspectorDefaultStyle = null; - m_inspectorFoldoutStyle = null; - - m_zBufferHelper = null; - m_stencilBufferHelper = null; - m_blendOpsHelper = null; - m_tessOpHelper.Destroy(); - m_tessOpHelper = null; - m_outlineHelper.Destroy(); - m_outlineHelper = null; - m_colorMaskHelper.Destroy(); - m_colorMaskHelper = null; - m_billboardOpHelper = null; - - m_fallbackHelper.Destroy(); - GameObject.DestroyImmediate( m_fallbackHelper ); - m_fallbackHelper = null; - - m_usePass.Destroy(); - GameObject.DestroyImmediate( m_usePass ); - m_usePass = null; - } - - public override int VersionConvertInputPortId( int portId ) - { - int newPort = portId; - - //added translucency input after occlusion - if( UIUtils.CurrentShaderVersion() <= 2404 ) - { - switch( m_currentLightModel ) - { - case StandardShaderLightModel.Standard: - case StandardShaderLightModel.StandardSpecular: - if( portId >= 6 ) - newPort += 1; - break; - case StandardShaderLightModel.CustomLighting: - case StandardShaderLightModel.Unlit: - case StandardShaderLightModel.Lambert: - case StandardShaderLightModel.BlinnPhong: - if( portId >= 5 ) - newPort += 1; - break; - } - } - - portId = newPort; - - //added transmission input after occlusion - if( UIUtils.CurrentShaderVersion() < 2407 ) - { - switch( m_currentLightModel ) - { - case StandardShaderLightModel.Standard: - case StandardShaderLightModel.StandardSpecular: - if( portId >= 6 ) - newPort += 1; - break; - case StandardShaderLightModel.CustomLighting: - case StandardShaderLightModel.Unlit: - case StandardShaderLightModel.Lambert: - case StandardShaderLightModel.BlinnPhong: - if( portId >= 5 ) - newPort += 1; - break; - } - } - - portId = newPort; - - //added tessellation ports - if( UIUtils.CurrentShaderVersion() < 3002 ) - { - switch( m_currentLightModel ) - { - case StandardShaderLightModel.Standard: - case StandardShaderLightModel.StandardSpecular: - if( portId >= 13 ) - newPort += 1; - break; - case StandardShaderLightModel.CustomLighting: - case StandardShaderLightModel.Unlit: - case StandardShaderLightModel.Lambert: - case StandardShaderLightModel.BlinnPhong: - if( portId >= 10 ) - newPort += 1; - break; - } - } - - portId = newPort; - - //added refraction after translucency - if( UIUtils.CurrentShaderVersion() < 3204 ) - { - switch( m_currentLightModel ) - { - case StandardShaderLightModel.Standard: - case StandardShaderLightModel.StandardSpecular: - if( portId >= 8 ) - newPort += 1; - break; - case StandardShaderLightModel.CustomLighting: - case StandardShaderLightModel.Unlit: - case StandardShaderLightModel.Lambert: - case StandardShaderLightModel.BlinnPhong: - if( portId >= 7 ) - newPort += 1; - break; - } - } - - portId = newPort; - - //removed custom lighting port - //if ( UIUtils.CurrentShaderVersion() < 10003 ) //runs everytime because this system is only used after 5000 version - { - switch( m_currentLightModel ) - { - case StandardShaderLightModel.Standard: - case StandardShaderLightModel.StandardSpecular: - if( portId >= 13 ) - newPort -= 1; - break; - case StandardShaderLightModel.CustomLighting: - case StandardShaderLightModel.Unlit: - case StandardShaderLightModel.Lambert: - case StandardShaderLightModel.BlinnPhong: - if( portId >= 12 ) - newPort -= 1; - break; - } - } - - portId = newPort; - - //if( UIUtils.CurrentShaderVersion() < 13802 ) //runs everytime because this system is only used after 5000 version - { - switch( m_currentLightModel ) - { - case StandardShaderLightModel.Standard: - case StandardShaderLightModel.StandardSpecular: - if( portId >= 11 ) - newPort += 1; - break; - case StandardShaderLightModel.CustomLighting: - case StandardShaderLightModel.Unlit: - case StandardShaderLightModel.Lambert: - case StandardShaderLightModel.BlinnPhong: - if( portId >= 10 ) - newPort += 1; - break; - } - } - - portId = newPort; - return newPort; - } - - public override void ReadFromString( ref string[] nodeParams ) - { - try - { - base.ReadFromString( ref nodeParams ); - m_currentLightModel = (StandardShaderLightModel)Enum.Parse( typeof( StandardShaderLightModel ), GetCurrentParam( ref nodeParams ) ); - - if( CurrentMasterNodeCategory == AvailableShaderTypes.SurfaceShader && m_currentLightModel == StandardShaderLightModel.CustomLighting ) - { - ContainerGraph.CurrentCanvasMode = NodeAvailability.CustomLighting; - ContainerGraph.ParentWindow.CurrentNodeAvailability = NodeAvailability.CustomLighting; - } - else if( CurrentMasterNodeCategory == AvailableShaderTypes.SurfaceShader ) - { - ContainerGraph.CurrentCanvasMode = NodeAvailability.SurfaceShader; - ContainerGraph.ParentWindow.CurrentNodeAvailability = NodeAvailability.SurfaceShader; - } - //if ( _shaderCategory.Length > 0 ) - // _shaderCategory = UIUtils.RemoveInvalidCharacters( _shaderCategory ); - ShaderName = GetCurrentParam( ref nodeParams ); - if( m_shaderName.Length > 0 ) - ShaderName = UIUtils.RemoveShaderInvalidCharacters( ShaderName ); - - m_renderingOptionsOpHelper.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - - m_cullMode = (CullMode)Enum.Parse( typeof( CullMode ), GetCurrentParam( ref nodeParams ) ); - m_zBufferHelper.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - - string alphaMode = GetCurrentParam( ref nodeParams ); - - if( UIUtils.CurrentShaderVersion() < 4003 ) - { - if( alphaMode.Equals( "Fade" ) ) - { - alphaMode = "Transparent"; - } - else if( alphaMode.Equals( "Transparent" ) ) - { - alphaMode = "Premultiply"; - } - } - - m_alphaMode = (AlphaMode)Enum.Parse( typeof( AlphaMode ), alphaMode ); - m_opacityMaskClipValue = Convert.ToSingle( GetCurrentParam( ref nodeParams ) ); - m_keepAlpha = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) ); - m_keepAlpha = true; - m_castShadows = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) ); - m_queueOrder = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - if( UIUtils.CurrentShaderVersion() > 11 ) - { - m_customBlendMode = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) ); - m_renderType = (RenderType)Enum.Parse( typeof( RenderType ), GetCurrentParam( ref nodeParams ) ); - if( UIUtils.CurrentShaderVersion() > 14305 ) - { - m_customRenderType = GetCurrentParam( ref nodeParams ); - } - m_renderQueue = (RenderQueue)Enum.Parse( typeof( RenderQueue ), GetCurrentParam( ref nodeParams ) ); - } - if( UIUtils.CurrentShaderVersion() > 2402 ) - { - m_renderPath = (RenderPath)Enum.Parse( typeof( RenderPath ), GetCurrentParam( ref nodeParams ) ); - } - if( UIUtils.CurrentShaderVersion() > 2405 ) - { - m_renderingPlatformOpHelper.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 2500 ) - { - m_colorMaskHelper.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 2501 ) - { - m_stencilBufferHelper.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 2504 ) - { - m_tessOpHelper.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 2505 ) - { - m_receiveShadows = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) ); - } - - if( UIUtils.CurrentShaderVersion() > 3202 ) - { - m_blendOpsHelper.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 3203 ) - { - m_grabOrder = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - } - - if( UIUtils.CurrentShaderVersion() > 5003 ) - { - m_outlineHelper.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 5110 ) - { - m_billboardOpHelper.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 6101 ) - { - m_vertexMode = (VertexMode)Enum.Parse( typeof( VertexMode ), GetCurrentParam( ref nodeParams ) ); - } - - if( UIUtils.CurrentShaderVersion() > 6102 ) - { - ShaderLOD = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - m_fallbackHelper.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 7102 ) - { - m_maskClipOrderIndex = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - m_translucencyOrderIndex = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - m_refractionOrderIndex = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - m_tessellationOrderIndex = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - } - - if( UIUtils.CurrentShaderVersion() > 10010 && UIUtils.CurrentShaderVersion() < 15312 ) - { - m_additionalIncludes.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 11006 ) - { - m_customTagsHelper.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 13102 && UIUtils.CurrentShaderVersion() < 15312 ) - { - m_additionalPragmas.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 13205 ) - { - m_alphaToCoverage = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) ); - } - - if( UIUtils.CurrentShaderVersion() > 13903 ) - { - m_dependenciesHelper.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 14005 && UIUtils.CurrentShaderVersion() < 15312 ) - { - m_additionalDefines.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 14501 ) - { - m_inlineCullMode.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 14502 ) - { - m_specColorOrderIndex = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - } - - if( UIUtils.CurrentShaderVersion() > 15204 ) - { - m_inlineOpacityMaskClipValue.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 15311 ) - { - m_additionalDirectives.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - m_additionalSurfaceOptions.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - else - { - m_additionalDirectives.AddItems( AdditionalLineType.Define, m_additionalDefines.DefineList ); - m_additionalDirectives.AddItems( AdditionalLineType.Include, m_additionalIncludes.IncludeList ); - m_additionalDirectives.AddItems( AdditionalLineType.Pragma, m_additionalPragmas.PragmaList ); - } - - if( UIUtils.CurrentShaderVersion() > 15402 ) - { - m_usePass.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 16203 ) - { - m_drawInstancedHelper.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - } - - if( UIUtils.CurrentShaderVersion() > 16204 ) - m_inlineChromaticAberration.ReadFromString( ref m_currentReadParamIdx, ref nodeParams , false ); - - if( UIUtils.CurrentShaderVersion() > 16207 ) - m_inlineAlphaToCoverage.ReadFromString( ref m_currentReadParamIdx, ref nodeParams ); - - m_lightModelChanged = true; - m_lastLightModel = m_currentLightModel; - DeleteAllInputConnections( true ); - AddMasterPorts(); - UpdateFromBlendMode(); - m_customBlendMode = TestCustomBlendMode(); - - ContainerGraph.CurrentPrecision = m_currentPrecisionType; - } - catch( Exception e ) - { - Debug.Log( e ); - } - } - - public override void RefreshExternalReferences() - { - base.RefreshExternalReferences(); - - // change port connection from emission to the new custom lighting port - if( m_currentLightModel == StandardShaderLightModel.CustomLighting && m_inputPorts[ m_emissionPortId ].IsConnected && UIUtils.CurrentShaderVersion() < 13802 ) - { - OutputPort port = m_inputPorts[ m_emissionPortId ].GetOutputConnection( 0 ); - m_inputPorts[ m_emissionPortId ].FullDeleteConnections(); - UIUtils.SetConnection( m_inputPorts[ m_customLightingPortId ].NodeId, m_inputPorts[ m_customLightingPortId ].PortId, port.NodeId, port.PortId ); - } - } - - public override void WriteToString( ref string nodeInfo, ref string connectionsInfo ) - { - base.WriteToString( ref nodeInfo, ref connectionsInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_currentLightModel ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_shaderName ); - m_renderingOptionsOpHelper.WriteToString( ref nodeInfo ); - - IOUtils.AddFieldValueToString( ref nodeInfo, m_cullMode ); - m_zBufferHelper.WriteToString( ref nodeInfo ); - - IOUtils.AddFieldValueToString( ref nodeInfo, m_alphaMode ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_opacityMaskClipValue ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_keepAlpha ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_castShadows ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_queueOrder ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_customBlendMode ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_renderType ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_customRenderType ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_renderQueue ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_renderPath ); - m_renderingPlatformOpHelper.WriteToString( ref nodeInfo ); - m_colorMaskHelper.WriteToString( ref nodeInfo ); - m_stencilBufferHelper.WriteToString( ref nodeInfo ); - m_tessOpHelper.WriteToString( ref nodeInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_receiveShadows ); - m_blendOpsHelper.WriteToString( ref nodeInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_grabOrder ); - m_outlineHelper.WriteToString( ref nodeInfo ); - m_billboardOpHelper.WriteToString( ref nodeInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_vertexMode ); - IOUtils.AddFieldValueToString( ref nodeInfo, ShaderLOD ); - m_fallbackHelper.WriteToString( ref nodeInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, ( m_maskClipReorder != null ) ? m_maskClipReorder.OrderIndex : -1 ); - IOUtils.AddFieldValueToString( ref nodeInfo, ( m_translucencyReorder != null ) ? m_translucencyReorder.OrderIndex : -1 ); - IOUtils.AddFieldValueToString( ref nodeInfo, ( m_refractionReorder != null ) ? m_refractionReorder.OrderIndex : -1 ); - IOUtils.AddFieldValueToString( ref nodeInfo, ( m_tessellationReorder != null ) ? m_tessellationReorder.OrderIndex : -1 ); - //m_additionalIncludes.WriteToString( ref nodeInfo ); - m_customTagsHelper.WriteToString( ref nodeInfo ); - //m_additionalPragmas.WriteToString( ref nodeInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_alphaToCoverage ); - m_dependenciesHelper.WriteToString( ref nodeInfo ); - //m_additionalDefines.WriteToString( ref nodeInfo ); - m_inlineCullMode.WriteToString( ref nodeInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, ( m_specColorReorder != null ) ? m_specColorReorder.OrderIndex : -1 ); - m_inlineOpacityMaskClipValue.WriteToString( ref nodeInfo ); - m_additionalDirectives.WriteToString( ref nodeInfo ); - m_additionalSurfaceOptions.WriteToString( ref nodeInfo ); - m_usePass.WriteToString( ref nodeInfo ); - m_drawInstancedHelper.WriteToString( ref nodeInfo ); - m_inlineChromaticAberration.WriteToString( ref nodeInfo ); - m_inlineAlphaToCoverage.WriteToString( ref nodeInfo ); - } - - private bool TestCustomBlendMode() - { - switch( m_alphaMode ) - { - case AlphaMode.Opaque: - { - if( m_renderType == RenderType.Opaque && m_renderQueue == RenderQueue.Geometry ) - return false; - } - break; - case AlphaMode.Masked: - { - if( m_renderType == RenderType.TransparentCutout && m_renderQueue == RenderQueue.AlphaTest ) - return false; - } - break; - case AlphaMode.Transparent: - case AlphaMode.Premultiply: - { - if( m_renderType == RenderType.Transparent && m_renderQueue == RenderQueue.Transparent ) - return false; - } - break; - case AlphaMode.Translucent: - { - if( m_renderType == RenderType.Opaque && m_renderQueue == RenderQueue.Transparent ) - return false; - } - break; - } - return true; - } - - private void UpdateFromBlendMode() - { - m_checkChanges = true; - bool lockRefractionPort = false; - if( m_currentLightModel == StandardShaderLightModel.Unlit || m_currentLightModel == StandardShaderLightModel.CustomLighting ) - { - lockRefractionPort = true; - } - - switch( m_alphaMode ) - { - case AlphaMode.Opaque: - { - m_renderType = RenderType.Opaque; - m_renderQueue = RenderQueue.Geometry; - m_keepAlpha = true; - m_refractionPort.Locked = true; - m_inputPorts[ m_opacityPortId ].Locked = true; - m_inputPorts[ m_discardPortId ].Locked = true; - } - break; - case AlphaMode.Masked: - { - m_renderType = RenderType.TransparentCutout; - m_renderQueue = RenderQueue.AlphaTest; - m_keepAlpha = true; - m_refractionPort.Locked = true; - m_inputPorts[ m_opacityPortId ].Locked = true; - m_inputPorts[ m_discardPortId ].Locked = false; - } - break; - case AlphaMode.Transparent: - case AlphaMode.Premultiply: - { - m_renderType = RenderType.Transparent; - m_renderQueue = RenderQueue.Transparent; - m_refractionPort.Locked = false || lockRefractionPort; - m_inputPorts[ m_opacityPortId ].Locked = false; - m_inputPorts[ m_discardPortId ].Locked = true; - } - break; - case AlphaMode.Translucent: - { - m_renderType = RenderType.Opaque; - m_renderQueue = RenderQueue.Transparent; - m_refractionPort.Locked = false || lockRefractionPort; - m_inputPorts[ m_opacityPortId ].Locked = false; - m_inputPorts[ m_discardPortId ].Locked = true; - } - break; - case AlphaMode.Custom: - { - m_refractionPort.Locked = false || lockRefractionPort; - m_inputPorts[ m_opacityPortId ].Locked = false; - m_inputPorts[ m_discardPortId ].Locked = false; - } - break; - } - - m_blendOpsHelper.SetBlendOpsFromBlendMode( m_alphaMode, ( m_alphaMode == AlphaMode.Custom || m_alphaMode == AlphaMode.Opaque ) ); - } - - public bool CastShadows { get { return m_castShadows; } } - public StandardShaderLightModel CurrentLightingModel { get { return m_currentLightModel; } } - public CullMode CurrentCullMode { get { return m_cullMode; } } - //public AdditionalIncludesHelper AdditionalIncludes { get { return m_additionalIncludes; } set { m_additionalIncludes = value; } } - //public AdditionalPragmasHelper AdditionalPragmas { get { return m_additionalPragmas; } set { m_additionalPragmas = value; } } - //public AdditionalDefinesHelper AdditionalDefines { get { return m_additionalDefines; } set { m_additionalDefines = value; } } - public TemplateAdditionalDirectivesHelper AdditionalDirectives { get { return m_additionalDirectives; } } - public OutlineOpHelper OutlineHelper { get { return m_outlineHelper; } } - public float OpacityMaskClipValue { get { return m_opacityMaskClipValue; } } - public InlineProperty InlineOpacityMaskClipValue { get { return m_inlineOpacityMaskClipValue; } set { m_inlineOpacityMaskClipValue = value; } } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/StandardSurface.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/StandardSurface.cs.meta deleted file mode 100644 index 0515f8ca..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/StandardSurface.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 59e61f9559385a94a87d4d37dbd556f0 -timeCreated: 1481126956 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/StencilBufferOpHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/StencilBufferOpHelper.cs deleted file mode 100644 index b613f0f1..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/StencilBufferOpHelper.cs +++ /dev/null @@ -1,304 +0,0 @@ -using System; -using UnityEngine; -using UnityEditor; -using System.Collections.Generic; - -namespace AmplifyShaderEditor -{ - - [Serializable] - public class StencilBufferOpHelper - { - public static readonly string[] StencilComparisonValues = - { - "<Default>", - "Greater" , - "GEqual" , - "Less" , - "LEqual" , - "Equal" , - "NotEqual" , - "Always" , - "Never" - }; - - public static readonly Dictionary<string,int> StencilComparisonValuesDict = new Dictionary<string, int>() - { - {"Greater" , 1}, - {"GEqual" , 2}, - {"Less" , 3}, - {"LEqual" , 4}, - {"Equal" , 5}, - {"NotEqual", 6}, - {"Always" , 7}, - {"Never" , 8}, - }; - - public static readonly string[] StencilComparisonLabels = - { - "<Default>", - "Greater" , - "Greater or Equal" , - "Less" , - "Less or Equal" , - "Equal" , - "Not Equal" , - "Always" , - "Never" - }; - - - public static readonly string[] StencilOpsValues = - { - "<Default>", - "Keep", - "Zero", - "Replace", - "IncrSat", - "DecrSat", - "Invert", - "IncrWrap", - "DecrWrap" - }; - - public static readonly Dictionary<string,int> StencilOpsValuesDict = new Dictionary<string, int>() - { - {"Keep", 1}, - {"Zero", 2}, - {"Replace", 3}, - {"IncrSat", 4}, - {"DecrSat", 5}, - {"Invert", 6}, - {"IncrWrap",7}, - {"DecrWrap",8}, - }; - - public static readonly string[] StencilOpsLabels = - { - "<Default>", - "Keep", - "Zero", - "Replace", - "IncrSat", - "DecrSat", - "Invert", - "IncrWrap", - "DecrWrap" - }; - - - private const string FoldoutLabelStr = " Stencil Buffer"; - private GUIContent ReferenceValueContent = new GUIContent( "Reference", "The value to be compared against (if Comparison is anything else than always) and/or the value to be written to the buffer (if either Pass, Fail or ZFail is set to replace)" ); - private GUIContent ReadMaskContent = new GUIContent( "Read Mask", "An 8 bit mask as an 0-255 integer, used when comparing the reference value with the contents of the buffer (referenceValue & readMask) comparisonFunction (stencilBufferValue & readMask)" ); - private GUIContent WriteMaskContent = new GUIContent( "Write Mask", "An 8 bit mask as an 0-255 integer, used when writing to the buffer" ); - private const string ComparisonStr = "Comparison"; - private const string PassStr = "Pass"; - private const string FailStr = "Fail"; - private const string ZFailStr = "ZFail"; - - private const string ComparisonFrontStr = "Comp. Front"; - private const string PassFrontStr = "Pass Front"; - private const string FailFrontStr = "Fail Front"; - private const string ZFailFrontStr = "ZFail Front"; - - private const string ComparisonBackStr = "Comp. Back"; - private const string PassBackStr = "Pass Back"; - private const string FailBackStr = "Fail Back"; - private const string ZFailBackStr = "ZFail Back"; - - private const int ReadMaskDefaultValue = 255; - private const int WriteMaskDefaultValue = 255; - private const int ComparisonDefaultValue = 0; - private const int PassStencilOpDefaultValue = 0; - private const int FailStencilOpDefaultValue = 0; - private const int ZFailStencilOpDefaultValue = 0; - - [SerializeField] - private bool m_active; - - [SerializeField] - private InlineProperty m_refValue = new InlineProperty(); - [SerializeField] - private InlineProperty m_readMask = new InlineProperty( ReadMaskDefaultValue ); - [SerializeField] - private InlineProperty m_writeMask = new InlineProperty( WriteMaskDefaultValue ); - - //Comparison Function - [SerializeField] - private InlineProperty m_comparisonFunctionIdx = new InlineProperty( ComparisonDefaultValue ); - [SerializeField] - private InlineProperty m_comparisonFunctionBackIdx = new InlineProperty( ComparisonDefaultValue ); - - //Pass Stencil Op - [SerializeField] - private InlineProperty m_passStencilOpIdx = new InlineProperty( PassStencilOpDefaultValue ); - [SerializeField] - private InlineProperty m_passStencilOpBackIdx = new InlineProperty( PassStencilOpDefaultValue ); - - //Fail Stencil Op - [SerializeField] - private InlineProperty m_failStencilOpIdx = new InlineProperty( FailStencilOpDefaultValue ); - [SerializeField] - private InlineProperty m_failStencilOpBackIdx = new InlineProperty( FailStencilOpDefaultValue ); - - //ZFail Stencil Op - [SerializeField] - private InlineProperty m_zFailStencilOpIdx = new InlineProperty( ZFailStencilOpDefaultValue ); - [SerializeField] - private InlineProperty m_zFailStencilOpBackIdx = new InlineProperty( ZFailStencilOpDefaultValue ); - - public string CreateStencilOp( UndoParentNode owner ) - { - string result = "\t\tStencil\n\t\t{\n"; - result += string.Format( "\t\t\tRef {0}\n", m_refValue.GetValueOrProperty() ); - if( m_readMask.Active || m_readMask.IntValue != ReadMaskDefaultValue ) - { - result += string.Format( "\t\t\tReadMask {0}\n", m_readMask.GetValueOrProperty() ); - } - - if( m_writeMask.Active || m_writeMask.IntValue != WriteMaskDefaultValue ) - { - result += string.Format( "\t\t\tWriteMask {0}\n", m_writeMask.GetValueOrProperty() ); - } - - if( ( owner as StandardSurfaceOutputNode ).CurrentCullMode == CullMode.Off ) - { - if( m_comparisonFunctionIdx.IntValue != ComparisonDefaultValue || m_comparisonFunctionIdx.Active ) - result += string.Format( "\t\t\tCompFront {0}\n", m_comparisonFunctionIdx.GetValueOrProperty( StencilComparisonValues[ m_comparisonFunctionIdx.IntValue ] ) ); - if( m_passStencilOpIdx.IntValue != PassStencilOpDefaultValue || m_passStencilOpIdx.Active ) - result += string.Format( "\t\t\tPassFront {0}\n", m_passStencilOpIdx.GetValueOrProperty( StencilOpsValues[ m_passStencilOpIdx.IntValue ] ) ); - if( m_failStencilOpIdx.IntValue != FailStencilOpDefaultValue || m_failStencilOpIdx.Active ) - result += string.Format( "\t\t\tFailFront {0}\n", m_failStencilOpIdx.GetValueOrProperty( StencilOpsValues[ m_failStencilOpIdx.IntValue ] ) ); - if( m_zFailStencilOpIdx.IntValue != ZFailStencilOpDefaultValue || m_zFailStencilOpIdx.Active ) - result += string.Format( "\t\t\tZFailFront {0}\n", m_zFailStencilOpIdx.GetValueOrProperty( StencilOpsValues[ m_zFailStencilOpIdx.IntValue ] ) ); - - if( m_comparisonFunctionBackIdx.IntValue != ComparisonDefaultValue || m_comparisonFunctionBackIdx.Active ) - result += string.Format( "\t\t\tCompBack {0}\n", m_comparisonFunctionBackIdx.GetValueOrProperty( StencilComparisonValues[ m_comparisonFunctionBackIdx.IntValue ] ) ); - if( m_passStencilOpBackIdx.IntValue != PassStencilOpDefaultValue || m_passStencilOpBackIdx.Active ) - result += string.Format( "\t\t\tPassBack {0}\n", m_passStencilOpBackIdx.GetValueOrProperty( StencilOpsValues[ m_passStencilOpBackIdx.IntValue ] ) ); - if( m_failStencilOpBackIdx.IntValue != FailStencilOpDefaultValue || m_failStencilOpBackIdx.Active ) - result += string.Format( "\t\t\tFailBack {0}\n", m_failStencilOpBackIdx.GetValueOrProperty( StencilOpsValues[ m_failStencilOpBackIdx.IntValue ] ) ); - if( m_zFailStencilOpBackIdx.IntValue != ZFailStencilOpDefaultValue || m_zFailStencilOpBackIdx.Active ) - result += string.Format( "\t\t\tZFailBack {0}\n", m_zFailStencilOpBackIdx.GetValueOrProperty( StencilOpsValues[ m_zFailStencilOpBackIdx.IntValue ] ) ); - } - else - { - if( m_comparisonFunctionIdx.IntValue != ComparisonDefaultValue || m_comparisonFunctionIdx.Active ) - result += string.Format( "\t\t\tComp {0}\n", m_comparisonFunctionIdx.GetValueOrProperty( StencilComparisonValues[ m_comparisonFunctionIdx.IntValue ] ) ); - if( m_passStencilOpIdx.IntValue != PassStencilOpDefaultValue || m_passStencilOpIdx.Active ) - result += string.Format( "\t\t\tPass {0}\n", m_passStencilOpIdx.GetValueOrProperty( StencilOpsValues[ m_passStencilOpIdx.IntValue ] ) ); - if( m_failStencilOpIdx.IntValue != FailStencilOpDefaultValue || m_failStencilOpIdx.Active ) - result += string.Format( "\t\t\tFail {0}\n", m_failStencilOpIdx.GetValueOrProperty( StencilOpsValues[ m_failStencilOpIdx.IntValue ] ) ); - if( m_zFailStencilOpIdx.IntValue != ZFailStencilOpDefaultValue || m_zFailStencilOpIdx.Active ) - result += string.Format( "\t\t\tZFail {0}\n", m_zFailStencilOpIdx.GetValueOrProperty( StencilOpsValues[ m_zFailStencilOpIdx.IntValue ] ) ); - } - - - result += "\t\t}\n"; - return result; - } - - public void Draw( UndoParentNode owner ) - { - bool foldoutValue = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedStencilOptions; - NodeUtils.DrawPropertyGroup( owner, ref foldoutValue, ref m_active, FoldoutLabelStr, () => - { - float cache = EditorGUIUtility.labelWidth; - float cache2 = EditorGUIUtility.fieldWidth; - EditorGUIUtility.labelWidth = 110; - EditorGUIUtility.fieldWidth = 30; - m_refValue.IntSlider( ref owner, ReferenceValueContent, 0, 255 ); - m_readMask.IntSlider( ref owner, ReadMaskContent, 0, 255 ); - m_writeMask.IntSlider( ref owner, WriteMaskContent, 0, 255 ); - //EditorGUIUtility.labelWidth = cache; - EditorGUIUtility.fieldWidth = cache2; - if( ( owner as StandardSurfaceOutputNode ).CurrentCullMode == CullMode.Off ) - { - m_comparisonFunctionIdx.EnumTypePopup( ref owner, ComparisonFrontStr, StencilComparisonLabels ); - m_passStencilOpIdx.EnumTypePopup( ref owner, PassFrontStr, StencilOpsLabels ); - m_failStencilOpIdx.EnumTypePopup( ref owner, FailFrontStr, StencilOpsLabels ); - m_zFailStencilOpIdx.EnumTypePopup( ref owner, ZFailFrontStr, StencilOpsLabels ); - EditorGUILayout.Separator(); - m_comparisonFunctionBackIdx.EnumTypePopup( ref owner, ComparisonBackStr, StencilComparisonLabels ); - m_passStencilOpBackIdx.EnumTypePopup( ref owner, PassBackStr, StencilOpsLabels ); - m_failStencilOpBackIdx.EnumTypePopup( ref owner, FailBackStr, StencilOpsLabels ); - m_zFailStencilOpBackIdx.EnumTypePopup( ref owner, ZFailBackStr, StencilOpsLabels ); - } - else - { - m_comparisonFunctionIdx.EnumTypePopup( ref owner, ComparisonStr, StencilComparisonLabels ); - m_passStencilOpIdx.EnumTypePopup( ref owner, PassFrontStr, StencilOpsLabels ); - m_failStencilOpIdx.EnumTypePopup( ref owner, FailFrontStr, StencilOpsLabels ); - m_zFailStencilOpIdx.EnumTypePopup( ref owner, ZFailFrontStr, StencilOpsLabels ); - } - EditorGUIUtility.labelWidth = cache; - } ); - owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedStencilOptions = foldoutValue; - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - m_active = Convert.ToBoolean( nodeParams[ index++ ] ); - if( UIUtils.CurrentShaderVersion() > 14501 ) - { - m_refValue.ReadFromString( ref index, ref nodeParams ); - m_readMask.ReadFromString( ref index, ref nodeParams ); - m_writeMask.ReadFromString( ref index, ref nodeParams ); - m_comparisonFunctionIdx.ReadFromString( ref index, ref nodeParams ); - m_passStencilOpIdx.ReadFromString( ref index, ref nodeParams ); - m_failStencilOpIdx.ReadFromString( ref index, ref nodeParams ); - m_zFailStencilOpIdx.ReadFromString( ref index, ref nodeParams ); - } - else - { - m_refValue.IntValue = Convert.ToInt32( nodeParams[ index++ ] ); - m_readMask.IntValue = Convert.ToInt32( nodeParams[ index++ ] ); - m_writeMask.IntValue = Convert.ToInt32( nodeParams[ index++ ] ); - m_comparisonFunctionIdx.IntValue = Convert.ToInt32( nodeParams[ index++ ] ); - m_passStencilOpIdx.IntValue = Convert.ToInt32( nodeParams[ index++ ] ); - m_failStencilOpIdx.IntValue = Convert.ToInt32( nodeParams[ index++ ] ); - m_zFailStencilOpIdx.IntValue = Convert.ToInt32( nodeParams[ index++ ] ); - } - - if( UIUtils.CurrentShaderVersion() > 13203 ) - { - if( UIUtils.CurrentShaderVersion() > 14501 ) - { - m_comparisonFunctionBackIdx.ReadFromString( ref index, ref nodeParams ); - m_passStencilOpBackIdx.ReadFromString( ref index, ref nodeParams ); - m_failStencilOpBackIdx.ReadFromString( ref index, ref nodeParams ); - m_zFailStencilOpBackIdx.ReadFromString( ref index, ref nodeParams ); - } - else - { - m_comparisonFunctionBackIdx.IntValue = Convert.ToInt32( nodeParams[ index++ ] ); - m_passStencilOpBackIdx.IntValue = Convert.ToInt32( nodeParams[ index++ ] ); - m_failStencilOpBackIdx.IntValue = Convert.ToInt32( nodeParams[ index++ ] ); - m_zFailStencilOpBackIdx.IntValue = Convert.ToInt32( nodeParams[ index++ ] ); - } - } - } - - public void WriteToString( ref string nodeInfo ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_active ); - m_refValue.WriteToString( ref nodeInfo ); - m_readMask.WriteToString( ref nodeInfo ); - m_writeMask.WriteToString( ref nodeInfo ); - m_comparisonFunctionIdx.WriteToString( ref nodeInfo ); - m_passStencilOpIdx.WriteToString( ref nodeInfo ); - m_failStencilOpIdx.WriteToString( ref nodeInfo ); - m_zFailStencilOpIdx.WriteToString( ref nodeInfo ); - m_comparisonFunctionBackIdx.WriteToString( ref nodeInfo ); - m_passStencilOpBackIdx.WriteToString( ref nodeInfo ); - m_failStencilOpBackIdx.WriteToString( ref nodeInfo ); - m_zFailStencilOpBackIdx.WriteToString( ref nodeInfo ); - } - - public bool Active - { - get { return m_active; } - set { m_active = value; } - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/StencilBufferOpHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/StencilBufferOpHelper.cs.meta deleted file mode 100644 index 6dc55180..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/StencilBufferOpHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 0111d524dc809f14aa95e4e1ab93d37b -timeCreated: 1481126953 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/TerrainDrawInstancedHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/TerrainDrawInstancedHelper.cs deleted file mode 100644 index 751317d1..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/TerrainDrawInstancedHelper.cs +++ /dev/null @@ -1,374 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using UnityEngine; -using UnityEditor; - -using System; -using System.Collections.Generic; - -namespace AmplifyShaderEditor -{ - [Serializable] - public class TerrainDrawInstancedHelper - { -#if UNITY_2018_1_OR_NEWER - private readonly string[] InstancedPragmas = - { - "multi_compile_instancing", - "instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap forwardadd" - }; - - private readonly string[] InstancedGlobalsSRP = - { - "#ifdef UNITY_INSTANCING_ENABLED//ASE Terrain Instancing", - "\tTEXTURE2D(_TerrainHeightmapTexture);//ASE Terrain Instancing", - "\tTEXTURE2D( _TerrainNormalmapTexture);//ASE Terrain Instancing", - "#endif//ASE Terrain Instancing", - "UNITY_INSTANCING_BUFFER_START( Terrain )//ASE Terrain Instancing", - "\tUNITY_DEFINE_INSTANCED_PROP( float4, _TerrainPatchInstanceData )//ASE Terrain Instancing", - "UNITY_INSTANCING_BUFFER_END( Terrain)//ASE Terrain Instancing", - "CBUFFER_START( UnityTerrain)//ASE Terrain Instancing", - "\t#ifdef UNITY_INSTANCING_ENABLED//ASE Terrain Instancing", - "\t\tfloat4 _TerrainHeightmapRecipSize;//ASE Terrain Instancing", - "\t\tfloat4 _TerrainHeightmapScale;//ASE Terrain Instancing", - "\t#endif//ASE Terrain Instancing", - "CBUFFER_END//ASE Terrain Instancing" - }; - - private readonly string[] InstancedGlobalsDefault = - { - "#ifdef UNITY_INSTANCING_ENABLED//ASE Terrain Instancing", - "\tsampler2D _TerrainHeightmapTexture;//ASE Terrain Instancing", - "\tsampler2D _TerrainNormalmapTexture;//ASE Terrain Instancing", - "#endif//ASE Terrain Instancing", - "UNITY_INSTANCING_BUFFER_START( Terrain )//ASE Terrain Instancing", - "\tUNITY_DEFINE_INSTANCED_PROP( float4, _TerrainPatchInstanceData )//ASE Terrain Instancing", - "UNITY_INSTANCING_BUFFER_END( Terrain)//ASE Terrain Instancing", - "CBUFFER_START( UnityTerrain)//ASE Terrain Instancing", - "\t#ifdef UNITY_INSTANCING_ENABLED//ASE Terrain Instancing", - "\t\tfloat4 _TerrainHeightmapRecipSize;//ASE Terrain Instancing", - "\t\tfloat4 _TerrainHeightmapScale;//ASE Terrain Instancing", - "\t#endif//ASE Terrain Instancing", - "CBUFFER_END//ASE Terrain Instancing" - }; - - - private readonly string ApplyMeshModificationInstruction = "{0} = ApplyMeshModification({0});"; - - private readonly string[] ApplyMeshModificationFunctionSRP = - { - /*0 - struct name 1 - var name*/"{0} ApplyMeshModification( {0} {1} )\n", - "{\n", - "#ifdef UNITY_INSTANCING_ENABLED\n", - /* 0 vertex position*/"\tfloat2 patchVertex = {0}.xy;\n", - "\tfloat4 instanceData = UNITY_ACCESS_INSTANCED_PROP( Terrain, _TerrainPatchInstanceData );\n", - "\tfloat2 sampleCoords = ( patchVertex.xy + instanceData.xy ) * instanceData.z;\n", - "\tfloat height = UnpackHeightmap( _TerrainHeightmapTexture.Load( int3( sampleCoords, 0 ) ) );\n", - /*0 - vertex position*/"\t{0}.xz = sampleCoords* _TerrainHeightmapScale.xz;\n", - /*0 - vertex position*/"\t{0}.y = height* _TerrainHeightmapScale.y;\n", - "\t#ifdef ENABLE_TERRAIN_PERPIXEL_NORMAL\n", - /* 0 - vertex normal*/"\t\t{0} = float3(0, 1, 0);\n", - "\t#else\n", - /* 0 - vertex normal*/"\t\t{0} = _TerrainNormalmapTexture.Load(int3(sampleCoords, 0)).rgb* 2 - 1;\n", - "\t#endif\n", - "#ifdef ENABLE_TERRAIN_PERPIXEL_NORMAL\n", - /* 0 - tex coord*/"\t{0}.xy = sampleCoords;\n", - "#else\n", - /* 0 - tex coord*/"\t{0}.xy = sampleCoords* _TerrainHeightmapRecipSize.zw;\n", - "#endif\n", - "#endif\n", - /* 0 - var name*/"\treturn {0};\n", - "}\n" - }; - //{ - // /*0 - struct name 1 - var name*/"{0} ApplyMeshModification( {0} {1} )\n", - // "{\n", - // "#ifdef UNITY_INSTANCING_ENABLED\n", - // /* 0 vertex position*/"\tfloat2 patchVertex = {0}.xy;\n", - // "\t\tfloat4 instanceData = UNITY_ACCESS_INSTANCED_PROP( Terrain, _TerrainPatchInstanceData );\n", - // "\t\tfloat2 sampleCoords = ( patchVertex.xy + instanceData.xy ) * instanceData.z;\n", - // "\t\tfloat height = UnpackHeightmap( _TerrainHeightmapTexture.Load( int3( sampleCoords, 0 ) ) );\n", - // /*0 - vertex position*/"\t\t{0}.xz = sampleCoords* _TerrainHeightmapScale.xz;\n", - // /*0 - vertex position*/"\t\t{0}.y = height* _TerrainHeightmapScale.y;\n", - // "# ifdef ATTRIBUTES_NEED_NORMAL\n", - // /* 0 - vertex normal*/"\t\t{0} = _TerrainNormalmapTexture.Load(int3(sampleCoords, 0)).rgb* 2 - 1;\n", - // "\t#endif\n", - // "\t#if defined(VARYINGS_NEED_TEXCOORD0) || defined(VARYINGS_DS_NEED_TEXCOORD0)\n", - // "\t\t#ifdef ENABLE_TERRAIN_PERPIXEL_NORMAL\n", - // /* 0 - tex coord*/"\t\t\t{0} = sampleCoords;\n", - // "\t\t#else\n", - // /* 0 - tex coord*/"\t\t\t{0}.xy = sampleCoords* _TerrainHeightmapRecipSize.zw;\n", - // "\t\t#endif\n", - // "\t#endif\n", - // "#endif\n", - // "#ifdef ATTRIBUTES_NEED_TANGENT\n", - // /* 0 - tangent 1 - normal*/"\t\t{0}.xyz = cross( {1}, float3(0, 0, 1));\n", - // /*0 - tangent*/"\t{0}.w = -1;\n", - // "#endif\n", - // /* 0 - var name*/"\treturn {0};\n", - // "}\n" - //}; - - - - private readonly string[] ApplyMeshModificationFunctionDefaultTemplate = - { - /* 0 vertex struct */"{0} ApplyMeshModification( {0} {1} )", - "{\n", - "#ifdef UNITY_INSTANCING_ENABLED\n", - /*0 - vertex pos*/"\tfloat2 patchVertex = {0}.xy;\n", - "\tfloat4 instanceData = UNITY_ACCESS_INSTANCED_PROP( Terrain, _TerrainPatchInstanceData );\n", - "\tfloat2 sampleCoords = ( patchVertex.xy + instanceData.xy ) * instanceData.z;\n", - /* 0 - tex coords*/"\t{0} = float4( sampleCoords.xy * _TerrainHeightmapRecipSize.z, 0, 0 );\n", - /* 0 - tex coords*/"\tfloat height = UnpackHeightmap( tex2Dlod( _TerrainHeightmapTexture, {0} ) );\n", - /* 0 - vertex pos*/"\t{0}.xz = sampleCoords * _TerrainHeightmapScale.xz;\n", - /* 0 - vertex pos*/"\t{0}.y = height * _TerrainHeightmapScale.y;\n", - /* 0 - normal 1 - tex coord*/"\t{0} = tex2Dlod( _TerrainNormalmapTexture, {1} ).rgb * 2 - 1;\n", - "#endif\n", - /* var name*/"return {0};\n", - "}\n" - }; - - private readonly string ApplyMeshModificationInstructionStandard = "ApplyMeshModification({0});"; - private readonly string[] ApplyMeshModificationFunctionStandard = - { - "void ApplyMeshModification( inout {0} v )", - "#if defined(UNITY_INSTANCING_ENABLED) && !defined(SHADER_API_D3D11_9X)", - "\tfloat2 patchVertex = v.vertex.xy;", - "\tfloat4 instanceData = UNITY_ACCESS_INSTANCED_PROP(Terrain, _TerrainPatchInstanceData);", - "\t", - "\tfloat4 uvscale = instanceData.z * _TerrainHeightmapRecipSize;", - "\tfloat4 uvoffset = instanceData.xyxy * uvscale;", - "\tuvoffset.xy += 0.5f * _TerrainHeightmapRecipSize.xy;", - "\tfloat2 sampleCoords = (patchVertex.xy * uvscale.xy + uvoffset.xy);", - "\t", - "\tfloat hm = UnpackHeightmap(tex2Dlod(_TerrainHeightmapTexture, float4(sampleCoords, 0, 0)));", - "\tv.vertex.xz = (patchVertex.xy + instanceData.xy) * _TerrainHeightmapScale.xz * instanceData.z;", - "\tv.vertex.y = hm * _TerrainHeightmapScale.y;", - "\tv.vertex.w = 1.0f;", - "\t", - "\tv.texcoord.xy = (patchVertex.xy * uvscale.zw + uvoffset.zw);", - "\tv.texcoord3 = v.texcoord2 = v.texcoord1 = v.texcoord;", - "\t", - "\t#ifdef TERRAIN_INSTANCED_PERPIXEL_NORMAL", - "\t\tv.normal = float3(0, 1, 0);", - "\t\t//data.tc.zw = sampleCoords;", - "\t#else", - "\t\tfloat3 nor = tex2Dlod(_TerrainNormalmapTexture, float4(sampleCoords, 0, 0)).xyz;", - "\t\tv.normal = 2.0f * nor - 1.0f;", - "\t#endif", - "#endif", - }; - private readonly string[] AdditionalUsePasses = - { - "Hidden/Nature/Terrain/Utilities/PICKING", - "Hidden/Nature/Terrain/Utilities/SELECTION" - }; - private readonly string DrawInstancedLabel = "Instanced Terrain"; -#endif - [SerializeField] - private bool m_enable = false; - - public void Draw( UndoParentNode owner ) - { -#if UNITY_2018_1_OR_NEWER - m_enable = owner.EditorGUILayoutToggle( DrawInstancedLabel, m_enable ); -#endif - } - - public void UpdateDataCollectorForTemplates( ref MasterNodeDataCollector dataCollector, ref List<string> vertexInstructions ) - { -#if UNITY_2018_1_OR_NEWER - if( m_enable ) - { - for( int i = 0; i < AdditionalUsePasses.Length; i++ ) - { - dataCollector.AddUsePass( AdditionalUsePasses[ i ], false ); - } - - for( int i = 0; i < InstancedPragmas.Length; i++ ) - { - dataCollector.AddToPragmas( -1, InstancedPragmas[ i ] ); - } - - if( dataCollector.IsSRP ) - { - - TemplateFunctionData functionData = dataCollector.TemplateDataCollectorInstance.CurrentTemplateData.VertexFunctionData; - string uvCoord = dataCollector.TemplateDataCollectorInstance.GetUV( 0, MasterNodePortCategory.Vertex ); - string vertexNormal = dataCollector.TemplateDataCollectorInstance.GetVertexNormal( PrecisionType.Float, false, MasterNodePortCategory.Vertex ); - //string vertexTangent = dataCollector.TemplateDataCollectorInstance.GetVertexTangent( WirePortDataType.FLOAT4, PrecisionType.Float, false, MasterNodePortCategory.Vertex ); - string vertexPos = dataCollector.TemplateDataCollectorInstance.GetVertexPosition( WirePortDataType.OBJECT, PrecisionType.Float, false, MasterNodePortCategory.Vertex ); - - string functionHeader = string.Format( ApplyMeshModificationFunctionSRP[ 0 ], functionData.InVarType, functionData.InVarName ); - - //string functionBody = functionHeader + - // ApplyMeshModificationFunctionSRP[ 1 ] + - // ApplyMeshModificationFunctionSRP[ 2 ] + - // string.Format( ApplyMeshModificationFunctionSRP[ 3 ], vertexPos ) + - // ApplyMeshModificationFunctionSRP[ 4 ] + - // ApplyMeshModificationFunctionSRP[ 5 ] + - // ApplyMeshModificationFunctionSRP[ 6 ] + - // string.Format( ApplyMeshModificationFunctionSRP[ 7 ], vertexPos ) + - // string.Format( ApplyMeshModificationFunctionSRP[ 8 ], vertexPos ) + - // ApplyMeshModificationFunctionSRP[ 9 ] + - // string.Format( ApplyMeshModificationFunctionSRP[ 10 ], vertexNormal ) + - // ApplyMeshModificationFunctionSRP[ 11 ] + - // ApplyMeshModificationFunctionSRP[ 12 ] + - // ApplyMeshModificationFunctionSRP[ 13 ] + - // string.Format( ApplyMeshModificationFunctionSRP[ 14 ], uvCoord ) + - // ApplyMeshModificationFunctionSRP[ 15 ] + - // string.Format( ApplyMeshModificationFunctionSRP[ 16 ], uvCoord ) + - // ApplyMeshModificationFunctionSRP[ 17 ] + - // ApplyMeshModificationFunctionSRP[ 18 ] + - // ApplyMeshModificationFunctionSRP[ 19 ] + - // ApplyMeshModificationFunctionSRP[ 20 ] + - // string.Format( ApplyMeshModificationFunctionSRP[ 21 ], vertexTangent, vertexNormal ) + - // string.Format( ApplyMeshModificationFunctionSRP[ 22 ], vertexTangent ) + - // ApplyMeshModificationFunctionSRP[ 23 ] + - // string.Format( ApplyMeshModificationFunctionSRP[ 24 ], functionData.InVarName ) + - // ApplyMeshModificationFunctionSRP[ 25 ]; - string functionBody = functionHeader + - ApplyMeshModificationFunctionSRP[ 1 ] + - ApplyMeshModificationFunctionSRP[ 2 ] + - string.Format( ApplyMeshModificationFunctionSRP[ 3 ], vertexPos ) + - ApplyMeshModificationFunctionSRP[ 4 ] + - ApplyMeshModificationFunctionSRP[ 5 ] + - ApplyMeshModificationFunctionSRP[ 6 ] + - string.Format( ApplyMeshModificationFunctionSRP[ 7 ], vertexPos ) + - string.Format( ApplyMeshModificationFunctionSRP[ 8 ], vertexPos ) + - ApplyMeshModificationFunctionSRP[ 9 ] + - string.Format( ApplyMeshModificationFunctionSRP[ 10 ], vertexNormal ) + - ApplyMeshModificationFunctionSRP[ 11 ] + - string.Format( ApplyMeshModificationFunctionSRP[ 12 ], vertexNormal ) + - ApplyMeshModificationFunctionSRP[ 13 ] + - ApplyMeshModificationFunctionSRP[ 14 ] + - string.Format( ApplyMeshModificationFunctionSRP[ 15 ], uvCoord ) + - ApplyMeshModificationFunctionSRP[ 16 ] + - string.Format( ApplyMeshModificationFunctionSRP[ 17 ], uvCoord ) + - ApplyMeshModificationFunctionSRP[ 18 ] + - ApplyMeshModificationFunctionSRP[ 19 ] + - string.Format( ApplyMeshModificationFunctionSRP[ 20 ], functionData.InVarName ) + - ApplyMeshModificationFunctionSRP[ 21 ]; - dataCollector.AddFunction( functionHeader, functionBody ); - - for( int i = 0; i < InstancedGlobalsSRP.Length; i++ ) - { - dataCollector.AddToUniforms( -1, InstancedGlobalsSRP[ i ] ); - } - - - string vertexVarName = dataCollector.TemplateDataCollectorInstance.CurrentTemplateData.VertexFunctionData.InVarName; - vertexInstructions.Insert( 0, string.Format( ApplyMeshModificationInstruction, vertexVarName ) ); - } - else - { - TemplateFunctionData functionData = dataCollector.TemplateDataCollectorInstance.CurrentTemplateData.VertexFunctionData; - - string uvCoord = dataCollector.TemplateDataCollectorInstance.GetUV( 0, MasterNodePortCategory.Vertex ); - string vertexNormal = dataCollector.TemplateDataCollectorInstance.GetVertexNormal( PrecisionType.Float, false, MasterNodePortCategory.Vertex ); - string vertexPos = dataCollector.TemplateDataCollectorInstance.GetVertexPosition( WirePortDataType.OBJECT, PrecisionType.Float, false, MasterNodePortCategory.Vertex ); - - string functionHeader = string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 0 ], functionData.InVarType, functionData.InVarName ); - string functionBody = functionHeader + - ApplyMeshModificationFunctionDefaultTemplate[ 1 ] + - ApplyMeshModificationFunctionDefaultTemplate[ 2 ] + - string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 3 ], vertexPos ) + - ApplyMeshModificationFunctionDefaultTemplate[ 4 ] + - ApplyMeshModificationFunctionDefaultTemplate[ 5 ] + - string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 6 ], uvCoord ) + - string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 7 ], uvCoord ) + - string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 8 ], vertexPos ) + - string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 9 ], vertexPos ) + - string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 10 ], vertexNormal, uvCoord ) + - ApplyMeshModificationFunctionDefaultTemplate[ 11 ] + - string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 12 ], functionData.InVarName ) + - ApplyMeshModificationFunctionDefaultTemplate[ 13 ]; - - - dataCollector.AddFunction( functionHeader, functionBody ); - for( int i = 0; i < InstancedGlobalsDefault.Length; i++ ) - { - dataCollector.AddToUniforms( -1, InstancedGlobalsDefault[ i ] ); - } - - - string vertexVarName = dataCollector.TemplateDataCollectorInstance.CurrentTemplateData.VertexFunctionData.InVarName; - vertexInstructions.Insert( 0, string.Format( ApplyMeshModificationInstruction, vertexVarName ) ); - - } - } -#endif - } - - public void UpdateDataCollectorForStandard( ref MasterNodeDataCollector dataCollector ) - { -#if UNITY_2018_1_OR_NEWER - if( m_enable ) - { - for( int i = 0; i < AdditionalUsePasses.Length; i++ ) - { - dataCollector.AddUsePass( AdditionalUsePasses[ i ], false ); - } - - for( int i = 0; i < InstancedPragmas.Length; i++ ) - { - dataCollector.AddToPragmas( -1, InstancedPragmas[ i ] ); - } - string functionBody = string.Empty; - - string functionHeader = string.Format( ApplyMeshModificationFunctionStandard[ 0 ], dataCollector.SurfaceVertexStructure ); - IOUtils.AddFunctionHeader( ref functionBody, functionHeader ); - for( int i = 1; i < ApplyMeshModificationFunctionStandard.Length; i++ ) - { - IOUtils.AddFunctionLine( ref functionBody, ApplyMeshModificationFunctionStandard[ i ] ); - } - IOUtils.CloseFunctionBody( ref functionBody ); - - //string inputName = "input"; - //string uvCoord = "input.texcoord"; - //string vertexNormal = "input.normal"; - //string vertexPos = "input.vertex"; - - //string functionHeader = string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 0 ], dataCollector.SurfaceVertexStructure, inputName ); - //IOUtils.AddFunctionHeader( ref functionBody, functionHeader ); - //IOUtils.AddFunctionLine( ref functionBody, ApplyMeshModificationFunctionDefaultTemplate[ 1 ] ); - //IOUtils.AddFunctionLine( ref functionBody,ApplyMeshModificationFunctionDefaultTemplate[ 2 ] ); - //IOUtils.AddFunctionLine( ref functionBody,string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 3 ], vertexPos ) ); - //IOUtils.AddFunctionLine( ref functionBody,ApplyMeshModificationFunctionDefaultTemplate[ 4 ] ); - //IOUtils.AddFunctionLine( ref functionBody,ApplyMeshModificationFunctionDefaultTemplate[ 5 ] ); - //IOUtils.AddFunctionLine( ref functionBody,string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 6 ], uvCoord ) ); - //IOUtils.AddFunctionLine( ref functionBody,string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 7 ], uvCoord ) ); - //IOUtils.AddFunctionLine( ref functionBody,string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 8 ], vertexPos ) ); - //IOUtils.AddFunctionLine( ref functionBody,string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 9 ], vertexPos ) ); - //IOUtils.AddFunctionLine( ref functionBody,string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 10 ], vertexNormal, uvCoord ) ); - //IOUtils.AddFunctionLine( ref functionBody,ApplyMeshModificationFunctionDefaultTemplate[ 11 ] ); - //IOUtils.AddFunctionLine( ref functionBody,string.Format( ApplyMeshModificationFunctionDefaultTemplate[ 12 ], inputName ) ); - //IOUtils.AddFunctionLine( ref functionBody, ApplyMeshModificationFunctionDefaultTemplate[ 13 ] ); - //IOUtils.CloseFunctionBody( ref functionBody ); - - dataCollector.AddFunction( functionHeader, functionBody ); - for( int i = 0; i < InstancedGlobalsDefault.Length; i++ ) - { - dataCollector.AddToUniforms( -1, InstancedGlobalsDefault[ i ] ); - } - - dataCollector.AddVertexInstruction( string.Format( ApplyMeshModificationInstructionStandard, "v" ) ); - } -#endif - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - m_enable = Convert.ToBoolean( nodeParams[ index++ ] ); - } - - public void WriteToString( ref string nodeInfo ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_enable ); - } - - public bool Enabled { get { return m_enable; } } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/TerrainDrawInstancedHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/TerrainDrawInstancedHelper.cs.meta deleted file mode 100644 index 9580ad09..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/TerrainDrawInstancedHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 935c69709205e1c4dbd54da410518cc6 -timeCreated: 1548263010 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/TessellationOpHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/TessellationOpHelper.cs deleted file mode 100644 index 38d38f09..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/TessellationOpHelper.cs +++ /dev/null @@ -1,642 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; - -namespace AmplifyShaderEditor -{ - [Serializable] - public sealed class TessellationOpHelper - { - public const string TessellationPortStr = "Tessellation"; - - - public const string TessSurfParam = "tessellate:tessFunction"; - public const string TessInclude = "Tessellation.cginc"; - //public const string CustomAppData = "\t\tstruct appdata\n" + - // "\t\t{\n" + - // "\t\t\tfloat4 vertex : POSITION;\n" + - // "\t\t\tfloat4 tangent : TANGENT;\n" + - // "\t\t\tfloat3 normal : NORMAL;\n" + - // "\t\t\tfloat4 texcoord : TEXCOORD0;\n" + - // "\t\t\tfloat4 texcoord1 : TEXCOORD1;\n" + - // "\t\t\tfloat4 texcoord2 : TEXCOORD2;\n" + - // "\t\t\tfloat4 texcoord3 : TEXCOORD3;\n" + - // "\t\t\tfixed4 color : COLOR;\n" + - // "\t\t\tUNITY_VERTEX_INPUT_INSTANCE_ID\n" + - // "\t\t};\n\n"; - - - - private const string TessUniformName = "_TessValue"; - private const string TessMinUniformName = "_TessMin"; - private const string TessMaxUniformName = "_TessMax"; - - //private GUIContent EnableTessContent = new GUIContent( "Tessellation", "Activates the use of tessellation which subdivides polygons to increase geometry detail using a set of rules\nDefault: OFF" ); - private GUIContent TessFactorContent = new GUIContent( "Tess", "Tessellation factor\nDefault: 4" ); - private GUIContent TessMinDistanceContent = new GUIContent( "Min", "Minimum tessellation distance\nDefault: 10" ); - private GUIContent TessMaxDistanceContent = new GUIContent( "Max", "Maximum tessellation distance\nDefault: 25" ); - - - private readonly int[] TesselationTypeValues = { 0, 1, 2, 3 }; - private readonly string[] TesselationTypeLabels = { "Distance-based", "Fixed", "Edge Length", "Edge Length Cull" }; - private readonly string TesselationTypeStr = "Type"; - - private const string TessProperty = "_TessValue( \"Max Tessellation\", Range( 1, 32 ) ) = {0}"; - private const string TessMinProperty = "_TessMin( \"Tess Min Distance\", Float ) = {0}"; - private const string TessMaxProperty = "_TessMax( \"Tess Max Distance\", Float ) = {0}"; - - private const string TessFunctionOpen = "\t\tfloat4 tessFunction( appdata_full v0, appdata_full v1, appdata_full v2 )\n\t\t{\n"; - private const string TessFunctionClose = "\t\t}\n"; - - // Custom function - private const string CustomFunctionBody = "\t\t\treturn {0};\n"; - - // Distance based function - private const string DistBasedTessFunctionBody = "\t\t\treturn UnityDistanceBasedTess( v0.vertex, v1.vertex, v2.vertex, _TessMin, _TessMax, _TessValue );\n"; - - // Fixed amount function - private const string FixedAmountTessFunctionOpen = "\t\tfloat4 tessFunction( )\n\t\t{\n"; - private const string FixedAmountTessFunctionBody = "\t\t\treturn _TessValue;\n"; - - // Edge Length - private GUIContent EdgeLengthContent = new GUIContent( "Edge Length", "Tessellation levels ccomputed based on triangle edge length on the screen\nDefault: 4" ); - private const string EdgeLengthTessProperty = "_EdgeLength ( \"Edge length\", Range( 2, 50 ) ) = {0}"; - private const string EdgeLengthTessUniformName = "_EdgeLength"; - - private const string EdgeLengthTessFunctionBody = "\t\t\treturn UnityEdgeLengthBasedTess (v0.vertex, v1.vertex, v2.vertex, _EdgeLength);\n"; - private const string EdgeLengthTessCullFunctionBody = "\t\t\treturn UnityEdgeLengthBasedTessCull (v0.vertex, v1.vertex, v2.vertex, _EdgeLength , _TessMaxDisp );\n"; - - - private const string EdgeLengthTessMaxDispProperty = "_TessMaxDisp( \"Max Displacement\", Float ) = {0}"; - private const string EdgeLengthTessMaxDispUniformName = "_TessMaxDisp"; - private GUIContent EdgeLengthTessMaxDisplacementContent = new GUIContent( "Max Disp.", "Max Displacement" ); - - // Phong - private GUIContent PhongEnableContent = new GUIContent( "Phong", "Modifies positions of the subdivided faces so that the resulting surface follows the mesh normals a bit\nDefault: OFF" ); - private GUIContent PhongStrengthContent = new GUIContent( "Strength", "Strength\nDefault: 0.5" ); - public const string PhongStrengthParam = "tessphong:_TessPhongStrength"; - - private const string PhongStrengthProperty = "_TessPhongStrength( \"Phong Tess Strength\", Range( 0, 1 ) ) = {0}"; - private const string PhongStrengthUniformName = "_TessPhongStrength"; - - [SerializeField] - private bool m_enabled = false; - - //private bool m_expanded = false; - - [SerializeField] - private int m_tessType = 2; - - [SerializeField] - private float m_tessMinDistance = 10f; - - [SerializeField] - private float m_tessMaxDistance = 25f; - - [SerializeField] - private float m_tessFactor = 15f; - - [SerializeField] - private float m_phongStrength = 0.5f; - - [SerializeField] - private bool m_phongEnabled = false; - - [SerializeField] - private string[] m_customData = { string.Empty, string.Empty, string.Empty }; - - [SerializeField] - private bool m_hasCustomFunction = false; - - [SerializeField] - private string m_customFunction = String.Empty; - - [SerializeField] - private string m_additionalData = string.Empty; - - [SerializeField] - private StandardSurfaceOutputNode m_parentSurface; - - private Dictionary<string, bool> m_additionalDataDict = new Dictionary<string, bool>(); - - private int m_masterNodeIndexPort = 0; - private int m_vertexOffsetIndexPort = 0; - //private int m_orderIndex = 1000; - - public void Draw( UndoParentNode owner, GUIStyle toolbarstyle, Material mat, bool connectedInput ) - { - Color cachedColor = GUI.color; - GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, 0.5f ); - EditorGUILayout.BeginHorizontal( toolbarstyle ); - GUI.color = cachedColor; - EditorGUI.BeginChangeCheck(); - m_parentSurface.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedTesselation = GUILayout.Toggle( m_parentSurface.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedTesselation, " Tessellation", UIUtils.MenuItemToggleStyle, GUILayout.ExpandWidth( true ) ); - if ( EditorGUI.EndChangeCheck() ) - { - EditorPrefs.SetBool( "ExpandedTesselation", m_parentSurface.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedTesselation ); - } - - EditorGUI.BeginChangeCheck(); - m_enabled = owner.EditorGUILayoutToggle( string.Empty, m_enabled, UIUtils.MenuItemEnableStyle, GUILayout.Width( 16 ) ); - if ( EditorGUI.EndChangeCheck() ) - { - if ( m_enabled ) - UpdateToMaterial( mat, !connectedInput ); - - UIUtils.RequestSave(); - } - - EditorGUILayout.EndHorizontal(); - - m_enabled = m_enabled || connectedInput; - - if ( m_parentSurface.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedTesselation ) - { - cachedColor = GUI.color; - GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, ( EditorGUIUtility.isProSkin ? 0.5f : 0.25f ) ); - EditorGUILayout.BeginVertical( UIUtils.MenuItemBackgroundStyle ); - GUI.color = cachedColor; - - EditorGUILayout.Separator(); - EditorGUI.BeginDisabledGroup( !m_enabled ); - - EditorGUI.indentLevel += 1; - - m_phongEnabled = owner.EditorGUILayoutToggle( PhongEnableContent, m_phongEnabled ); - if ( m_phongEnabled ) - { - EditorGUI.indentLevel += 1; - EditorGUI.BeginChangeCheck(); - m_phongStrength = owner.EditorGUILayoutSlider( PhongStrengthContent, m_phongStrength, 0.0f, 1.0f ); - if ( EditorGUI.EndChangeCheck() && mat != null ) - { - if ( mat.HasProperty( PhongStrengthUniformName ) ) - mat.SetFloat( PhongStrengthUniformName, m_phongStrength ); - } - - EditorGUI.indentLevel -= 1; - } - - bool guiEnabled = GUI.enabled; - GUI.enabled = !connectedInput && m_enabled; - - m_tessType = owner.EditorGUILayoutIntPopup( TesselationTypeStr, m_tessType, TesselationTypeLabels, TesselationTypeValues ); - - switch ( m_tessType ) - { - case 0: - { - EditorGUI.BeginChangeCheck(); - m_tessFactor = owner.EditorGUILayoutSlider( TessFactorContent, m_tessFactor, 1, 32 ); - if ( EditorGUI.EndChangeCheck() && mat != null ) - { - if ( mat.HasProperty( TessUniformName ) ) - mat.SetFloat( TessUniformName, m_tessFactor ); - } - - EditorGUI.BeginChangeCheck(); - m_tessMinDistance = owner.EditorGUILayoutFloatField( TessMinDistanceContent, m_tessMinDistance ); - if ( EditorGUI.EndChangeCheck() && mat != null ) - { - if ( mat.HasProperty( TessMinUniformName ) ) - mat.SetFloat( TessMinUniformName, m_tessMinDistance ); - } - - EditorGUI.BeginChangeCheck(); - m_tessMaxDistance = owner.EditorGUILayoutFloatField( TessMaxDistanceContent, m_tessMaxDistance ); - if ( EditorGUI.EndChangeCheck() && mat != null ) - { - if ( mat.HasProperty( TessMaxUniformName ) ) - mat.SetFloat( TessMaxUniformName, m_tessMaxDistance ); - } - } - break; - case 1: - { - EditorGUI.BeginChangeCheck(); - m_tessFactor = owner.EditorGUILayoutSlider( TessFactorContent, m_tessFactor, 1, 32 ); - if ( EditorGUI.EndChangeCheck() && mat != null ) - { - if ( mat.HasProperty( TessUniformName ) ) - mat.SetFloat( TessUniformName, m_tessFactor ); - } - } - break; - case 2: - { - EditorGUI.BeginChangeCheck(); - m_tessFactor = owner.EditorGUILayoutSlider( EdgeLengthContent, m_tessFactor, 2, 50 ); - if ( EditorGUI.EndChangeCheck() && mat != null ) - { - if ( mat.HasProperty( EdgeLengthTessUniformName ) ) - mat.SetFloat( EdgeLengthTessUniformName, m_tessFactor ); - } - } - break; - case 3: - { - EditorGUI.BeginChangeCheck(); - m_tessFactor = owner.EditorGUILayoutSlider( EdgeLengthContent, m_tessFactor, 2, 50 ); - if ( EditorGUI.EndChangeCheck() && mat != null ) - { - if ( mat.HasProperty( EdgeLengthTessUniformName ) ) - mat.SetFloat( EdgeLengthTessUniformName, m_tessFactor ); - } - - EditorGUI.BeginChangeCheck(); - m_tessMaxDistance = owner.EditorGUILayoutFloatField( EdgeLengthTessMaxDisplacementContent, m_tessMaxDistance ); - if ( EditorGUI.EndChangeCheck() && mat != null ) - { - if ( mat.HasProperty( TessMinUniformName ) ) - mat.SetFloat( TessMinUniformName, m_tessMaxDistance ); - } - } - break; - } - GUI.enabled = guiEnabled; - EditorGUI.indentLevel -= 1; - EditorGUI.EndDisabledGroup(); - EditorGUILayout.Separator(); - EditorGUILayout.EndVertical(); - } - } - - public void UpdateToMaterial( Material mat, bool updateInternals ) - { - if ( mat == null ) - return; - - if ( m_phongEnabled ) - { - if ( mat.HasProperty( PhongStrengthUniformName ) ) - mat.SetFloat( PhongStrengthUniformName, m_phongStrength ); - } - - if ( updateInternals ) - { - switch ( m_tessType ) - { - case 0: - { - if ( mat.HasProperty( TessUniformName ) ) - mat.SetFloat( TessUniformName, m_tessFactor ); - - if ( mat.HasProperty( TessMinUniformName ) ) - mat.SetFloat( TessMinUniformName, m_tessMinDistance ); - - if ( mat.HasProperty( TessMaxUniformName ) ) - mat.SetFloat( TessMaxUniformName, m_tessMaxDistance ); - } - break; - case 1: - { - if ( mat.HasProperty( TessUniformName ) ) - mat.SetFloat( TessUniformName, m_tessFactor ); - } - break; - case 2: - { - - if ( mat.HasProperty( EdgeLengthTessUniformName ) ) - mat.SetFloat( EdgeLengthTessUniformName, m_tessFactor ); - } - break; - case 3: - { - if ( mat.HasProperty( EdgeLengthTessUniformName ) ) - mat.SetFloat( EdgeLengthTessUniformName, m_tessFactor ); - - if ( mat.HasProperty( TessMinUniformName ) ) - mat.SetFloat( TessMinUniformName, m_tessMaxDistance ); - } - break; - } - } - } - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - m_enabled = Convert.ToBoolean( nodeParams[ index++ ] ); - m_tessType = Convert.ToInt32( nodeParams[ index++ ] ); - m_tessFactor = Convert.ToSingle( nodeParams[ index++ ] ); - m_tessMinDistance = Convert.ToSingle( nodeParams[ index++ ] ); - m_tessMaxDistance = Convert.ToSingle( nodeParams[ index++ ] ); - if ( UIUtils.CurrentShaderVersion() > 3001 ) - { - m_phongEnabled = Convert.ToBoolean( nodeParams[ index++ ] ); - m_phongStrength = Convert.ToSingle( nodeParams[ index++ ] ); - } - } - - public void WriteToString( ref string nodeInfo ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_enabled ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_tessType ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_tessFactor ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_tessMinDistance ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_tessMaxDistance ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_phongEnabled ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_phongStrength ); - } - - public string Uniforms() - { - string uniforms = string.Empty; - switch( m_tessType ) - { - case 0: - { - if( !m_hasCustomFunction ) - { - - //Tess - uniforms += "\t\tuniform " + UIUtils.PrecisionWirePortToCgType( PrecisionType.Float, WirePortDataType.FLOAT ) + " " + TessUniformName + ";\n"; - - //Min - uniforms += "\t\tuniform " + UIUtils.PrecisionWirePortToCgType( PrecisionType.Float, WirePortDataType.FLOAT ) + " " + TessMinUniformName + ";\n"; - - //Max - uniforms += "\t\tuniform " + UIUtils.PrecisionWirePortToCgType( PrecisionType.Float, WirePortDataType.FLOAT ) + " " + TessMaxUniformName + ";\n"; - } - } - break; - case 1: - //Tess - if( !m_hasCustomFunction ) - { - uniforms += "\t\tuniform " + UIUtils.PrecisionWirePortToCgType( PrecisionType.Float, WirePortDataType.FLOAT ) + " " + TessUniformName + ";\n"; - } - break; - } - - if( m_phongEnabled ) - { - uniforms += "\t\tuniform " + UIUtils.PrecisionWirePortToCgType( PrecisionType.Float, WirePortDataType.FLOAT ) + " " + PhongStrengthUniformName + ";\n" ; - } - - return uniforms; - } - - public void AddToDataCollector( ref MasterNodeDataCollector dataCollector, int reorder ) - { - int orderIndex = reorder; - switch ( m_tessType ) - { - case 0: - { - dataCollector.AddToIncludes( -1, TessellationOpHelper.TessInclude ); - if ( !m_hasCustomFunction ) - { - //Tess - dataCollector.AddToProperties( -1, string.Format( TessProperty, m_tessFactor ), orderIndex++ ); - dataCollector.AddToUniforms( -1, "uniform " + UIUtils.PrecisionWirePortToCgType( PrecisionType.Float, WirePortDataType.FLOAT ) + " " + TessUniformName + ";" ); - - //Min - dataCollector.AddToProperties( -1, string.Format( TessMinProperty, m_tessMinDistance ), orderIndex++ ); - dataCollector.AddToUniforms( -1, "uniform " + UIUtils.PrecisionWirePortToCgType( PrecisionType.Float, WirePortDataType.FLOAT ) + " " + TessMinUniformName + ";" ); - - //Max - dataCollector.AddToProperties( -1, string.Format( TessMaxProperty, m_tessMaxDistance ), orderIndex++ ); - dataCollector.AddToUniforms( -1, "uniform " + UIUtils.PrecisionWirePortToCgType( PrecisionType.Float, WirePortDataType.FLOAT ) + " " + TessMaxUniformName + ";" ); - } - } - break; - case 1: - { - //Tess - if ( !m_hasCustomFunction ) - { - dataCollector.AddToProperties( -1, string.Format( TessProperty, m_tessFactor ), orderIndex++ ); - dataCollector.AddToUniforms( -1, "uniform " + UIUtils.PrecisionWirePortToCgType( PrecisionType.Float, WirePortDataType.FLOAT ) + " " + TessUniformName + ";" ); - } - } - break; - case 2: - { - dataCollector.AddToIncludes( -1, TessellationOpHelper.TessInclude ); - - //Tess - if ( !m_hasCustomFunction ) - { - dataCollector.AddToProperties( -1, string.Format( EdgeLengthTessProperty, m_tessFactor ), orderIndex++ ); - dataCollector.AddToUniforms( -1, "uniform " + UIUtils.PrecisionWirePortToCgType( PrecisionType.Float, WirePortDataType.FLOAT ) + " " + EdgeLengthTessUniformName + ";" ); - } - } - break; - case 3: - { - dataCollector.AddToIncludes( -1, TessellationOpHelper.TessInclude ); - - if ( !m_hasCustomFunction ) - { - //Tess - dataCollector.AddToProperties( -1, string.Format( EdgeLengthTessProperty, m_tessFactor ), orderIndex++ ); - dataCollector.AddToUniforms( -1, "uniform " + UIUtils.PrecisionWirePortToCgType( PrecisionType.Float, WirePortDataType.FLOAT ) + " " + EdgeLengthTessUniformName + ";" ); - - //Max Displacement - dataCollector.AddToProperties( -1, string.Format( EdgeLengthTessMaxDispProperty, m_tessMaxDistance ), orderIndex++ ); - dataCollector.AddToUniforms( -1, "uniform " + UIUtils.PrecisionWirePortToCgType( PrecisionType.Float, WirePortDataType.FLOAT ) + " " + EdgeLengthTessMaxDispUniformName + ";" ); - } - } - break; - } - - if ( m_phongEnabled ) - { - dataCollector.AddToProperties( -1, string.Format( PhongStrengthProperty, m_phongStrength ), orderIndex++ ); - dataCollector.AddToUniforms( -1, "uniform " + UIUtils.PrecisionWirePortToCgType( PrecisionType.Float, WirePortDataType.FLOAT ) + " " + PhongStrengthUniformName + ";" ); - } - } - - //ToDo: Optimize material property fetches to use Id instead of string - public void UpdateFromMaterial( Material mat ) - { - if ( m_enabled ) - { - if ( m_phongEnabled ) - { - if ( mat.HasProperty( PhongStrengthUniformName ) ) - m_phongStrength = mat.GetFloat( PhongStrengthUniformName ); - } - - switch ( m_tessType ) - { - case 0: - { - if ( mat.HasProperty( TessUniformName ) ) - m_tessFactor = mat.GetFloat( TessUniformName ); - - if ( mat.HasProperty( TessMinUniformName ) ) - m_tessMinDistance = mat.GetFloat( TessMinUniformName ); - - if ( mat.HasProperty( TessMaxUniformName ) ) - m_tessMaxDistance = mat.GetFloat( TessMaxUniformName ); - } - break; - case 1: - { - if ( mat.HasProperty( TessUniformName ) ) - m_tessFactor = mat.GetFloat( TessUniformName ); - } - break; - case 2: - { - if ( mat.HasProperty( EdgeLengthTessUniformName ) ) - m_tessFactor = mat.GetFloat( EdgeLengthTessUniformName ); - } - break; - case 3: - { - if ( mat.HasProperty( EdgeLengthTessUniformName ) ) - m_tessFactor = mat.GetFloat( EdgeLengthTessUniformName ); - - if ( mat.HasProperty( EdgeLengthTessMaxDispUniformName ) ) - m_tessMaxDistance = mat.GetFloat( EdgeLengthTessMaxDispUniformName ); - } - break; - } - } - } - - public void WriteToOptionalParams( ref string optionalParams ) - { - optionalParams += TessellationOpHelper.TessSurfParam + Constants.OptionalParametersSep; - if ( m_phongEnabled ) - { - optionalParams += TessellationOpHelper.PhongStrengthParam + Constants.OptionalParametersSep; - } - } - - public void Reset() - { - m_hasCustomFunction = false; - m_customFunction = string.Empty; - - m_additionalData = string.Empty; - m_additionalDataDict.Clear(); - switch ( m_tessType ) - { - case 0: - { - m_customData[ 0 ] = TessUniformName; - m_customData[ 1 ] = TessMinUniformName; - m_customData[ 2 ] = TessMaxUniformName; - } - break; - case 1: - { - m_customData[ 0 ] = TessUniformName; - m_customData[ 1 ] = string.Empty; - m_customData[ 2 ] = string.Empty; - } - break; - case 2: - { - m_customData[ 0 ] = EdgeLengthTessUniformName; - m_customData[ 1 ] = string.Empty; - m_customData[ 2 ] = string.Empty; - } - break; - case 3: - { - m_customData[ 0 ] = EdgeLengthTessUniformName; - m_customData[ 1 ] = EdgeLengthTessMaxDispUniformName; - m_customData[ 2 ] = string.Empty; - } - break; - } - } - - public string GetCurrentTessellationFunction - { - get - { - if ( m_hasCustomFunction ) - { - return TessFunctionOpen + - m_customFunction + - TessFunctionClose; - } - - string tessFunction = string.Empty; - switch ( m_tessType ) - { - case 0: - { - tessFunction = TessFunctionOpen + - DistBasedTessFunctionBody + - TessFunctionClose; - } - break; - case 1: - { - tessFunction = FixedAmountTessFunctionOpen + - FixedAmountTessFunctionBody + - TessFunctionClose; - } - break; - case 2: - { - tessFunction = TessFunctionOpen + - EdgeLengthTessFunctionBody + - TessFunctionClose; - } - break; - case 3: - { - tessFunction = TessFunctionOpen + - EdgeLengthTessCullFunctionBody + - TessFunctionClose; - } - break; - } - return tessFunction; - } - } - - public void AddAdditionalData( string data ) - { - if ( !m_additionalDataDict.ContainsKey( data ) ) - { - m_additionalDataDict.Add( data, true ); - m_additionalData += data; - } - } - - public void AddCustomFunction( string returnData ) - { - m_hasCustomFunction = true; - m_customFunction = m_additionalData + string.Format( CustomFunctionBody, returnData ); - } - - public void Destroy() - { - m_additionalDataDict.Clear(); - m_additionalDataDict = null; - } - - public bool IsTessellationPort( int index ) - { - return index == m_masterNodeIndexPort; - } - - public bool EnableTesselation { get { return m_enabled; } } - - public int TessType { get { return m_tessType; } } - public int MasterNodeIndexPort - { - get { return m_masterNodeIndexPort; } - set { m_masterNodeIndexPort = value; } - } - public int VertexOffsetIndexPort - { - get { return m_vertexOffsetIndexPort; } - set { m_vertexOffsetIndexPort = value; } - } - - public StandardSurfaceOutputNode ParentSurface { get { return m_parentSurface; } set { m_parentSurface = value; } } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/TessellationOpHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/TessellationOpHelper.cs.meta deleted file mode 100644 index c4400a8a..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/TessellationOpHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c6fbad94b0fc6b948be3a3dc61232c05 -timeCreated: 1481126959 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/UsePassHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/UsePassHelper.cs deleted file mode 100644 index d6e34adf..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/UsePassHelper.cs +++ /dev/null @@ -1,360 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; -using UnityEditorInternal; - -namespace AmplifyShaderEditor -{ - public enum UsePassLocation - { - Above, - Below - } - - [Serializable] - public class UsePassItem : ScriptableObject - { - public UsePassLocation Location; - public string Value; - public UsePassItem() - { - Location = UsePassLocation.Above; - Value = string.Empty; - } - - public UsePassItem( UsePassLocation location, string name ) - { - Location = location; - Value = name; - } - - } - - [Serializable] - public class UsePassHelper : ScriptableObject - { - private const string UseGrabFormatNewLine = "UsePass \"{0}\"\n"; - private const string UseGrabFormat = "UsePass \"{0}\""; - private const float ShaderKeywordButtonLayoutWidth = 15; - private const string ShaderPoputContext = "CONTEXT/ShaderPopup"; - - [SerializeField] - private List<UsePassItem> m_items = new List<UsePassItem>(); - - [SerializeField] - private UndoParentNode m_owner = null; - - [SerializeField] - protected bool m_isDirty = false; - - [SerializeField] - protected string m_moduleName = string.Empty; - - private ReorderableList m_reordableList = null; - private ReordableAction m_actionType = ReordableAction.None; - private int m_actionIndex = 0; - private GUIStyle m_propertyAdjustment; - - private Material m_dummyMaterial; - private MenuCommand m_dummyCommand; - private int m_currentUsePassIdx = 0; - - public void Init( string moduleName ) - { - hideFlags = HideFlags.HideAndDontSave; - m_moduleName = moduleName; - } - - void DrawButtons() - { - EditorGUILayout.Separator(); - - // Add keyword - if( GUILayout.Button( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - UsePassItem newItem = ScriptableObject.CreateInstance<UsePassItem>(); - newItem.hideFlags = HideFlags.HideAndDontSave; - m_items.Add( newItem ); - EditorGUI.FocusTextInControl( null ); - m_isDirty = true; - } - - //Remove keyword - if( GUILayout.Button( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) ) - { - if( m_items.Count > 0 ) - { - UsePassItem itemToDelete = m_items[ m_items.Count - 1 ]; - m_items.RemoveAt( m_items.Count - 1 ); - ScriptableObject.DestroyImmediate( itemToDelete ); - EditorGUI.FocusTextInControl( null ); - } - m_isDirty = true; - } - } - - public void Draw( UndoParentNode owner, bool style = true ) - { - if( m_owner == null ) - m_owner = owner; - - if( m_reordableList == null ) - { - m_reordableList = new ReorderableList( m_items, typeof( UsePassItem ), true, false, false, false ) - { - headerHeight = 0, - footerHeight = 0, - showDefaultBackground = false, - drawElementCallback = ( Rect rect, int index, bool isActive, bool isFocused ) => - { - if( m_items[ index ] != null ) - { - float labelWidthMultiplier; - float popUpWidth; - float shaderSelectorMultiplier; - float buttonPlusPosMultiplier; - if( style ) - { - rect.x -= 10; - labelWidthMultiplier = 0.9f; - popUpWidth = 0.31f; - shaderSelectorMultiplier = 1.01f; - buttonPlusPosMultiplier = 0.78f; - } - else - { - rect.x -= 1; - labelWidthMultiplier = 1.01f; - popUpWidth = 0.25f; - shaderSelectorMultiplier = 1.0f; - buttonPlusPosMultiplier = 0.55f; - } - - Rect popupPos = new Rect( rect.x, rect.y + 2, popUpWidth * rect.width, rect.height ); - Rect labelPos = new Rect( rect.x + popupPos.width * labelWidthMultiplier, rect.y, 0.59f * rect.width, rect.height ); - - Rect shaderSelectorPos = new Rect( labelPos.x + labelPos.width* shaderSelectorMultiplier, rect.y, 15, rect.height ); - - Rect buttonPlusPos = new Rect( shaderSelectorPos.x + shaderSelectorPos.width * buttonPlusPosMultiplier, rect.y, ShaderKeywordButtonLayoutWidth, rect.height ); - Rect buttonMinusPos = new Rect( buttonPlusPos.x + buttonPlusPos.width, rect.y, ShaderKeywordButtonLayoutWidth, rect.height ); - - EditorGUI.BeginChangeCheck(); - m_items[ index ].Location = (UsePassLocation)owner.EditorGUIEnumPopup( popupPos, m_items[ index ].Location ); - - if( EditorGUI.EndChangeCheck() && m_items[ index ].Location == UsePassLocation.Below && m_owner != null && m_owner.ContainerGraph.CurrentCanvasMode == NodeAvailability.TemplateShader ) - { - m_items[ index ].Location = UsePassLocation.Above; - UIUtils.ShowMessage( "Below option still not available on templates" ); - } - m_items[ index ].Value = owner.EditorGUITextField( labelPos, string.Empty, m_items[ index ].Value ); - - if( GUI.Button( shaderSelectorPos, string.Empty, UIUtils.InspectorPopdropdownFallback ) ) - { - EditorGUI.FocusTextInControl( null ); - GUI.FocusControl( null ); - m_currentUsePassIdx = index; - DisplayShaderContext( owner, GUILayoutUtility.GetRect( GUIContent.none, EditorStyles.popup ) ); - } - - if( GUI.Button( buttonPlusPos, string.Empty, UIUtils.PlusStyle ) ) - { - m_actionType = ReordableAction.Add; - m_actionIndex = index; - } - - if( GUI.Button( buttonMinusPos, string.Empty, UIUtils.MinusStyle ) ) - { - m_actionType = ReordableAction.Remove; - m_actionIndex = index; - } - } - } - }; - } - - if( m_actionType != ReordableAction.None ) - { - switch( m_actionType ) - { - case ReordableAction.Add: - UsePassItem newItem = ScriptableObject.CreateInstance<UsePassItem>(); - newItem.hideFlags = HideFlags.HideAndDontSave; - m_items.Insert( m_actionIndex + 1, newItem ); - break; - case ReordableAction.Remove: - UsePassItem itemToDelete = m_items[ m_actionIndex ]; - m_items.RemoveAt( m_actionIndex ); - ScriptableObject.DestroyImmediate( itemToDelete ); - break; - } - m_isDirty = true; - m_actionType = ReordableAction.None; - EditorGUI.FocusTextInControl( null ); - } - bool foldoutValue = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedUsePass; - if( style ) - { - NodeUtils.DrawPropertyGroup( ref foldoutValue, m_moduleName, DrawReordableList, DrawButtons ); - } - else - { - NodeUtils.DrawNestedPropertyGroup( ref foldoutValue, m_moduleName, DrawReordableList, DrawButtons ); - } - owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedUsePass = foldoutValue; - } - - private void DisplayShaderContext( UndoParentNode node, Rect r ) - { - if( m_dummyCommand == null ) - m_dummyCommand = new MenuCommand( this, 0 ); - - if( m_dummyMaterial == null ) - m_dummyMaterial = new Material( Shader.Find( "Hidden/ASESShaderSelectorUnlit" ) ); - -#pragma warning disable 0618 - UnityEditorInternal.InternalEditorUtility.SetupShaderMenu( m_dummyMaterial ); -#pragma warning restore 0618 - EditorUtility.DisplayPopupMenu( r, ShaderPoputContext, m_dummyCommand ); - } - - private void OnSelectedShaderPopup( string command, Shader shader ) - { - if( shader != null ) - { - UIUtils.MarkUndoAction(); - Undo.RecordObject( m_owner, "Selected Use Pass shader" ); - m_items[ m_currentUsePassIdx ].Value = shader.name; - } - } - - void DrawReordableList() - { - if( m_reordableList != null ) - { - if( m_propertyAdjustment == null ) - { - m_propertyAdjustment = new GUIStyle(); - m_propertyAdjustment.padding.left = 17; - } - EditorGUILayout.Space(); - - if( m_items.Count == 0 ) - { - EditorGUILayout.HelpBox( "Your list is Empty!\nUse the plus button to add one.", MessageType.Info ); - } - else - { - m_reordableList.DoLayoutList(); - } - EditorGUILayout.Space(); - } - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - try - { - int count = Convert.ToInt32( nodeParams[ index++ ] ); - for( int i = 0; i < count; i++ ) - { - string locationValue = nodeParams[ index++ ]; - // REMOVE THIS TEST AFTER A COUPLE OF VERSIONS (curr v1.5.6 r02) - if( locationValue.Equals( "Bellow" ) ) locationValue = "Below"; - - UsePassLocation location = (UsePassLocation)Enum.Parse( typeof( UsePassLocation ), locationValue ); - string name = nodeParams[ index++ ]; - UsePassItem newItem = ScriptableObject.CreateInstance<UsePassItem>(); - newItem.hideFlags = HideFlags.HideAndDontSave; - newItem.Location = location; - newItem.Value = name; - m_items.Add( newItem ); - } - } - catch( Exception e ) - { - Debug.LogException( e ); - } - } - - public void WriteToString( ref string nodeInfo ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_items.Count ); - for( int i = 0; i < m_items.Count; i++ ) - { - IOUtils.AddFieldValueToString( ref nodeInfo, m_items[ i ].Location ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_items[ i ].Value ); - } - } - - public void BuildUsePassInfo( MasterNodeDataCollector dataCollector, ref string aboveItems, ref string bellowItems, string tabs) - { - int count = 0; - count = dataCollector.AboveUsePassesList.Count; - for( int i = 0; i < count; i++ ) - { - aboveItems += tabs + string.Format( UseGrabFormatNewLine, dataCollector.AboveUsePassesList[ i ].PropertyName ); - } - - count = dataCollector.BelowUsePassesList.Count; - for( int i = 0; i < count; i++ ) - { - bellowItems += tabs + string.Format( UseGrabFormatNewLine, dataCollector.BelowUsePassesList[ i ].PropertyName ); - } - - count = m_items.Count; - for( int i = 0; i < count; i++ ) - { - if( m_items[ i ].Location == UsePassLocation.Above ) - { - aboveItems += tabs + string.Format( UseGrabFormatNewLine, m_items[ i ].Value ); - } - else - { - bellowItems += tabs + string.Format( UseGrabFormatNewLine, m_items[ i ].Value ); - } - } - } - - public void BuildUsePassInfo( MasterNodeDataCollector dataCollector, ref List<PropertyDataCollector> aboveItems, ref List<PropertyDataCollector> bellowItems ) - { - int count = 0; - count = dataCollector.AboveUsePassesList.Count; - for( int i = 0; i < count; i++ ) - { - aboveItems.Add( new PropertyDataCollector( -1, string.Format( UseGrabFormat, dataCollector.AboveUsePassesList[ i ].PropertyName ) ) ); - } - - count = dataCollector.BelowUsePassesList.Count; - for( int i = 0; i < count; i++ ) - { - bellowItems.Add( new PropertyDataCollector( -1, string.Format( UseGrabFormat, dataCollector.BelowUsePassesList[ i ].PropertyName ) ) ); - } - - - count = m_items.Count; - for( int i = 0; i < count; i++ ) - { - if( m_items[ i ].Location == UsePassLocation.Above ) - { - aboveItems.Add( new PropertyDataCollector(-1,string.Format( UseGrabFormat, m_items[ i ].Value ))); - } - else - { - bellowItems.Add( new PropertyDataCollector( -1, string.Format( UseGrabFormat, m_items[ i ].Value ) ) ); - } - } - } - - //public string ModuleName { set { m_moduleName = value; } } - public void Destroy() - { - m_owner = null; - m_items.Clear(); - m_items = null; - m_reordableList = null; - m_dummyMaterial = null; - m_dummyCommand = null; - } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/UsePassHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/UsePassHelper.cs.meta deleted file mode 100644 index ddf906c5..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/UsePassHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d818a147712609646b8d6f0f7c2ae731 -timeCreated: 1530179906 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ZBufferOpHelper.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ZBufferOpHelper.cs deleted file mode 100644 index d09b8c04..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ZBufferOpHelper.cs +++ /dev/null @@ -1,272 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; - -namespace AmplifyShaderEditor -{ - public enum ZWriteMode - { - On, - Off - } - - public enum ZTestMode - { - Less, - Greater, - LEqual, - GEqual, - Equal, - NotEqual, - Always - } - - [Serializable] - class ZBufferOpHelper - { - public static readonly string DepthParametersStr = " Depth"; - public static readonly string ZWriteModeStr = "ZWrite Mode"; - public static readonly string ZTestModeStr = "ZTest Mode"; - public static readonly string OffsetStr = "Offset"; - public static readonly string OffsetFactorStr = "Factor"; - public static readonly string OffsetUnitsStr = "Units"; - private const string ExtraDepthPassStr = "Extra Depth Pass"; - private const string DepthZTestStr = "Depth ZTest"; - - public static readonly string[] ZTestModeLabels = - { - "<Default>", - "Less", - "Greater", - "Less or Equal", - "Greater or Equal", - "Equal", - "Not Equal", - "Always" - }; - - public static readonly string[] ZTestModeValues = - { - "<Default>", - "Less", - "Greater", - "LEqual", - "GEqual", - "Equal", - "NotEqual", - "Always" - }; - - public static readonly string[] ZWriteModeValues = - { - "<Default>", - "On", - "Off" - }; - - public static readonly Dictionary<ZTestMode, int> ZTestModeDict = new Dictionary<ZTestMode, int> - { - {ZTestMode.Less,1 }, - {ZTestMode.Greater,2}, - {ZTestMode.LEqual,3}, - {ZTestMode.GEqual,4}, - {ZTestMode.Equal,5}, - {ZTestMode.NotEqual,6}, - {ZTestMode.Always,7} - }; - - public static readonly Dictionary<ZWriteMode, int> ZWriteModeDict = new Dictionary<ZWriteMode, int> - { - { ZWriteMode.On,1}, - { ZWriteMode.Off,2} - }; - - - [SerializeField] - private InlineProperty m_zTestMode = new InlineProperty(); - - [SerializeField] - private InlineProperty m_zWriteMode = new InlineProperty(); - [SerializeField] - private InlineProperty m_offsetFactor = new InlineProperty(); - - [SerializeField] - private InlineProperty m_offsetUnits = new InlineProperty(); - - [SerializeField] - private bool m_offsetEnabled; - - [SerializeField] - private bool m_extraDepthPass; - - [SerializeField] - private int m_extrazTestMode = 0; - - [SerializeField] - private StandardSurfaceOutputNode m_parentSurface; - - public string CreateDepthInfo( bool outlineZWrite, bool outlineZTest ) - { - string result = string.Empty; - if( m_zWriteMode.IntValue != 0 || m_zWriteMode.Active ) - { - MasterNode.AddRenderState( ref result, "ZWrite", m_zWriteMode.GetValueOrProperty( ZWriteModeValues[ m_zWriteMode.IntValue ] ) ); - } - else if( outlineZWrite ) - { - MasterNode.AddRenderState( ref result, "ZWrite", ZWriteModeValues[ 1 ] ); - } - - if( m_zTestMode.IntValue != 0 || m_zTestMode.Active ) - { - MasterNode.AddRenderState( ref result, "ZTest", m_zTestMode.GetValueOrProperty( ZTestModeValues[ m_zTestMode.IntValue ] ) ); - } - else if( outlineZTest ) - { - MasterNode.AddRenderState( ref result, "ZTest", ZTestModeValues[ 3 ] ); - } - - if( m_offsetEnabled ) - { - MasterNode.AddRenderState( ref result, "Offset ", m_offsetFactor.GetValueOrProperty() + " , " + m_offsetUnits.GetValueOrProperty() ); - } - - return result; - } - - public void Draw( UndoParentNode owner, GUIStyle toolbarstyle, bool customBlendAvailable ) - { - Color cachedColor = GUI.color; - GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, 0.5f ); - EditorGUILayout.BeginHorizontal( toolbarstyle ); - GUI.color = cachedColor; - EditorGUI.BeginChangeCheck(); - m_parentSurface.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDepth = owner.GUILayoutToggle( m_parentSurface.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDepth, DepthParametersStr, UIUtils.MenuItemToggleStyle ); - if( EditorGUI.EndChangeCheck() ) - { - EditorPrefs.SetBool( "ExpandedDepth", m_parentSurface.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDepth ); - } - EditorGUILayout.EndHorizontal(); - - if( m_parentSurface.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDepth ) - { - cachedColor = GUI.color; - GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, ( EditorGUIUtility.isProSkin ? 0.5f : 0.25f ) ); - EditorGUILayout.BeginVertical( UIUtils.MenuItemBackgroundStyle ); - GUI.color = cachedColor; - - EditorGUI.indentLevel++; - if( !customBlendAvailable ) - EditorGUILayout.HelpBox( "Depth Writing is only available for Opaque or Custom blend modes", MessageType.Warning ); - - EditorGUILayout.Separator(); - EditorGUI.BeginDisabledGroup( !customBlendAvailable ); - - m_zWriteMode.EnumTypePopup( ref owner, ZWriteModeStr, ZWriteModeValues ); - m_zTestMode.EnumTypePopup( ref owner, ZTestModeStr, ZTestModeLabels ); - //m_zWriteMode = owner.EditorGUILayoutPopup( ZWriteModeStr, m_zWriteMode, ZWriteModeValues ); - //m_zTestMode = owner.EditorGUILayoutPopup( ZTestModeStr, m_zTestMode, ZTestModeLabels ); - m_offsetEnabled = owner.EditorGUILayoutToggle( OffsetStr, m_offsetEnabled ); - if( m_offsetEnabled ) - { - EditorGUI.indentLevel++; - m_offsetFactor.FloatField( ref owner , OffsetFactorStr ); - m_offsetUnits.FloatField( ref owner , OffsetUnitsStr ); - EditorGUI.indentLevel--; - } - - m_extraDepthPass = owner.EditorGUILayoutToggle( ExtraDepthPassStr, m_extraDepthPass ); - if( m_extraDepthPass ) - { - EditorGUI.indentLevel++; - m_extrazTestMode = owner.EditorGUILayoutPopup( DepthZTestStr, m_extrazTestMode, ZTestModeLabels ); - EditorGUI.indentLevel--; - } - EditorGUILayout.Separator(); - EditorGUI.indentLevel--; - EditorGUI.EndDisabledGroup(); - EditorGUILayout.EndVertical(); - } - - EditorGUI.EndDisabledGroup(); - } - - public void DrawExtraDepthPass( ref string shaderBody ) - { - if( m_extraDepthPass ) - { - shaderBody += "\t\tPass\n"; - shaderBody += "\t\t{\n"; - shaderBody += "\t\t\tColorMask 0\n"; - if( m_extrazTestMode != 0 ) - shaderBody += "\t\t\tZTest " + ZTestModeValues[ m_extrazTestMode ] + "\n"; - shaderBody += "\t\t\tZWrite On\n"; - shaderBody += "\t\t}\n\n"; - } - } - - public void ReadFromString( ref uint index, ref string[] nodeParams ) - { - if( UIUtils.CurrentShaderVersion() < 2502 ) - { - string zWriteMode = nodeParams[ index++ ]; - m_zWriteMode.IntValue = zWriteMode.Equals( "Off" ) ? 2 : 0; - - string zTestMode = nodeParams[ index++ ]; - for( int i = 0; i < ZTestModeValues.Length; i++ ) - { - if( zTestMode.Equals( ZTestModeValues[ i ] ) ) - { - m_zTestMode.IntValue = i; - break; - } - } - } - else - { - if( UIUtils.CurrentShaderVersion() > 14501 ) - { - m_zWriteMode.ReadFromString( ref index, ref nodeParams ); - m_zTestMode.ReadFromString( ref index, ref nodeParams ); - } - else - { - m_zWriteMode.IntValue = Convert.ToInt32( nodeParams[ index++ ] ); - m_zTestMode.IntValue = Convert.ToInt32( nodeParams[ index++ ] ); - } - m_offsetEnabled = Convert.ToBoolean( nodeParams[ index++ ] ); - - if( UIUtils.CurrentShaderVersion() > 15303 ) - { - m_offsetFactor.ReadFromString( ref index, ref nodeParams ); - m_offsetUnits.ReadFromString( ref index, ref nodeParams ); - } - else - { - m_offsetFactor.FloatValue = Convert.ToSingle( nodeParams[ index++ ] ); - m_offsetUnits.FloatValue = Convert.ToSingle( nodeParams[ index++ ] ); - } - - if( UIUtils.CurrentShaderVersion() > 14202 ) - { - m_extraDepthPass = Convert.ToBoolean( nodeParams[ index++ ] ); - m_extrazTestMode = Convert.ToInt32( nodeParams[ index++ ] ); - } - } - } - - public void WriteToString( ref string nodeInfo ) - { - m_zWriteMode.WriteToString( ref nodeInfo ); - m_zTestMode.WriteToString( ref nodeInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_offsetEnabled ); - m_offsetFactor.WriteToString( ref nodeInfo ); - m_offsetUnits.WriteToString( ref nodeInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_extraDepthPass ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_extrazTestMode ); - } - public bool IsActive { get { return m_zTestMode.IntValue != 0 || m_zWriteMode.IntValue != 0 || m_offsetEnabled || m_zTestMode.Active || m_zWriteMode.Active; } } - public StandardSurfaceOutputNode ParentSurface { get { return m_parentSurface; } set { m_parentSurface = value; } } - } -} diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ZBufferOpHelper.cs.meta b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ZBufferOpHelper.cs.meta deleted file mode 100644 index edee7bf1..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ZBufferOpHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f35a3e26a28596b4f9b54a1f2689db06 -timeCreated: 1481126960 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: |