| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 | 
							- using System;
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- using UnityEditor;
 
- namespace AmplifyShaderEditor
 
- {
 
- 	public enum ZWriteMode
 
- 	{
 
- 		On,
 
- 		Off
 
- 	}
 
- 	public enum ZTestMode
 
- 	{
 
- 		Less,
 
- 		Greater,
 
- 		LEqual,
 
- 		GEqual,
 
- 		Equal,
 
- 		NotEqual,
 
- 		Always
 
- 	}
 
- 	[Serializable]
 
- 	class ZBufferOpHelper
 
- 	{
 
- 		public static readonly string DepthParametersStr = " Depth";
 
- 		public static readonly string ZWriteModeStr = "ZWrite Mode";
 
- 		public static readonly string ZTestModeStr = "ZTest Mode";
 
- 		public static readonly string OffsetStr = "Offset";
 
- 		public static readonly string OffsetFactorStr = "Factor";
 
- 		public static readonly string OffsetUnitsStr = "Units";
 
- 		private const string ExtraDepthPassStr = "Extra Depth Pass";
 
- 		private const string DepthZTestStr = "Depth ZTest";
 
- 		public static readonly string[] ZTestModeLabels =
 
- 		{
 
- 			"<Default>",
 
- 			"Less",
 
- 			"Greater",
 
- 			"Less or Equal",
 
- 			"Greater or Equal",
 
- 			"Equal",
 
- 			"Not Equal",
 
- 			"Always"
 
- 		};
 
- 		public static readonly string[] ZTestModeValues =
 
- 		{
 
- 			"<Default>",
 
- 			"Less",
 
- 			"Greater",
 
- 			"LEqual",
 
- 			"GEqual",
 
- 			"Equal",
 
- 			"NotEqual",
 
- 			"Always"
 
- 		};
 
- 		public static readonly string[] ZWriteModeValues =
 
- 		{
 
- 			"<Default>",
 
- 			"On",
 
- 			"Off"
 
- 		};
 
- 		public static readonly Dictionary<ZTestMode, int> ZTestModeDict = new Dictionary<ZTestMode, int>
 
- 		{
 
- 			{ZTestMode.Less,1 },
 
- 			{ZTestMode.Greater,2},
 
- 			{ZTestMode.LEqual,3},
 
- 			{ZTestMode.GEqual,4},
 
- 			{ZTestMode.Equal,5},
 
- 			{ZTestMode.NotEqual,6},
 
- 			{ZTestMode.Always,7}
 
- 		};
 
- 		public static readonly Dictionary<ZWriteMode, int> ZWriteModeDict = new Dictionary<ZWriteMode, int>
 
- 		{
 
- 			{ ZWriteMode.On,1},
 
- 			{ ZWriteMode.Off,2}
 
- 		};
 
- 		[SerializeField]
 
- 		private InlineProperty m_zTestMode = new InlineProperty();
 
- 		[SerializeField]
 
- 		private InlineProperty m_zWriteMode = new InlineProperty();
 
- 		[SerializeField]
 
- 		private InlineProperty m_offsetFactor = new InlineProperty();
 
- 		[SerializeField]
 
- 		private InlineProperty m_offsetUnits = new InlineProperty();
 
- 		[SerializeField]
 
- 		private bool m_offsetEnabled;
 
- 		[SerializeField]
 
- 		private bool m_extraDepthPass;
 
- 		[SerializeField]
 
- 		private int m_extrazTestMode = 0;
 
- 		[SerializeField]
 
- 		private StandardSurfaceOutputNode m_parentSurface;
 
- 		public string CreateDepthInfo( bool outlineZWrite, bool outlineZTest )
 
- 		{
 
- 			string result = string.Empty;
 
- 			if( m_zWriteMode.IntValue != 0 || m_zWriteMode.Active )
 
- 			{
 
- 				MasterNode.AddRenderState( ref result, "ZWrite", m_zWriteMode.GetValueOrProperty( ZWriteModeValues[ m_zWriteMode.IntValue ] ) );
 
- 			}
 
- 			else if( outlineZWrite )
 
- 			{
 
- 				MasterNode.AddRenderState( ref result, "ZWrite", ZWriteModeValues[ 1 ] );
 
- 			}
 
- 			if( m_zTestMode.IntValue != 0 || m_zTestMode.Active )
 
- 			{
 
- 				MasterNode.AddRenderState( ref result, "ZTest", m_zTestMode.GetValueOrProperty( ZTestModeValues[ m_zTestMode.IntValue ] ) );
 
- 			}
 
- 			else if( outlineZTest )
 
- 			{
 
- 				MasterNode.AddRenderState( ref result, "ZTest", ZTestModeValues[ 3 ] );
 
- 			}
 
- 			if( m_offsetEnabled )
 
- 			{
 
- 				MasterNode.AddRenderState( ref result, "Offset ", m_offsetFactor.GetValueOrProperty() + " , " + m_offsetUnits.GetValueOrProperty() );
 
- 			}
 
- 			return result;
 
- 		}
 
- 		public void Draw( UndoParentNode owner, GUIStyle toolbarstyle, bool customBlendAvailable )
 
- 		{
 
- 			Color cachedColor = GUI.color;
 
- 			GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, 0.5f );
 
- 			EditorGUILayout.BeginHorizontal( toolbarstyle );
 
- 			GUI.color = cachedColor;
 
- 			EditorGUI.BeginChangeCheck();
 
- 			m_parentSurface.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDepth = owner.GUILayoutToggle( m_parentSurface.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDepth, DepthParametersStr, UIUtils.MenuItemToggleStyle );
 
- 			if( EditorGUI.EndChangeCheck() )
 
- 			{
 
- 				EditorPrefs.SetBool( "ExpandedDepth", m_parentSurface.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDepth );
 
- 			}
 
- 			EditorGUILayout.EndHorizontal();
 
- 			if( m_parentSurface.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDepth )
 
- 			{
 
- 				cachedColor = GUI.color;
 
- 				GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, ( EditorGUIUtility.isProSkin ? 0.5f : 0.25f ) );
 
- 				EditorGUILayout.BeginVertical( UIUtils.MenuItemBackgroundStyle );
 
- 				GUI.color = cachedColor;
 
- 				EditorGUI.indentLevel++;
 
- 				if( !customBlendAvailable )
 
- 					EditorGUILayout.HelpBox( "Depth Writing is only available for Opaque or Custom blend modes", MessageType.Warning );
 
- 				EditorGUILayout.Separator();
 
- 				EditorGUI.BeginDisabledGroup( !customBlendAvailable );
 
- 				m_zWriteMode.EnumTypePopup( ref owner, ZWriteModeStr, ZWriteModeValues );
 
- 				m_zTestMode.EnumTypePopup( ref owner, ZTestModeStr, ZTestModeLabels );
 
- 				//m_zWriteMode = owner.EditorGUILayoutPopup( ZWriteModeStr, m_zWriteMode, ZWriteModeValues );
 
- 				//m_zTestMode = owner.EditorGUILayoutPopup( ZTestModeStr, m_zTestMode, ZTestModeLabels );
 
- 				m_offsetEnabled = owner.EditorGUILayoutToggle( OffsetStr, m_offsetEnabled );
 
- 				if( m_offsetEnabled )
 
- 				{
 
- 					EditorGUI.indentLevel++;
 
- 					m_offsetFactor.FloatField( ref owner , OffsetFactorStr );
 
- 					m_offsetUnits.FloatField( ref owner , OffsetUnitsStr );
 
- 					EditorGUI.indentLevel--;
 
- 				}
 
- 				m_extraDepthPass = owner.EditorGUILayoutToggle( ExtraDepthPassStr, m_extraDepthPass );
 
- 				if( m_extraDepthPass )
 
- 				{
 
- 					EditorGUI.indentLevel++;
 
- 					m_extrazTestMode = owner.EditorGUILayoutPopup( DepthZTestStr, m_extrazTestMode, ZTestModeLabels );
 
- 					EditorGUI.indentLevel--;
 
- 				}
 
- 				EditorGUILayout.Separator();
 
- 				EditorGUI.indentLevel--;
 
- 				EditorGUI.EndDisabledGroup();
 
- 				EditorGUILayout.EndVertical();
 
- 			}
 
- 			EditorGUI.EndDisabledGroup();
 
- 		}
 
- 		public void DrawExtraDepthPass( ref string shaderBody )
 
- 		{
 
- 			if( m_extraDepthPass )
 
- 			{
 
- 				shaderBody += "\t\tPass\n";
 
- 				shaderBody += "\t\t{\n";
 
- 				shaderBody += "\t\t\tColorMask 0\n";
 
- 				if( m_extrazTestMode != 0 )
 
- 					shaderBody += "\t\t\tZTest " + ZTestModeValues[ m_extrazTestMode ] + "\n";
 
- 				shaderBody += "\t\t\tZWrite On\n";
 
- 				shaderBody += "\t\t}\n\n";
 
- 			}
 
- 		}
 
- 		public void ReadFromString( ref uint index, ref string[] nodeParams )
 
- 		{
 
- 			if( UIUtils.CurrentShaderVersion() < 2502 )
 
- 			{
 
- 				string zWriteMode = nodeParams[ index++ ];
 
- 				m_zWriteMode.IntValue = zWriteMode.Equals( "Off" ) ? 2 : 0;
 
- 				string zTestMode = nodeParams[ index++ ];
 
- 				for( int i = 0; i < ZTestModeValues.Length; i++ )
 
- 				{
 
- 					if( zTestMode.Equals( ZTestModeValues[ i ] ) )
 
- 					{
 
- 						m_zTestMode.IntValue = i;
 
- 						break;
 
- 					}
 
- 				}
 
- 			}
 
- 			else
 
- 			{
 
- 				if( UIUtils.CurrentShaderVersion() > 14501 )
 
- 				{
 
- 					m_zWriteMode.ReadFromString( ref index, ref nodeParams );
 
- 					m_zTestMode.ReadFromString( ref index, ref nodeParams );
 
- 				}
 
- 				else
 
- 				{
 
- 					m_zWriteMode.IntValue = Convert.ToInt32( nodeParams[ index++ ] );
 
- 					m_zTestMode.IntValue = Convert.ToInt32( nodeParams[ index++ ] );
 
- 				}
 
- 				m_offsetEnabled = Convert.ToBoolean( nodeParams[ index++ ] );
 
- 				if( UIUtils.CurrentShaderVersion() > 15303 )
 
- 				{
 
- 					m_offsetFactor.ReadFromString( ref index , ref nodeParams , false );
 
- 					m_offsetUnits.ReadFromString( ref index, ref nodeParams , false );
 
- 				}
 
- 				else
 
- 				{
 
- 					m_offsetFactor.FloatValue = Convert.ToSingle( nodeParams[ index++ ] );
 
- 					m_offsetUnits.FloatValue = Convert.ToSingle( nodeParams[ index++ ] );
 
- 				}
 
- 				if( UIUtils.CurrentShaderVersion() > 14202 )
 
- 				{
 
- 					m_extraDepthPass = Convert.ToBoolean( nodeParams[ index++ ] );
 
- 					m_extrazTestMode = Convert.ToInt32( nodeParams[ index++ ] );
 
- 				}
 
- 			}
 
- 		}
 
- 		public void WriteToString( ref string nodeInfo )
 
- 		{
 
- 			m_zWriteMode.WriteToString( ref nodeInfo );
 
- 			m_zTestMode.WriteToString( ref nodeInfo );
 
- 			IOUtils.AddFieldValueToString( ref nodeInfo, m_offsetEnabled );
 
- 			m_offsetFactor.WriteToString( ref nodeInfo );
 
- 			m_offsetUnits.WriteToString( ref nodeInfo );
 
- 			IOUtils.AddFieldValueToString( ref nodeInfo, m_extraDepthPass );
 
- 			IOUtils.AddFieldValueToString( ref nodeInfo, m_extrazTestMode );
 
- 		}
 
- 		public bool IsActive { get { return m_zTestMode.IntValue != 0 || m_zWriteMode.IntValue != 0 || m_offsetEnabled || m_zTestMode.Active || m_zWriteMode.Active; } }
 
- 		public StandardSurfaceOutputNode ParentSurface { get { return m_parentSurface; } set { m_parentSurface = value; } }
 
- 	}
 
- }
 
 
  |