|
|
- // Amplify Shader Editor - Visual Shader Editing Tool
- // Copyright (c) Amplify Creations, Lda <info@amplify.pt>
-
- using UnityEngine;
- using UnityEditor;
- using System;
-
- namespace AmplifyShaderEditor
- {
- public enum TexturePropertyValues
- {
- white,
- black,
- gray,
- bump
- }
-
- public enum TextureType
- {
- Texture1D,
- Texture2D,
- Texture3D,
- Cube,
- Texture2DArray,
- ProceduralTexture
- }
-
- public enum AutoCastType
- {
- Auto = 0,
- LockedToTexture1D,
- LockedToTexture2D,
- LockedToTexture3D,
- LockedToCube,
- LockedToTexture2DArray
- }
-
-
- [Serializable]
- [NodeAttributes( "Texture Object", "Textures", "Represents a Texture Asset. Can be used in samplers <b>Tex</b> inputs or shader function inputs to reuse the same texture multiple times.", SortOrderPriority = 1 )]
- public class TexturePropertyNode : PropertyNode
- {
- private const string ObjectSelectorCmdStr = "ObjectSelectorClosed";
-
- protected readonly string[] AvailablePropertyTypeLabels = { PropertyType.Property.ToString(), PropertyType.Global.ToString() };
- protected readonly int[] AvailablePropertyTypeValues = { (int)PropertyType.Property, (int)PropertyType.Global };
-
- protected const int OriginalFontSizeUpper = 9;
- protected const int OriginalFontSizeLower = 9;
-
- protected const string DefaultTextureStr = "Default Texture";
- protected const string AutoCastModeStr = "Auto-Cast Mode";
-
- protected const string AutoUnpackNormalsStr = "Normal";
-
- [SerializeField]
- protected Texture m_defaultValue;
-
- [SerializeField]
- protected Texture m_materialValue;
-
- [SerializeField]
- protected TexturePropertyValues m_defaultTextureValue;
-
- [SerializeField]
- protected bool m_isNormalMap;
-
- [SerializeField]
- protected System.Type m_textureType = typeof( Texture2D );
-
- //[SerializeField]
- //protected bool m_isTextureFetched;
-
- //[SerializeField]
- //protected string m_textureFetchedValue;
-
- [SerializeField]
- protected TextureType m_currentType = TextureType.Texture2D;
-
- [SerializeField]
- protected AutoCastType m_autocastMode = AutoCastType.Auto;
-
- protected int PreviewSizeX = 128;
- protected int PreviewSizeY = 128;
-
- protected bool m_linearTexture;
-
- protected TexturePropertyNode m_textureProperty = null;
-
- protected bool m_drawPicker;
-
- protected bool m_drawAutocast = true;
-
- protected int m_cachedSamplerId = -1;
- protected int m_cachedSamplerIdArray = -1;
- protected int m_cachedSamplerIdCube = -1;
- protected int m_cachedSamplerId3D = -1;
- protected int m_defaultId = -1;
- protected int m_typeId = -1;
-
- private TextureType m_previousType = TextureType.Texture2D;
- private string m_labelText = "None (Texture2D)";
-
- protected bool m_isEditingPicker;
-
- public TexturePropertyNode() : base() { }
- public TexturePropertyNode( int uniqueId, float x, float y, float width, float height ) : base( uniqueId, x, y, width, height ) { }
- protected override void CommonInit( int uniqueId )
- {
- base.CommonInit( uniqueId );
- GlobalTypeWarningText = string.Format( GlobalTypeWarningText, "Texture" );
- m_defaultTextureValue = TexturePropertyValues.white;
- m_insideSize.Set( PreviewSizeX, PreviewSizeY + 5 );
- AddOutputPort( WirePortDataType.SAMPLER2D, "Tex" );
- m_outputPorts[ 0 ].CreatePortRestrictions( WirePortDataType.SAMPLER1D, WirePortDataType.SAMPLER2D, WirePortDataType.SAMPLER3D, WirePortDataType.SAMPLERCUBE, WirePortDataType.OBJECT );
- m_currentParameterType = PropertyType.Property;
- m_customPrefix = "Texture ";
- m_drawPrecisionUI = false;
- m_showVariableMode = true;
- m_freeType = false;
- m_drawPicker = true;
- m_hasLeftDropdown = true;
- m_textLabelWidth = 115;
- m_longNameSize = 225;
- m_availableAttribs.Add( new PropertyAttributes( "No Scale Offset", "[NoScaleOffset]" ) );
- m_availableAttribs.Add( new PropertyAttributes( "Normal", "[Normal]" ) );
- m_showPreview = true;
- m_drawPreviewExpander = false;
- m_drawPreview = false;
- m_drawPreviewMaskButtons = false;
- m_previewShaderGUID = "e53988745ec6e034694ee2640cd3d372";
- }
-
- public override void AfterCommonInit()
- {
- base.AfterCommonInit();
- m_hasLeftDropdown = true;
- }
-
- protected void SetPreviewTexture( Texture newValue )
- {
- if( newValue is Cubemap )
- {
- PreviewMaterial.SetInt( m_typeId, 3 );
-
- if( m_cachedSamplerIdCube == -1 )
- m_cachedSamplerIdCube = Shader.PropertyToID( "_Cube" );
-
- PreviewMaterial.SetTexture( m_cachedSamplerIdCube, newValue as Cubemap );
- }
- else if( newValue is Texture2DArray )
- {
- PreviewMaterial.SetInt( m_typeId, 4 );
-
- if( m_cachedSamplerIdArray == -1 )
- m_cachedSamplerIdArray = Shader.PropertyToID( "_Array" );
-
- PreviewMaterial.SetTexture( m_cachedSamplerIdArray, newValue as Texture2DArray );
- }
- else if( newValue is Texture3D )
- {
- PreviewMaterial.SetInt( m_typeId, 2 );
-
- if( m_cachedSamplerId3D == -1 )
- m_cachedSamplerId3D = Shader.PropertyToID( "_Sampler3D" );
-
- PreviewMaterial.SetTexture( m_cachedSamplerId3D, newValue as Texture3D );
- }
- else
- {
- PreviewMaterial.SetInt( m_typeId, 1 );
-
- if( m_cachedSamplerId == -1 )
- m_cachedSamplerId = Shader.PropertyToID( "_Sampler" );
-
- PreviewMaterial.SetTexture( m_cachedSamplerId, newValue );
- }
- }
-
- public override void SetPreviewInputs()
- {
- base.SetPreviewInputs();
-
- if( Value == null )
- {
- if( m_defaultId == -1 )
- m_defaultId = Shader.PropertyToID( "_Default" );
-
- PreviewMaterial.SetInt( m_defaultId, ( (int)m_defaultTextureValue ) + 1 );
- }
- else
- {
- if( m_defaultId == -1 )
- m_defaultId = Shader.PropertyToID( "_Default" );
-
- PreviewMaterial.SetInt( m_defaultId, 0 );
-
- if( m_typeId == -1 )
- m_typeId = Shader.PropertyToID( "_Type" );
-
- SetPreviewTexture( Value );
- //if( Value is Cubemap )
- //{
- // PreviewMaterial.SetInt( m_typeId, 3 );
-
- // if( m_cachedSamplerIdCube == -1 )
- // m_cachedSamplerIdCube = Shader.PropertyToID( "_Cube" );
-
- // PreviewMaterial.SetTexture( m_cachedSamplerIdCube, Value as Cubemap );
- //}
- //else if( Value is Texture2DArray )
- //{
- // PreviewMaterial.SetInt( m_typeId, 4 );
-
- // if( m_cachedSamplerIdArray == -1 )
- // m_cachedSamplerIdArray = Shader.PropertyToID( "_Array" );
-
- // PreviewMaterial.SetTexture( m_cachedSamplerIdArray, Value as Texture2DArray );
- //}
- //else if( Value is Texture3D )
- //{
- // PreviewMaterial.SetInt( m_typeId, 2 );
-
- // if( m_cachedSamplerId3D == -1 )
- // m_cachedSamplerId3D = Shader.PropertyToID( "_Sampler3D" );
-
- // PreviewMaterial.SetTexture( m_cachedSamplerId3D, Value as Texture3D );
- //}
- //else
- //{
- // PreviewMaterial.SetInt( m_typeId, 1 );
-
- // if( m_cachedSamplerId == -1 )
- // m_cachedSamplerId = Shader.PropertyToID( "_Sampler" );
-
- // PreviewMaterial.SetTexture( m_cachedSamplerId, Value );
- //}
- }
- }
-
- protected override void OnUniqueIDAssigned()
- {
- base.OnUniqueIDAssigned();
- m_textureProperty = this;
- UIUtils.RegisterPropertyNode( this );
- UIUtils.RegisterTexturePropertyNode( this );
- }
-
- protected void ConfigTextureData( TextureType type )
- {
- switch( m_autocastMode )
- {
- case AutoCastType.Auto:
- {
- m_currentType = type;
- }
- break;
- case AutoCastType.LockedToTexture1D:
- {
- m_currentType = TextureType.Texture1D;
- }
- break;
- case AutoCastType.LockedToTexture2DArray:
- {
- m_currentType = TextureType.Texture2DArray;
- }
- break;
- case AutoCastType.LockedToTexture2D:
- {
- m_currentType = TextureType.Texture2D;
- }
- break;
- case AutoCastType.LockedToTexture3D:
- {
- m_currentType = TextureType.Texture3D;
- }
- break;
- case AutoCastType.LockedToCube:
- {
- m_currentType = TextureType.Cube;
- }
- break;
- }
-
- ConfigTextureType();
- }
-
- protected void ConfigTextureType()
- {
- switch( m_currentType )
- {
- case TextureType.Texture1D:
- {
- m_textureType = typeof( Texture );
- }
- break;
- case TextureType.Texture2DArray:
- {
- m_textureType = typeof( Texture2DArray );
- }
- break;
- case TextureType.Texture2D:
- {
- m_textureType = typeof( Texture2D );
- }
- break;
- case TextureType.Texture3D:
- {
- m_textureType = typeof( Texture3D );
- }
- break;
- case TextureType.Cube:
- {
- m_textureType = typeof( Cubemap );
- }
- break;
- #if !UNITY_2018_1_OR_NEWER
- // Disabling Substance Deprecated warning
- #pragma warning disable 0618
- case TextureType.ProceduralTexture:
- {
- m_textureType = typeof( ProceduralTexture );
- }
- break;
- #pragma warning restore 0618
- #endif
-
- }
- }
-
- protected void DrawTexturePropertyType()
- {
- PropertyType parameterType = (PropertyType)EditorGUILayoutIntPopup( ParameterTypeStr, (int)m_currentParameterType, AvailablePropertyTypeLabels, AvailablePropertyTypeValues );
- if( parameterType != m_currentParameterType )
- {
- ChangeParameterType( parameterType );
- }
- }
-
- // Texture1D
- public string GetTexture1DPropertyValue()
- {
- return PropertyName + "(\"" + m_propertyInspectorName + "\", 2D) = \"" + m_defaultTextureValue + "\" {}";
- }
-
- public string GetTexture1DUniformValue()
- {
- return "uniform sampler1D " + PropertyName + ";";
- }
-
- // Texture2D
- public string GetTexture2DPropertyValue()
- {
- return PropertyName + "(\"" + m_propertyInspectorName + "\", 2D) = \"" + m_defaultTextureValue + "\" {}";
- }
-
- public string GetTexture2DUniformValue()
- {
- return "uniform sampler2D " + PropertyName + ";";
- }
-
- //Texture3D
- public string GetTexture3DPropertyValue()
- {
- return PropertyName + "(\"" + m_propertyInspectorName + "\", 3D) = \"" + m_defaultTextureValue + "\" {}";
- }
-
- public string GetTexture3DUniformValue()
- {
- return "uniform sampler3D " + PropertyName + ";";
- }
-
- // Cube
- public string GetCubePropertyValue()
- {
- return PropertyName + "(\"" + m_propertyInspectorName + "\", CUBE) = \"" + m_defaultTextureValue + "\" {}";
- }
-
- public string GetCubeUniformValue()
- {
- return "uniform samplerCUBE " + PropertyName + ";";
- }
-
- // Texture2DArray
- public string GetTexture2DArrayPropertyValue()
- {
- return PropertyName + "(\"" + m_propertyInspectorName + "\", 2DArray) = \"" + m_defaultTextureValue + "\" {}";
- }
-
- public string GetTexture2DArrayUniformValue()
- {
- return "uniform TEXTURE2D_ARRAY( " + PropertyName + " );" + "\nuniform SAMPLER( sampler" + PropertyName + " );";
- }
-
- public override void DrawMainPropertyBlock()
- {
- DrawTexturePropertyType();
- base.DrawMainPropertyBlock();
- }
-
- public override void DrawSubProperties()
- {
- ShowDefaults();
- EditorGUI.BeginChangeCheck();
- Type currType = ( m_autocastMode == AutoCastType.Auto ) ? typeof( Texture ) : m_textureType;
- m_defaultValue = EditorGUILayoutObjectField( Constants.DefaultValueLabel, m_defaultValue, currType, false ) as Texture;
- if( EditorGUI.EndChangeCheck() )
- {
- CheckTextureImporter( true );
- SetAdditonalTitleText( string.Format( Constants.PropertyValueLabel, GetPropertyValStr() ) );
- }
- }
-
- public override void DrawMaterialProperties()
- {
- ShowDefaults();
-
- EditorGUI.BeginChangeCheck();
- Type currType = ( m_autocastMode == AutoCastType.Auto ) ? typeof( Texture ) : m_textureType;
- m_materialValue = EditorGUILayoutObjectField( Constants.MaterialValueLabel, m_materialValue, currType, false ) as Texture;
- if( EditorGUI.EndChangeCheck() )
- {
- CheckTextureImporter( true );
- SetAdditonalTitleText( string.Format( Constants.PropertyValueLabel, GetPropertyValStr() ) );
- }
- }
-
- new void ShowDefaults()
- {
- m_defaultTextureValue = (TexturePropertyValues)EditorGUILayoutEnumPopup( DefaultTextureStr, m_defaultTextureValue );
-
- if( !m_drawAutocast )
- return;
-
- AutoCastType newAutoCast = (AutoCastType)EditorGUILayoutEnumPopup( AutoCastModeStr, m_autocastMode );
- if( newAutoCast != m_autocastMode )
- {
- m_autocastMode = newAutoCast;
- if( m_autocastMode != AutoCastType.Auto )
- {
- ConfigTextureData( m_currentType );
- ConfigureInputPorts();
- ConfigureOutputPorts();
- }
- }
- }
-
- private void ConfigurePortsFromReference()
- {
- m_sizeIsDirty = true;
- }
-
- public virtual void ConfigureOutputPorts()
- {
- switch( m_currentType )
- {
- case TextureType.Texture1D:
- m_outputPorts[ 0 ].ChangeType( WirePortDataType.SAMPLER1D, false );
- break;
- case TextureType.ProceduralTexture:
- case TextureType.Texture2D:
- m_outputPorts[ 0 ].ChangeType( WirePortDataType.SAMPLER2D, false );
- break;
- case TextureType.Texture3D:
- m_outputPorts[ 0 ].ChangeType( WirePortDataType.SAMPLER3D, false );
- break;
- case TextureType.Cube:
- m_outputPorts[ 0 ].ChangeType( WirePortDataType.SAMPLERCUBE, false );
- break;
- case TextureType.Texture2DArray:
- m_outputPorts[ 0 ].ChangeType( WirePortDataType.SAMPLER2D, false );
- break;
- }
-
- m_sizeIsDirty = true;
- }
-
- public virtual void ConfigureInputPorts()
- {
- }
-
- public virtual void AdditionalCheck()
- {
- }
-
- public virtual void CheckTextureImporter( bool additionalCheck, bool writeDefault = true )
- {
- m_requireMaterialUpdate = true;
- Texture texture = m_materialMode ? m_materialValue : m_defaultValue;
- TextureImporter importer = AssetImporter.GetAtPath( AssetDatabase.GetAssetPath( texture ) ) as TextureImporter;
- if( importer != null )
- {
-
- #if UNITY_5_5_OR_NEWER
- m_isNormalMap = importer.textureType == TextureImporterType.NormalMap;
- #else
- m_isNormalMap = importer.normalmap;
- #endif
- if( writeDefault && !UIUtils.IsLoading )
- {
- if( m_defaultTextureValue == TexturePropertyValues.bump && !m_isNormalMap )
- m_defaultTextureValue = TexturePropertyValues.white;
- else if( m_isNormalMap )
- m_defaultTextureValue = TexturePropertyValues.bump;
- }
-
- if( additionalCheck )
- AdditionalCheck();
- m_linearTexture = !importer.sRGBTexture;
- }
-
- if( ( texture as Texture2DArray ) != null )
- {
- ConfigTextureData( TextureType.Texture2DArray );
- }
- else if( ( texture as Texture2D ) != null )
- {
- ConfigTextureData( TextureType.Texture2D );
- }
- else if( ( texture as Texture3D ) != null )
- {
- ConfigTextureData( TextureType.Texture3D );
- }
- else if( ( texture as Cubemap ) != null )
- {
- ConfigTextureData( TextureType.Cube );
- }
- #if !UNITY_2018_1_OR_NEWER
- // Disabling Substance Deprecated warning
- #pragma warning disable 0618
- else if( ( texture as ProceduralTexture ) != null )
- {
- ConfigTextureData( TextureType.ProceduralTexture );
- }
- #pragma warning restore 0618
- #endif
-
- ConfigureInputPorts();
- ConfigureOutputPorts();
- }
-
- public override void OnObjectDropped( UnityEngine.Object obj )
- {
- base.OnObjectDropped( obj );
- ConfigFromObject( obj );
- }
-
- public override void SetupFromCastObject( UnityEngine.Object obj )
- {
- base.SetupFromCastObject( obj );
- ConfigFromObject( obj );
- }
-
- protected void ConfigFromObject( UnityEngine.Object obj, bool writeDefault = true, bool additionalCheck = true )
- {
- Texture texture = obj as Texture;
- if( texture )
- {
- m_materialValue = texture;
- m_defaultValue = texture;
- CheckTextureImporter( additionalCheck, writeDefault );
- }
- }
-
-
-
- public override void DrawGUIControls( DrawInfo drawInfo )
- {
- base.DrawGUIControls( drawInfo );
-
- if( !( drawInfo.CurrentEventType == EventType.MouseDown || drawInfo.CurrentEventType == EventType.MouseUp || drawInfo.CurrentEventType == EventType.ExecuteCommand || drawInfo.CurrentEventType == EventType.DragPerform ) )
- return;
-
- bool insideBox = m_previewRect.Contains( drawInfo.MousePosition );
-
- bool closePicker = false;
- if( insideBox )
- {
- m_isEditingPicker = true;
- }
- else if( m_isEditingPicker && !insideBox && drawInfo.CurrentEventType != EventType.ExecuteCommand )
- {
- closePicker = true;
- }
-
- if( m_isEditingPicker && drawInfo.CurrentEventType == EventType.ExecuteCommand &&
- Event.current.commandName.Equals( ObjectSelectorCmdStr ) )
- {
- closePicker = true;
- }
-
- if( closePicker )
- {
- GUI.FocusControl( null );
- m_isEditingPicker = false;
- }
-
- }
-
- public override void OnNodeLayout( DrawInfo drawInfo )
- {
- base.OnNodeLayout( drawInfo );
- ConfigTextureType();
- }
-
- public override void Draw( DrawInfo drawInfo )
- {
- base.Draw( drawInfo );
- if( m_dropdownEditing )
- {
- PropertyType parameterType = (PropertyType)EditorGUIIntPopup( m_dropdownRect,(int)m_currentParameterType, AvailablePropertyTypeLabels, AvailablePropertyTypeValues , UIUtils.PropertyPopUp );
- if( parameterType != m_currentParameterType )
- {
- ChangeParameterType( parameterType );
- m_dropdownEditing = false;
- }
- }
-
- if( m_isEditingPicker && m_drawPicker && m_currentParameterType != PropertyType.Global)
- {
- Rect hitRect = m_previewRect;
- hitRect.height = 14 * drawInfo.InvertedZoom;
- hitRect.y = m_previewRect.yMax - hitRect.height;
- hitRect.width = 4 * 14 * drawInfo.InvertedZoom;
-
- bool restoreMouse = false;
- if( Event.current.type == EventType.MouseDown && hitRect.Contains( drawInfo.MousePosition ) )
- {
- restoreMouse = true;
- Event.current.type = EventType.Ignore;
- }
-
- EditorGUI.BeginChangeCheck();
- m_colorBuffer = GUI.color;
- GUI.color = Color.clear;
- Type currType = ( m_autocastMode == AutoCastType.Auto ) ? typeof( Texture ) : m_textureType;
- if( m_materialMode )
- {
- m_materialValue = EditorGUIObjectField( m_previewRect, m_materialValue, currType, false ) as Texture;
- }
- else
- {
- m_defaultValue = EditorGUIObjectField( m_previewRect, m_defaultValue, currType, false ) as Texture;
- }
- GUI.color = m_colorBuffer;
-
- if( EditorGUI.EndChangeCheck() )
- {
- CheckTextureImporter( true );
- SetTitleText( m_propertyInspectorName );
- SetAdditonalTitleText( string.Format( Constants.PropertyValueLabel, GetPropertyValStr() ) );
- ConfigureInputPorts();
- ConfigureOutputPorts();
- BeginDelayedDirtyProperty();
- }
- //else if( drawInfo.CurrentEventType == EventType.ExecuteCommand )
- //{
- // GUI.FocusControl( null );
- // m_isEditingPicker = false;
- //}
-
- if( restoreMouse )
- {
- Event.current.type = EventType.MouseDown;
- }
-
- if( ( drawInfo.CurrentEventType == EventType.MouseDown || drawInfo.CurrentEventType == EventType.MouseUp ) )
- DrawPreviewMaskButtonsLayout( drawInfo, m_previewRect );
- }
-
- if( !m_drawPicker )
- return;
-
- if( drawInfo.CurrentEventType == EventType.Repaint )
- {
- DrawTexturePicker( drawInfo );
- }
- }
-
-
-
- protected void DrawTexturePicker( DrawInfo drawInfo )
- {
- Rect newRect = m_previewRect;
- Texture currentValue = m_materialMode ? m_materialValue : m_defaultValue;
-
- //???
- //m_showPreview = true;
- bool showButtons = m_currentParameterType != PropertyType.Global;
-
- if( currentValue == null )
- GUI.Label( newRect, string.Empty, UIUtils.ObjectFieldThumb );
- else
- DrawPreview( drawInfo, m_previewRect );
-
- if( ContainerGraph.LodLevel <= ParentGraph.NodeLOD.LOD2 )
- {
- Rect butRect = m_previewRect;
- butRect.y -= 1;
- butRect.x += 1;
-
- Rect smallButton = newRect;
- smallButton.height = 14 * drawInfo.InvertedZoom;
- smallButton.y = newRect.yMax - smallButton.height - 2;
- smallButton.width = 40 * drawInfo.InvertedZoom;
- smallButton.x = newRect.xMax - smallButton.width - 2;
- if( currentValue == null )
- {
- if( m_previousType != m_currentType )
- {
- m_previousType = m_currentType;
- m_labelText = "None (" + m_currentType.ToString() + ")";
- }
-
- GUI.Label( newRect, m_labelText, UIUtils.ObjectFieldThumbOverlay );
- }
- else if( showButtons )
- {
- DrawPreviewMaskButtonsRepaint( drawInfo, butRect );
- }
-
- if( showButtons )
- GUI.Label( smallButton, "Select", UIUtils.GetCustomStyle( CustomStyle.SamplerButton ) );
- }
-
- GUI.Label( newRect, string.Empty, UIUtils.GetCustomStyle( CustomStyle.SamplerFrame ) );
- }
-
- public string BaseGenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalVar )
- {
- base.GenerateShaderForOutput( outputId, ref dataCollector, ignoreLocalVar );
- return PropertyName;
- }
-
- public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalVar )
- {
- return BaseGenerateShaderForOutput( outputId, ref dataCollector, ignoreLocalVar );
- }
-
- public override void UpdateMaterial( Material mat )
- {
- base.UpdateMaterial( mat );
- if( UIUtils.IsProperty( m_currentParameterType ) && !InsideShaderFunction )
- {
- OnPropertyNameChanged();
- if( mat.HasProperty( PropertyName ) )
- {
- mat.SetTexture( PropertyName, m_materialValue );
- }
- }
- }
-
- public override void SetMaterialMode( Material mat, bool fetchMaterialValues )
- {
- base.SetMaterialMode( mat, fetchMaterialValues );
- if( fetchMaterialValues && m_materialMode && UIUtils.IsProperty( m_currentParameterType ) )
- {
- if( mat.HasProperty( PropertyName ) )
- {
- m_materialValue = mat.GetTexture( PropertyName );
- CheckTextureImporter( false, false );
- }
- }
- }
-
- public override void ForceUpdateFromMaterial( Material material )
- {
- if( UIUtils.IsProperty( m_currentParameterType ) && material.HasProperty( PropertyName ) )
- {
- m_materialValue = material.GetTexture( PropertyName );
- CheckTextureImporter( false, false );
- }
- }
-
- public override bool UpdateShaderDefaults( ref Shader shader, ref TextureDefaultsDataColector defaultCol/* ref string metaStr */)
- {
- if( m_defaultValue != null )
- {
- defaultCol.AddValue( PropertyName, m_defaultValue );
- }
-
- return true;
- }
-
- public override void ReadFromString( ref string[] nodeParams )
- {
- base.ReadFromString( ref nodeParams );
- ReadAdditionalData( ref nodeParams );
- }
-
- public virtual void ReadAdditionalData( ref string[] nodeParams )
- {
- string defaultTextureGUID = GetCurrentParam( ref nodeParams );
- //m_defaultValue = AssetDatabase.LoadAssetAtPath<Texture>( textureName );
- if( UIUtils.CurrentShaderVersion() > 14101 )
- {
- m_defaultValue = AssetDatabase.LoadAssetAtPath<Texture>( AssetDatabase.GUIDToAssetPath( defaultTextureGUID ) );
- string materialTextureGUID = GetCurrentParam( ref nodeParams );
- m_materialValue = AssetDatabase.LoadAssetAtPath<Texture>( AssetDatabase.GUIDToAssetPath( materialTextureGUID ) );
- }
- else
- {
- m_defaultValue = AssetDatabase.LoadAssetAtPath<Texture>( defaultTextureGUID );
- }
-
- m_isNormalMap = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) );
- m_defaultTextureValue = (TexturePropertyValues)Enum.Parse( typeof( TexturePropertyValues ), GetCurrentParam( ref nodeParams ) );
- m_autocastMode = (AutoCastType)Enum.Parse( typeof( AutoCastType ), GetCurrentParam( ref nodeParams ) );
- if( UIUtils.CurrentShaderVersion() > 15306 )
- {
- m_currentType = (TextureType)Enum.Parse( typeof( TextureType ), GetCurrentParam( ref nodeParams ) );
- }
- else
- {
- m_currentType = TextureType.Texture2D;
- }
-
- ConfigTextureData( m_currentType );
-
- //ConfigFromObject( m_defaultValue );
- if( m_materialValue == null )
- {
- ConfigFromObject( m_defaultValue );
- }
- else
- {
- CheckTextureImporter( true, true );
- }
- ConfigureInputPorts();
- ConfigureOutputPorts();
- }
-
- public override void ReadAdditionalClipboardData( ref string[] nodeParams )
- {
- base.ReadAdditionalClipboardData( ref nodeParams );
- string textureName = GetCurrentParam( ref nodeParams );
- m_materialValue = AssetDatabase.LoadAssetAtPath<Texture>( textureName );
- }
-
- public override void WriteToString( ref string nodeInfo, ref string connectionsInfo )
- {
- base.WriteToString( ref nodeInfo, ref connectionsInfo );
- WriteAdditionalToString( ref nodeInfo, ref connectionsInfo );
- }
-
- public virtual void WriteAdditionalToString( ref string nodeInfo, ref string connectionsInfo )
- {
- //IOUtils.AddFieldValueToString( ref nodeInfo, ( m_defaultValue != null ) ? AssetDatabase.GetAssetPath( m_defaultValue ) : Constants.NoStringValue );
- IOUtils.AddFieldValueToString( ref nodeInfo, ( m_defaultValue != null ) ? AssetDatabase.AssetPathToGUID( AssetDatabase.GetAssetPath( m_defaultValue ) ) : Constants.NoStringValue );
- IOUtils.AddFieldValueToString( ref nodeInfo, ( m_materialValue != null ) ? AssetDatabase.AssetPathToGUID( AssetDatabase.GetAssetPath( m_materialValue ) ) : Constants.NoStringValue );
- IOUtils.AddFieldValueToString( ref nodeInfo, m_isNormalMap.ToString() );
- IOUtils.AddFieldValueToString( ref nodeInfo, m_defaultTextureValue );
- IOUtils.AddFieldValueToString( ref nodeInfo, m_autocastMode );
- IOUtils.AddFieldValueToString( ref nodeInfo, m_currentType );
- }
-
- public override void WriteAdditionalClipboardData( ref string nodeInfo )
- {
- base.WriteAdditionalClipboardData( ref nodeInfo );
- IOUtils.AddFieldValueToString( ref nodeInfo, ( m_materialValue != null ) ? AssetDatabase.GetAssetPath( m_materialValue ) : Constants.NoStringValue );
- }
-
- public override void Destroy()
- {
- base.Destroy();
- m_defaultValue = null;
- m_materialValue = null;
- m_textureProperty = null;
- UIUtils.UnregisterPropertyNode( this );
- UIUtils.UnregisterTexturePropertyNode( this );
- }
-
- public override string GetPropertyValStr()
- {
- return m_materialMode ? ( m_materialValue != null ? m_materialValue.name : IOUtils.NO_TEXTURES ) : ( m_defaultValue != null ? m_defaultValue.name : IOUtils.NO_TEXTURES );
- }
-
- public override string GetPropertyValue()
- {
- switch( m_currentType )
- {
- case TextureType.Texture1D:
- {
- return PropertyAttributes + GetTexture1DPropertyValue();
- }
- case TextureType.ProceduralTexture:
- case TextureType.Texture2D:
- {
- return PropertyAttributes + GetTexture2DPropertyValue();
- }
- case TextureType.Texture3D:
- {
- return PropertyAttributes + GetTexture3DPropertyValue();
- }
- case TextureType.Cube:
- {
- return PropertyAttributes + GetCubePropertyValue();
- }
- case TextureType.Texture2DArray:
- {
- return PropertyAttributes + GetTexture2DArrayPropertyValue();
- }
- }
- return string.Empty;
- }
-
- public override string GetUniformValue()
- {
- switch( m_currentType )
- {
- case TextureType.Texture1D:
- {
- return GetTexture1DUniformValue();
- }
- case TextureType.ProceduralTexture:
- case TextureType.Texture2D:
- {
- return GetTexture2DUniformValue();
- }
- case TextureType.Texture3D:
- {
- return GetTexture3DUniformValue();
- }
- case TextureType.Cube:
- {
- return GetCubeUniformValue();
- }
- case TextureType.Texture2DArray:
- {
- return GetTexture2DArrayUniformValue();
- }
- }
-
- return string.Empty;
- }
-
- public override bool GetUniformData( out string dataType, out string dataName )
- {
- if( m_currentType == TextureType.Texture2DArray )
- {
- MasterNode masterNode = UIUtils.CurrentWindow.OutsideGraph.CurrentMasterNode;
- if( masterNode.CurrentDataCollector.IsTemplate && masterNode.CurrentDataCollector.IsSRP )
- {
- dataType = "TEXTURE2D_ARRAY( " + PropertyName + "";
- dataName = ");\nuniform SAMPLER( sampler" + PropertyName + " )";
- return true;
- }
- dataType = "UNITY_DECLARE_TEX2DARRAY(";
- dataName = m_propertyName + " )";
- return true;
- }
-
- dataType = UIUtils.TextureTypeToCgType( m_currentType );
- dataName = m_propertyName;
- return true;
- }
-
- public virtual string CurrentPropertyReference
- {
- get
- {
- string propertyName = string.Empty;
- propertyName = PropertyName;
- return propertyName;
- }
- }
-
- public Texture Value
- {
- get { return m_materialMode ? m_materialValue : m_defaultValue; }
- set
- {
- if( m_materialMode )
- m_materialValue = value;
- else
- m_defaultValue = value;
- }
- }
-
- public Texture MaterialValue
- {
- get { return m_materialValue; }
- set { m_materialValue = value; }
- }
-
- public Texture DefaultValue
- {
- get { return m_defaultValue; }
- set { m_defaultValue = value; }
- }
-
- public void SetInspectorName( string newName )
- {
- m_propertyInspectorName = newName;
- }
-
- public void SetPropertyName( string newName )
- {
- m_propertyName = newName;
- }
-
- public bool IsValid { get { return m_materialMode ? ( m_materialValue != null ) : ( m_defaultValue != null ); } }
-
- public virtual bool IsNormalMap { get { return m_isNormalMap; } }
- public bool IsLinearTexture { get { return m_linearTexture; } }
-
- public override void OnPropertyNameChanged()
- {
- base.OnPropertyNameChanged();
- UIUtils.UpdateTexturePropertyDataNode( UniqueId, PropertyInspectorName );
- }
-
- public override void SetGlobalValue() { Shader.SetGlobalTexture( m_propertyName, m_defaultValue ); }
- public override void FetchGlobalValue() { m_materialValue = Shader.GetGlobalTexture( m_propertyName ); }
- public override string DataToArray { get { return PropertyInspectorName; } }
- public TextureType CurrentType { get { return m_currentType; } }
-
- public bool DrawAutocast
- {
- get { return m_drawAutocast; }
- set { m_drawAutocast = value; }
- }
-
- public TexturePropertyValues DefaultTextureValue
- {
- get { return m_defaultTextureValue; }
- set { m_defaultTextureValue = value; }
- }
-
- public AutoCastType AutocastMode
- {
- get { return m_autocastMode; }
- }
- }
- }
|