12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115 |
- // 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,
- linearGrey,
- red
- }
- 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 int m_useSamplerArrayIdx = -1;
- //[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;
- protected bool m_forceSamplingMacrosGen = false;
- 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" );
- AddOutputPort( WirePortDataType.SAMPLERSTATE, "SS" );
- m_outputPorts[ 0 ].CreatePortRestrictions( WirePortDataType.SAMPLER1D, WirePortDataType.SAMPLER2D, WirePortDataType.SAMPLER3D, WirePortDataType.SAMPLERCUBE, WirePortDataType.SAMPLER2DARRAY, 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_availableAttribs.Add( new PropertyAttributes( "Single Line Texture", "[SingleLineTexture]" ) );
- 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 );
- m_previewMaterialPassId = 0;
- }
- else
- {
- if( m_defaultId == -1 )
- m_defaultId = Shader.PropertyToID( "_Default" );
- PreviewMaterial.SetInt( m_defaultId, 0 );
- if( m_typeId == -1 )
- m_typeId = Shader.PropertyToID( "_Type" );
- m_previewMaterialPassId = 1;
- 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;
- }
- }
- 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()
- {
- if( PropertyName == "_CameraDepthTexture" )
- return Constants.CameraDepthTextureValue;
- else
- return GeneratorUtils.GetPropertyDeclaraction( PropertyName, TextureType.Texture2D, ";" );
- }
- //Texture3D
- public string GetTexture3DPropertyValue()
- {
- return PropertyName + "(\"" + m_propertyInspectorName + "\", 3D) = \"" + m_defaultTextureValue + "\" {}";
- }
- public string GetTexture3DUniformValue()
- {
- return GeneratorUtils.GetPropertyDeclaraction( PropertyName, TextureType.Texture3D, ";" );
- }
- // Cube
- public string GetCubePropertyValue()
- {
- return PropertyName + "(\"" + m_propertyInspectorName + "\", CUBE) = \"" + m_defaultTextureValue + "\" {}";
- }
- public string GetCubeUniformValue()
- {
- return GeneratorUtils.GetPropertyDeclaraction( PropertyName, TextureType.Cube, ";" );
- }
- // Texture2DArray
- public string GetTexture2DArrayPropertyValue()
- {
- return PropertyName + "(\"" + m_propertyInspectorName + "\", 2DArray) = \"" + m_defaultTextureValue + "\" {}";
- }
- public string GetTexture2DArrayUniformValue()
- {
- return GeneratorUtils.GetPropertyDeclaraction( PropertyName, TextureType.Texture2DArray, ";" );
- }
- 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.SAMPLER2DARRAY, 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 )
- {
- m_isNormalMap = importer.textureType == TextureImporterType.NormalMap;
- 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 );
- }
- 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 );
- 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();
- PreviewIsDirty = true;
- }
- //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 override void CheckIfAutoRegister( ref MasterNodeDataCollector dataCollector )
- {
- // Also testing inside shader function because node can be used indirectly over a custom expression and directly over a Function Output node
- // That isn't being used externaly making it to not be registered ( since m_connStatus it set to Connected by being connected to an output node
- if( CurrentParameterType != PropertyType.Constant && m_autoRegister && ( m_connStatus != NodeConnectionStatus.Connected || InsideShaderFunction ) )
- {
- RegisterProperty( ref dataCollector );
- if( m_autoRegister && m_containerGraph.ParentWindow.OutsideGraph.SamplingMacros )
- {
- GeneratorUtils.GenerateSamplerState( ref dataCollector, UniqueId, PropertyName , m_variableMode );
- }
- }
- }
- public string GenerateSamplerState( ref MasterNodeDataCollector dataCollector )
- {
- return GeneratorUtils.GenerateSamplerState( ref dataCollector, UniqueId, PropertyName , m_variableMode );
- }
- public virtual string GenerateSamplerPropertyName( int outputId, ref MasterNodeDataCollector dataCollector )
- {
- string generatedSamplerState = string.Empty;
- if( outputId > 0 || m_forceSamplingMacrosGen )
- {
- generatedSamplerState = GeneratorUtils.GenerateSamplerState( ref dataCollector, UniqueId, PropertyName , m_variableMode );
- }
- if( outputId > 0 )
- return generatedSamplerState;
- else
- return PropertyName;
- }
- public string BaseGenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalVar )
- {
- base.GenerateShaderForOutput( outputId, ref dataCollector, ignoreLocalVar );
- return GenerateSamplerPropertyName( outputId , ref dataCollector );
- }
- 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 );
- PreviewIsDirty = true;
- }
- }
- 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 void ReadFromStringArray( ref string[] nodeParams )
- {
- base.ReadFromString( ref nodeParams );
- }
- public override void ReadFromString( ref string[] nodeParams )
- {
- base.ReadFromString( ref nodeParams );
- ReadAdditionalData( ref nodeParams );
- if( UIUtils.CurrentShaderVersion() > 17101 )
- {
- m_useSamplerArrayIdx = Convert.ToInt32( GetCurrentParam( 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 RefreshExternalReferences()
- {
- base.RefreshExternalReferences();
- 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 );
- if( m_useSamplerArrayIdx > 0 )
- {
- TexturePropertyNode samplerNode = UIUtils.GetTexturePropertyNode( m_useSamplerArrayIdx - 1 );
- IOUtils.AddFieldValueToString( ref nodeInfo, ( samplerNode != null ? samplerNode.UniqueId : -1 ) );
- }
- else
- {
- IOUtils.AddFieldValueToString( ref nodeInfo, -1 );
- }
- }
- 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, ref bool fullValue )
- {
- m_excludeUniform = false;
- ParentGraph outsideGraph = UIUtils.CurrentWindow.OutsideGraph;
- if( outsideGraph.SamplingMacros || m_currentType == TextureType.Texture2DArray )
- {
- if( outsideGraph.IsSRP )
- {
- if( Constants.TexDeclarationSRPMacros.ContainsKey( m_currentType ) )
- {
- dataName = GeneratorUtils.GetPropertyDeclaraction( PropertyName, m_currentType, ";" );
- dataType = string.Empty;
- fullValue = true;
- return true;
- }
- }
- else if( Constants.TexDeclarationStandardMacros.ContainsKey( m_currentType ) )
- {
- dataName = GeneratorUtils.GetPropertyDeclaraction( PropertyName, m_currentType, ";" );
- dataType = string.Empty;
- fullValue = true;
- return true;
- }
- }
- //TODO: this is a hack and needs to be properly fixed
- if( PropertyName == "_CameraDepthTexture" )
- {
- if( m_containerGraph.ParentWindow.OutsideGraph.IsSRP )
- {
- UIUtils.ShowMessage( "Use Sampling Macros flag on master node properties is required to be turned on in order to properly declare _CameraDepthTexture over an SRP shader!" , MessageSeverity.Warning );
- }
- else
- {
- m_excludeUniform = true;
- dataType = "UNITY_DECLARE_DEPTH_TEXTURE(";
- 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, PropertyName );
- }
- 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 PropertyName; } }
- 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; }
- }
- public bool ForceSamplingMacrosGen { set { m_forceSamplingMacrosGen = value; } }
- }
- }
|