| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 | 
							- // 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 TemplateInterpElement
 
- 	{
 
- 		public TemplateSemantics Semantic;
 
- 		public bool[] AvailableChannels = { true, true, true, true };
 
- 		public bool IsFull = false;
 
- 		public int Usage = 0;
 
- 		public string Name;
 
- 		//https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-struct
 
- 		public bool NoInterpolation;
 
- 		public bool Sample;
 
- 		public TemplateInterpElement( TemplateInterpElement other )
 
- 		{
 
- 			Semantic = other.Semantic;
 
- 			for ( int i = 0; i < AvailableChannels.Length; i++ )
 
- 			{
 
- 				AvailableChannels[ i ] = other.AvailableChannels[ i ];
 
- 			}
 
- 			IsFull = other.IsFull;
 
- 			Usage = other.Usage;
 
- 			Name = other.Name;
 
- 			NoInterpolation = other.NoInterpolation;
 
- 			Sample = other.Sample;
 
- 		}
 
- 		public TemplateInterpElement( TemplateSemantics semantic )
 
- 		{
 
- 			Semantic = semantic;
 
- 			int semanticId = TemplateHelperFunctions.SemanticToInt[ Semantic ];
 
- 			Name = ( semanticId == 0 ) ? TemplateHelperFunctions.BaseInterpolatorName : TemplateHelperFunctions.BaseInterpolatorName + semanticId.ToString();
 
- 		}
 
- 		public void SetAvailableChannelsFromString( string channels )
 
- 		{
 
- 			for ( int i = 0; i < AvailableChannels.Length; i++ )
 
- 			{
 
- 				AvailableChannels[ i ] = false;
 
- 			}
 
- 			Usage = AvailableChannels.Length;
 
- 			for ( int i = 0; i < channels.Length; i++ )
 
- 			{
 
- 				switch ( channels[ i ] )
 
- 				{
 
- 					case 'x': if ( !AvailableChannels[ 0 ] ) { AvailableChannels[ 0 ] = true; Usage--; } break;
 
- 					case 'y': if ( !AvailableChannels[ 1 ] ) { AvailableChannels[ 1 ] = true; Usage--; } break;
 
- 					case 'z': if ( !AvailableChannels[ 2 ] ) { AvailableChannels[ 2 ] = true; Usage--; } break;
 
- 					case 'w': if ( !AvailableChannels[ 3 ] ) { AvailableChannels[ 3 ] = true; Usage--; } break;
 
- 				}
 
- 			}
 
- 		}
 
- 		public TemplateVertexData RequestChannels( WirePortDataType type, bool isColor, string customName = null )
 
- 		{
 
- 			if ( IsFull )
 
- 				return null;
 
- 			int channelsRequired = TemplateHelperFunctions.DataTypeChannelUsage[ type ];
 
- 			if ( channelsRequired == 0 )
 
- 				return null;
 
- 			int firstChannel = -1;
 
- 			for ( int i = 0; i < AvailableChannels.Length; i++ )
 
- 			{
 
- 				if ( AvailableChannels[ i ] )
 
- 				{
 
- 					if ( firstChannel < 0 )
 
- 					{
 
- 						firstChannel = i;
 
- 					}
 
- 					channelsRequired -= 1;
 
- 					if ( channelsRequired == 0 )
 
- 						break;
 
- 				}
 
- 			}
 
- 			//did not found enough channels to fill request
 
- 			if ( channelsRequired > 0 )
 
- 				return null;
 
- 			if( Usage == 0 && customName != null )
 
- 			{
 
- 				Name = customName;
 
- 			}
 
- 			Usage += 1;
 
- 			TemplateVertexData data = null;
 
- 			if ( type == WirePortDataType.COLOR || type == WirePortDataType.FLOAT4 )
 
- 			{
 
- 				// Automatically lock all channels
 
- 				for ( int i = firstChannel; i < ( firstChannel + channelsRequired ); i++ )
 
- 				{
 
- 					AvailableChannels[ i ] = false;
 
- 				}
 
- 				IsFull = true;
 
- 				data = new TemplateVertexData( Semantic, type, Name );
 
- 			}
 
- 			else
 
- 			{
 
- 				string[] swizzleArray = ( isColor ) ? TemplateHelperFunctions.ColorSwizzle : TemplateHelperFunctions.VectorSwizzle;
 
- 				string channels = ".";
 
- 				int count = firstChannel + TemplateHelperFunctions.DataTypeChannelUsage[ type ];
 
- 				for ( int i = firstChannel; i < count; i++ )
 
- 				{
 
- 					AvailableChannels[ i ] = false;
 
- 					channels += swizzleArray[ i ];
 
- 					if ( i == ( AvailableChannels.Length - 1 ) )
 
- 					{
 
- 						IsFull = true;
 
- 					}
 
- 				}
 
- 				data = new TemplateVertexData( Semantic, type, Name, channels );
 
- 			}
 
- 			return data;
 
- 		}
 
- 	}
 
- 	[Serializable]
 
- 	public class TemplateInterpData
 
- 	{
 
- 		[SerializeField]
 
- 		private string m_interpDataId = string.Empty;
 
- 		[SerializeField]
 
- 		private int m_interpDataStartIdx = -1;
 
- 		[SerializeField]
 
- 		private bool m_dynamicMax = false;
 
- 		public List<TemplateInterpElement> AvailableInterpolators = new List<TemplateInterpElement>();
 
- 		public List<TemplateVertexData> Interpolators = new List<TemplateVertexData>();
 
- 		public List<TemplateVertexData> RawInterpolators = new List<TemplateVertexData>();
 
- 		public TemplateInterpData() { }
 
- 		public bool HasRawInterpolatorOfName( string name )
 
- 		{
 
- 			return RawInterpolators.Exists( ( x ) => x.VarName.Equals( name ));
 
- 		}
 
- 		public TemplateInterpData( TemplateInterpData other )
 
- 		{
 
- 			m_dynamicMax = other.DynamicMax;
 
- 			foreach ( TemplateInterpElement data in other.AvailableInterpolators )
 
- 			{
 
- 				AvailableInterpolators.Add( new TemplateInterpElement( data ) );
 
- 			}
 
- 			for ( int i = 0; i < other.Interpolators.Count; i++ )
 
- 			{
 
- 				Interpolators.Add( new TemplateVertexData( other.Interpolators[ i ] ) );
 
- 			}
 
- 			for( int i = 0; i < other.RawInterpolators.Count; i++ )
 
- 			{
 
- 				RawInterpolators.Add( new TemplateVertexData( other.RawInterpolators[ i ] ) );
 
- 			}
 
- 		}
 
- 		public void RecalculateAvailableInterpolators( int newMax )
 
- 		{
 
- 			if( m_dynamicMax )
 
- 			{
 
- 				if( !TemplateHelperFunctions.IntToSemantic.ContainsKey( ( newMax - 1 ) ) )
 
- 				{
 
- 					Debug.LogWarning( "Attempting to add inexisting available interpolators" );
 
- 					return;
 
- 				}
 
- 				if( AvailableInterpolators.Count > 0 )
 
- 				{
 
- 					int currMax = 1 + TemplateHelperFunctions.SemanticToInt[ AvailableInterpolators[ AvailableInterpolators.Count - 1 ].Semantic ];
 
- 					if( newMax > currMax )
 
- 					{
 
- 						int count = newMax - currMax;
 
- 						for( int i = 0; i < count; i++ )
 
- 						{
 
- 							AvailableInterpolators.Add( new TemplateInterpElement( TemplateHelperFunctions.IntToSemantic[ currMax + i ] ));
 
- 						}
 
- 					}
 
- 					else if( newMax < currMax )
 
- 					{
 
- 						int min = TemplateHelperFunctions.SemanticToInt[ AvailableInterpolators[ 0 ].Semantic ];
 
- 						if( newMax > min )
 
- 						{
 
- 							int count = currMax - newMax;
 
- 							for( int i = 0; i < count; i++ )
 
- 							{
 
- 								AvailableInterpolators.RemoveAt( AvailableInterpolators.Count - 1 );
 
- 							}
 
- 						}
 
- 					}
 
- 				}
 
- 			}
 
- 		}
 
- 		public void ReplaceNameOnInterpolator( TemplateSemantics semantic, string newName )
 
- 		{
 
- 			for ( int i = 0; i < AvailableInterpolators.Count; i++ )
 
- 			{
 
- 				if ( AvailableInterpolators[ i ].Semantic == semantic )
 
- 				{
 
- 					AvailableInterpolators[ i ].Name = newName;
 
- 					break;
 
- 				}
 
- 			}
 
- 		}
 
- 		public void Destroy()
 
- 		{
 
- 			AvailableInterpolators.Clear();
 
- 			AvailableInterpolators = null;
 
- 			Interpolators.Clear();
 
- 			Interpolators = null;
 
- 			RawInterpolators.Clear();
 
- 			RawInterpolators = null;
 
- 		}
 
- 		
 
- 		public string InterpDataId { get { return m_interpDataId; } set { m_interpDataId = value; } }
 
- 		public int InterpDataStartIdx { get { return m_interpDataStartIdx; } set { m_interpDataStartIdx = value; } }
 
- 		public bool DynamicMax { get { return m_dynamicMax; } set { m_dynamicMax = value; } }
 
- 	}
 
- }
 
 
  |