summaryrefslogtreecommitdiff
path: root/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateVertexData.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateVertexData.cs')
-rw-r--r--Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateVertexData.cs190
1 files changed, 190 insertions, 0 deletions
diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateVertexData.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateVertexData.cs
new file mode 100644
index 00000000..3b82e046
--- /dev/null
+++ b/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateVertexData.cs
@@ -0,0 +1,190 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+using System;
+using UnityEngine;
+
+namespace AmplifyShaderEditor
+{
+ [Serializable]
+ public class TemplateVertexData
+ {
+ [SerializeField]
+ private TemplateSemantics m_semantics = TemplateSemantics.NONE;
+ [SerializeField]
+ private WirePortDataType m_dataType = WirePortDataType.OBJECT;
+ [SerializeField]
+ private string m_varName = string.Empty;
+ [SerializeField]
+ private TemplateInfoOnSematics m_dataInfo = TemplateInfoOnSematics.NONE;
+ [SerializeField]
+ private string m_dataSwizzle = string.Empty;
+ [SerializeField]
+ private bool m_available = false;
+ [SerializeField]
+ private string m_varNameWithSwizzle = string.Empty;
+ [SerializeField]
+ private bool m_isSingleComponent = true;
+ [SerializeField]
+ private bool m_excludeStructPrefix = false;
+ [SerializeField]
+ private string[] m_components = { "0", "0", "0", "0" };
+ [SerializeField]
+ private bool[] m_componentUsage = { false, false,false,false };
+
+ public TemplateVertexData( TemplateSemantics semantics, WirePortDataType dataType, string varName )
+ {
+ m_semantics = semantics;
+ m_dataType = dataType;
+ m_varName = varName;
+ m_varNameWithSwizzle = varName;
+ }
+
+ public TemplateVertexData( TemplateSemantics semantics, WirePortDataType dataType, string varName, string dataSwizzle )
+ {
+ m_semantics = semantics;
+ m_dataType = dataType;
+ m_varName = varName;
+ m_dataSwizzle = dataSwizzle;
+ m_varNameWithSwizzle = varName + dataSwizzle;
+ }
+
+ public TemplateVertexData( TemplateVertexData other )
+ {
+ m_semantics = other.m_semantics;
+ m_dataType = other.m_dataType;
+ m_varName = other.m_varName;
+ m_dataInfo = other.m_dataInfo;
+ m_dataSwizzle = other.m_dataSwizzle;
+ m_available = other.m_available;
+ m_varNameWithSwizzle = other.m_varNameWithSwizzle;
+ m_isSingleComponent = other.IsSingleComponent;
+ m_excludeStructPrefix = other.ExcludeStructPrefix;
+ for( int i = 0; i < 4; i++ )
+ {
+ m_components[ i ] = other.Components[ i ];
+ }
+ }
+
+ public void RegisterComponent( char channelId, string value )
+ {
+ int channelIdInt = -1;
+ switch( channelId )
+ {
+ case 'r':
+ case 'x': channelIdInt = 0; break;
+ case 'g':
+ case 'y': channelIdInt = 1; break;
+ case 'b':
+ case 'z': channelIdInt = 2; break;
+ case 'a':
+ case 'w': channelIdInt = 3; break;
+ }
+
+ if( channelId < 0 )
+ {
+ Debug.LogWarning( "Attempting to create interpolated data from invalid channel " + channelId );
+ return;
+ }
+
+ RegisterComponent( channelIdInt, value );
+ }
+
+ public void RegisterComponent( int channelId, string value )
+ {
+ channelId = Mathf.Clamp( channelId, 0, 3 );
+ m_components[ channelId ] = value;
+ m_componentUsage[ channelId ] = true;
+ m_isSingleComponent = false;
+ }
+
+ public void BuildVar( PrecisionType precisionType = PrecisionType.Float )
+ {
+ if( m_isSingleComponent )
+ return;
+ WirePortDataType dataType = WirePortDataType.FLOAT;
+ if( m_componentUsage[ 3 ] )
+ {
+ dataType = WirePortDataType.FLOAT4;
+ }
+ else if( m_componentUsage[ 2 ] )
+ {
+ dataType = WirePortDataType.FLOAT3;
+ }
+ else if( m_componentUsage[ 1 ] )
+ {
+ dataType = WirePortDataType.FLOAT2;
+ }
+
+ string newVar = UIUtils.PrecisionWirePortToCgType( precisionType, dataType );
+ newVar += "( ";
+ switch( dataType )
+ {
+ default: newVar += "0"; break;
+ case WirePortDataType.INT:
+ case WirePortDataType.FLOAT:
+ {
+ newVar += "{0}."+Components[ 0 ];
+ }
+ break;
+ case WirePortDataType.FLOAT2:
+ {
+ newVar += "{0}." + Components[ 0 ] + ", " +
+ "{0}." + Components[ 1 ];
+ }
+ break;
+ case WirePortDataType.FLOAT3:
+ {
+ newVar += "{0}." + Components[ 0 ] + ", " +
+ "{0}." + Components[ 1 ] + ", " +
+ "{0}." + Components[ 2 ];
+ }
+ break;
+ case WirePortDataType.FLOAT4:
+ case WirePortDataType.COLOR:
+ {
+ newVar += "{0}." + Components[ 0 ] + ", " +
+ "{0}." + Components[ 1 ] + ", " +
+ "{0}." + Components[ 2 ] + ", " +
+ "{0}." + Components[ 3 ];
+ }
+ break;
+
+ }
+ newVar += " )";
+ m_varName = newVar;
+ m_varNameWithSwizzle = newVar;
+ }
+
+ public bool ExcludeStructPrefix { get { return m_excludeStructPrefix; } set { m_excludeStructPrefix = value; } }
+ public bool IsSingleComponent { get { return m_isSingleComponent; } }
+ public string[] Components { get { return m_components; } }
+ public TemplateSemantics Semantics { get { return m_semantics; } }
+ public WirePortDataType DataType { get { return m_dataType; } }
+ public string VarName { get { return m_varName; } set { m_varName = value; m_varNameWithSwizzle = value + m_dataSwizzle; } }
+ public string DataSwizzle { get { return m_dataSwizzle; } set { m_dataSwizzle = value; m_varNameWithSwizzle = m_varName + value; } }
+ public TemplateInfoOnSematics DataInfo { get { return m_dataInfo; } set { m_dataInfo = value; } }
+ public bool Available { get { return m_available; } set { m_available = value; } }
+ public string VarNameWithSwizzle { get { return m_varNameWithSwizzle; } }
+ public WirePortDataType SwizzleType
+ {
+ get
+ {
+ if ( string.IsNullOrEmpty( m_dataSwizzle ) )
+ return m_dataType;
+
+ WirePortDataType newType = m_dataType;
+ switch ( m_dataSwizzle.Length )
+ {
+ case 2: newType = WirePortDataType.FLOAT;break;
+ case 3: newType = WirePortDataType.FLOAT2; break;
+ case 4: newType = WirePortDataType.FLOAT3; break;
+ case 5: newType = WirePortDataType.FLOAT4; break;
+ }
+
+ return newType;
+ }
+ }
+
+ }
+}