123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- // 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 )
- {
- 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 );
- }
- }
- 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 );
- }
- }
- }
- }
- }
|