summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ZBufferOpHelper.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-10-23 13:08:43 +0800
committerchai <chaifix@163.com>2020-10-23 13:08:43 +0800
commitb82da95b5181ac8bbae38efb13e950d5e88a4caa (patch)
tree48a6f3269276484bbc7cfc95f0651f40a2176aa1 /Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ZBufferOpHelper.cs
parent917e9e0b320775634dc2e710f7deac74fd0822f0 (diff)
*移动amplify shader editor到third party目录
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ZBufferOpHelper.cs')
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ZBufferOpHelper.cs272
1 files changed, 272 insertions, 0 deletions
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ZBufferOpHelper.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ZBufferOpHelper.cs
new file mode 100644
index 00000000..d09b8c04
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/ZBufferOpHelper.cs
@@ -0,0 +1,272 @@
+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 );
+ m_offsetUnits.ReadFromString( ref index, ref nodeParams );
+ }
+ 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; } }
+ }
+}