summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/DuplicatePreventionBuffer.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-10-23 13:08:43 +0800
committerchai <chaifix@163.com>2020-10-23 13:08:43 +0800
commitb82da95b5181ac8bbae38efb13e950d5e88a4caa (patch)
tree48a6f3269276484bbc7cfc95f0651f40a2176aa1 /Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/DuplicatePreventionBuffer.cs
parent917e9e0b320775634dc2e710f7deac74fd0822f0 (diff)
*移动amplify shader editor到third party目录
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/DuplicatePreventionBuffer.cs')
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/DuplicatePreventionBuffer.cs375
1 files changed, 375 insertions, 0 deletions
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/DuplicatePreventionBuffer.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/DuplicatePreventionBuffer.cs
new file mode 100644
index 00000000..6f763338
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/DuplicatePreventionBuffer.cs
@@ -0,0 +1,375 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace AmplifyShaderEditor
+{
+ [Serializable]
+ public class DuplicatePreventionBuffer
+ {
+ private const string VectorNameStr = "Vector ";
+ private const string TextureSampleNameStr = "Texture Sample ";
+ private const string MatrixNameStr = "Matrix ";
+ private const string IntNameStr = "Int ";
+ private const string FloatNameStr = "Float ";
+ private const string ColorNameStr = "Color ";
+
+ [SerializeField]
+ private int[] m_availableUVChannelsArray = { -1, -1, -1, -1 };
+ private string[] m_availableUVChannelsNamesArray = { "null",
+ "null",
+ "null",
+ "null" };
+
+ private Dictionary<string, int> m_availablePropertyNames = new Dictionary<string, int>();
+ private Dictionary<string, int> m_availableUniformNames = new Dictionary<string, int>();
+ private Dictionary<string, int> m_availableLocalVariableNames = new Dictionary<string, int>();
+
+ public void ReleaseAllUVChannels()
+ {
+ for ( int i = 0; i < m_availableUVChannelsArray.Length; i++ )
+ {
+ m_availableUVChannelsArray[ i ] = -1;
+ }
+ }
+
+ public bool RegisterUVChannel( int nodeId, int channelId, string name )
+ {
+ if ( channelId < 0 ||
+ channelId > ( m_availableUVChannelsArray.Length - 1 ) ||
+ m_availableUVChannelsArray[ channelId ] >= 0 )
+ {
+ return false;
+ }
+
+ m_availableUVChannelsArray[ channelId ] = nodeId;
+ m_availableUVChannelsNamesArray[ channelId ] = name;
+ return true;
+ }
+
+
+ public bool ReleaseUVChannel( int nodeId, int channelId )
+ {
+ if ( channelId < 0 ||
+ channelId > ( m_availableUVChannelsArray.Length - 1 ) )
+ {
+ return false;
+ }
+
+ if ( m_availableUVChannelsArray[ channelId ] == nodeId )
+ {
+ m_availableUVChannelsArray[ channelId ] = -1;
+ return true;
+ }
+ return false;
+ }
+
+ public int RegisterFirstAvailableChannel( int nodeId , string name)
+ {
+ for ( int i = 0; i < m_availableUVChannelsArray.Length; i++ )
+ {
+ if ( m_availableUVChannelsArray[ i ] == -1 )
+ {
+ m_availableUVChannelsArray[ i ] = nodeId;
+ m_availableUVChannelsNamesArray[ i ] = name;
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ public bool IsChannelAvailable( int channelId )
+ {
+ if ( channelId < 0 ||
+ channelId > ( m_availableUVChannelsArray.Length - 1 ) )
+ {
+ return false;
+ }
+
+ return ( m_availableUVChannelsArray[ channelId ] < 0 );
+ }
+
+ public int GetFirstOccupiedChannel()
+ {
+ for ( int i = 0; i < 4; i++ )
+ {
+ if ( m_availableUVChannelsArray[ i ] > -1 )
+ return i;
+ }
+ return -1;
+ }
+
+ public string GetChannelName( int channelId )
+ {
+ if ( channelId < 0 ||
+ channelId > ( m_availableUVChannelsArray.Length - 1 ) )
+ {
+ return string.Empty;
+ }
+
+ return m_availableUVChannelsNamesArray[ channelId ] ;
+ }
+
+ public void SetChannelName( int channelId , string name )
+ {
+ if ( channelId < 0 ||
+ channelId > ( m_availableUVChannelsArray.Length - 1 ) )
+ {
+ return;
+ }
+ m_availableUVChannelsNamesArray[ channelId ] = name;
+ }
+
+ public bool RegisterLocalVariableName( int nodeId, string name )
+ {
+ if ( name.Length == 0 )
+ return false;
+
+ if ( m_availableLocalVariableNames.ContainsKey( name ) )
+ {
+ if ( m_availableLocalVariableNames[ name ] > -1 )
+ {
+ return false;
+ }
+ else
+ {
+ m_availableLocalVariableNames[ name ] = nodeId;
+ return true;
+ }
+ }
+
+ m_availableLocalVariableNames.Add( name, nodeId );
+ return true;
+ }
+
+ public int CheckUniformNameOwner( string name )
+ {
+ if ( name.Length == 0 )
+ return -1;
+
+ if ( m_availableUniformNames.ContainsKey( name ) )
+ {
+ return m_availableUniformNames[ name ];
+ }
+
+ return -1;
+ }
+
+ public bool RegisterUniformName( int nodeId, string name )
+ {
+ if ( name.Length == 0 )
+ return false;
+
+ if ( m_availableUniformNames.ContainsKey( name ) )
+ {
+ if ( m_availableUniformNames[ name ] > -1 )
+ {
+ return false;
+ }
+ else
+ {
+ m_availableUniformNames[ name ] = nodeId;
+ return true;
+ }
+ }
+
+ m_availableUniformNames.Add( name, nodeId );
+ return true;
+ }
+
+ public void DumpUniformNames()
+ {
+ string val = "CONTENTS\n";
+ foreach ( KeyValuePair<string, int> kvp in m_availableUniformNames )
+ {
+ val += ( "key " + kvp.Key + " : value " + kvp.Value + "\n" );
+ }
+ }
+
+ public void DumpLocalVariableNames()
+ {
+ string val = "CONTENTS\n";
+ foreach ( KeyValuePair<string, int> kvp in m_availableLocalVariableNames )
+ {
+ val += ( "key " + kvp.Key + " : value " + kvp.Value + "\n" );
+ }
+ }
+
+
+ public bool ReleaseUniformName( int nodeId, string name )
+ {
+ if ( !string.IsNullOrEmpty(name) && name.Length == 0 )
+ return false;
+
+ if ( m_availableUniformNames.ContainsKey( name ) )
+ {
+ if ( m_availableUniformNames[ name ] == nodeId )
+ {
+ m_availableUniformNames.Remove( name );
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public bool ReleaseLocalVariableName( int nodeId, string name )
+ {
+ if ( name.Length == 0 )
+ return false;
+
+ if ( m_availableLocalVariableNames.ContainsKey( name ) )
+ {
+ if ( m_availableLocalVariableNames[ name ] == nodeId )
+ {
+ m_availableLocalVariableNames.Remove( name );
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void ReleaseAllUniformNames()
+ {
+ m_availableUniformNames.Clear();
+ }
+
+ public void ReleaseAllLocalVariableNames()
+ {
+ m_availableLocalVariableNames.Clear();
+ }
+
+ public void GetFirstAvailableName( int nodeId, WirePortDataType type , out string outProperty , out string outInspector, bool useCustomPrefix = false, string customPrefix = null)
+ {
+ string name = string.Empty;
+ if ( useCustomPrefix && customPrefix != null )
+ {
+ name = customPrefix;
+ }
+ else
+ {
+ switch ( type )
+ {
+ case WirePortDataType.OBJECT:
+ case WirePortDataType.FLOAT:
+ {
+ name = FloatNameStr;
+ }
+ break;
+ case WirePortDataType.INT:
+ {
+ name = IntNameStr;
+ }
+ break;
+ case WirePortDataType.FLOAT2:
+ case WirePortDataType.FLOAT3:
+ case WirePortDataType.FLOAT4:
+ {
+ name = VectorNameStr;
+ }
+ break;
+ case WirePortDataType.FLOAT3x3:
+ case WirePortDataType.FLOAT4x4:
+ {
+ name = MatrixNameStr;
+ }
+ break;
+ case WirePortDataType.COLOR:
+ {
+ name = ColorNameStr;
+ }
+ break;
+ }
+ }
+
+ int count = 0;
+ bool foundName = false;
+ while ( !foundName )
+ {
+ string inspectorName = name + count;
+ string propertyName = UIUtils.GeneratePropertyName( inspectorName , PropertyType.Property );
+
+ if ( IsUniformNameAvailable( propertyName ) )
+ {
+ outInspector = inspectorName;
+ outProperty = propertyName;
+ RegisterUniformName( nodeId, propertyName );
+ return;
+ }
+ count += 1;
+ }
+ outProperty = string.Empty;
+ outInspector = string.Empty;
+ UIUtils.ShowMessage( "Could not find a valid name " + MessageSeverity.Warning );
+ }
+
+ public bool IsUniformNameAvailable( string name )
+ {
+ if ( m_availableUniformNames.ContainsKey( name ) && m_availableUniformNames[ name ] > -1 )
+ return false;
+ return true;
+ }
+
+ public bool IsLocalvariableNameAvailable( string name )
+ {
+ if ( m_availableLocalVariableNames.ContainsKey( name ) && m_availableLocalVariableNames[ name ] > -1 )
+ return false;
+ return true;
+ }
+
+ public bool GetPropertyName( int nodeId, string name )
+ {
+ if ( m_availablePropertyNames.ContainsKey( name ) )
+ {
+ if ( m_availablePropertyNames[ name ] > -1 )
+ {
+ return false;
+ }
+ else
+ {
+ m_availablePropertyNames[ name ] = nodeId;
+ return true;
+ }
+ }
+
+ m_availablePropertyNames.Add( name, nodeId );
+ return true;
+ }
+
+
+ public bool ReleasePropertyName( int nodeId, string name )
+ {
+ if ( m_availablePropertyNames.ContainsKey( name ) )
+ {
+ if ( m_availablePropertyNames[ name ] == nodeId )
+ {
+ m_availablePropertyNames[ name ] = -1;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void ReleaseAllPropertyNames()
+ {
+ m_availablePropertyNames.Clear();
+ }
+
+ public bool IsPropertyNameAvailable( string name )
+ {
+ if ( m_availablePropertyNames.ContainsKey( name ) && m_availablePropertyNames[ name ] > -1 )
+ return false;
+ return true;
+ }
+
+ public void ReleaseAllData()
+ {
+ ReleaseAllUVChannels();
+ ReleaseAllUniformNames();
+ ReleaseAllPropertyNames();
+ ReleaseAllLocalVariableNames();
+ }
+ }
+}