summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/SamplerStateAutoGenerator.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/SamplerStateAutoGenerator.cs')
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/SamplerStateAutoGenerator.cs203
1 files changed, 203 insertions, 0 deletions
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/SamplerStateAutoGenerator.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/SamplerStateAutoGenerator.cs
new file mode 100644
index 00000000..8be253c4
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/SamplerStateAutoGenerator.cs
@@ -0,0 +1,203 @@
+// 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 InlineSamplerFilteringMode
+ {
+ Point,
+ Linear,
+ Trilinear
+ };
+
+ public enum InlineSamplerWrapMode
+ {
+ Clamp,
+ Repeat,
+ Mirror,
+ MirrorOnce
+ };
+
+ public enum InlineSamplerWrapCoordinates
+ {
+ All,
+ U,
+ V,
+ W
+ };
+
+ [Serializable]
+ public class InlineSamplerWrapOptions
+ {
+ public InlineSamplerWrapMode WrapMode = InlineSamplerWrapMode.Clamp;
+ public InlineSamplerWrapCoordinates Coordinates = InlineSamplerWrapCoordinates.All;
+ public string InlineValue
+ {
+ get
+ {
+ string name = "_"+WrapMode.ToString();
+ if( Coordinates != InlineSamplerWrapCoordinates.All )
+ name += Coordinates.ToString();
+ name += "_";
+ return name;
+ }
+ }
+ }
+
+ [Serializable]
+ public class SamplerStateAutoGenerator
+ {
+ private const int MaxCount = 3;
+ private const float ButtonLayoutWidth = 15;
+ private const string AdditionalWrapsStr = "Additional Wraps";
+ private const string InlineSamplerStateStr = "Inline Sampler State";
+
+ [SerializeField]
+ private InlineSamplerFilteringMode m_filterMode = InlineSamplerFilteringMode.Point;
+
+ [SerializeField]
+ private InlineSamplerWrapOptions m_mainWrapMode = new InlineSamplerWrapOptions();
+
+ [SerializeField]
+ private List<InlineSamplerWrapOptions> m_additionalWrapOptions = new List<InlineSamplerWrapOptions>();
+
+ [SerializeField]
+ private bool m_visibleWrapsFoldout = false;
+
+ [SerializeField]
+ private bool m_visibleMainFoldout = false;
+
+ [NonSerialized]
+ private UndoParentNode m_owner;
+
+ public void Destroy()
+ {
+ m_mainWrapMode = null;
+ m_additionalWrapOptions.Clear();
+ m_additionalWrapOptions = null;
+ }
+
+ public string AddToDataCollector( ref MasterNodeDataCollector dataCollector )
+ {
+ string inlineSampler = "sampler_";
+
+ inlineSampler += m_filterMode.ToString();
+ inlineSampler += m_mainWrapMode.InlineValue;
+
+ int count = m_additionalWrapOptions.Count;
+ for( int i = 0; i < count; i++ )
+ {
+ inlineSampler += m_additionalWrapOptions[ i ].InlineValue;
+ }
+ return inlineSampler;
+ }
+
+ void DrawAddRemoveButtons()
+ {
+ int count = m_additionalWrapOptions.Count;
+ if( count < MaxCount && m_owner.GUILayoutButton( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ButtonLayoutWidth ) ) )
+ {
+ m_additionalWrapOptions.Add( new InlineSamplerWrapOptions() );
+ EditorGUI.FocusTextInControl( null );
+ }
+
+ if( count > 0 && m_owner.GUILayoutButton( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ButtonLayoutWidth ) ) )
+ {
+ m_additionalWrapOptions.RemoveAt( count - 1 );
+ EditorGUI.FocusTextInControl( null );
+ }
+ }
+
+ public void Draw( UndoParentNode owner )
+ {
+ m_owner = owner;
+ NodeUtils.DrawNestedPropertyGroup( ref m_visibleMainFoldout, InlineSamplerStateStr, DrawMain );
+ }
+
+ void DrawMain()
+ {
+ m_filterMode = (InlineSamplerFilteringMode)m_owner.EditorGUILayoutEnumPopup( m_filterMode );
+
+ EditorGUILayout.BeginHorizontal();
+ m_mainWrapMode.WrapMode = (InlineSamplerWrapMode)m_owner.EditorGUILayoutEnumPopup( m_mainWrapMode.WrapMode );
+ m_mainWrapMode.Coordinates = (InlineSamplerWrapCoordinates)m_owner.EditorGUILayoutEnumPopup( m_mainWrapMode.Coordinates );
+ EditorGUILayout.EndHorizontal();
+ NodeUtils.DrawNestedPropertyGroup( ref m_visibleWrapsFoldout, AdditionalWrapsStr, DrawAdditionalWrapModes, DrawAddRemoveButtons );
+ }
+
+ void DrawAdditionalWrapModes()
+ {
+ EditorGUILayout.Space();
+ int count = m_additionalWrapOptions.Count;
+ for( int i = 0; i < count; i++ )
+ {
+ float maxWidth = 90;
+ EditorGUILayout.BeginHorizontal();
+ m_additionalWrapOptions[ i ].WrapMode = (InlineSamplerWrapMode)m_owner.EditorGUILayoutEnumPopup( m_additionalWrapOptions[ i ].WrapMode ,GUILayout.MaxWidth( maxWidth ) );
+ m_additionalWrapOptions[ i ].Coordinates = (InlineSamplerWrapCoordinates)m_owner.EditorGUILayoutEnumPopup( m_additionalWrapOptions[ i ].Coordinates, GUILayout.MaxWidth( maxWidth ) );
+ EditorGUILayout.EndHorizontal();
+ }
+ }
+
+ public void ReadFromString( ref uint index, ref string[] nodeParams )
+ {
+#if UNITY_2019_3_OR_NEWER
+ Enum.TryParse<InlineSamplerFilteringMode>( nodeParams[ index++ ], out m_filterMode );
+ Enum.TryParse<InlineSamplerWrapCoordinates>( nodeParams[ index++ ], out m_mainWrapMode.Coordinates );
+
+ int count = 0;
+ int.TryParse( nodeParams[ index++ ], out count );
+ for( int i = 0; i < count; i++ )
+ {
+ InlineSamplerWrapOptions option = new InlineSamplerWrapOptions();
+
+ Enum.TryParse<InlineSamplerWrapMode>( nodeParams[ index++ ], out option.WrapMode );
+ Enum.TryParse<InlineSamplerWrapCoordinates>( nodeParams[ index++ ], out option.Coordinates );
+
+ m_additionalWrapOptions.Add( option );
+ }
+#else
+ m_filterMode =(InlineSamplerFilteringMode) Enum.Parse( typeof( InlineSamplerFilteringMode ), nodeParams[ index++ ] );
+ m_mainWrapMode.Coordinates = (InlineSamplerWrapCoordinates)Enum.Parse( typeof( InlineSamplerWrapCoordinates ),nodeParams[ index++ ] );
+
+ int count = 0;
+ int.TryParse( nodeParams[ index++ ], out count );
+ for( int i = 0; i < count; i++ )
+ {
+ InlineSamplerWrapOptions option = new InlineSamplerWrapOptions();
+
+ option.WrapMode = ( InlineSamplerWrapMode)Enum.Parse(typeof( InlineSamplerWrapMode ), nodeParams[ index++ ] );
+ option.Coordinates = ( InlineSamplerWrapCoordinates)Enum.Parse(typeof( InlineSamplerWrapCoordinates ), nodeParams[ index++ ] );
+
+ m_additionalWrapOptions.Add( option );
+ }
+#endif
+
+ }
+
+ public void WriteToString( ref string nodeInfo )
+ {
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_filterMode );
+
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_mainWrapMode.WrapMode );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_mainWrapMode.Coordinates );
+
+ int count = m_additionalWrapOptions.Count;
+ IOUtils.AddFieldValueToString( ref nodeInfo, count );
+ if( count > 0 )
+ {
+ for( int i = 0; i < count; i++ )
+ {
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_additionalWrapOptions[i].WrapMode );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_additionalWrapOptions[i].Coordinates );
+ }
+ }
+
+ }
+ }
+}