diff options
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/CustomTexture2DArrayInspector.cs')
| -rw-r--r-- | Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/CustomTexture2DArrayInspector.cs | 132 | 
1 files changed, 132 insertions, 0 deletions
| diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/CustomTexture2DArrayInspector.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/CustomTexture2DArrayInspector.cs new file mode 100644 index 00000000..b43ee4e2 --- /dev/null +++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/CustomTexture2DArrayInspector.cs @@ -0,0 +1,132 @@ +#if !UNITY_2019_1_OR_NEWER +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace AmplifyShaderEditor +{ +	[CustomEditor( typeof( Texture2DArray ) )] +	public class CustomTexture2DArrayInspector : Editor +	{ +		Texture2DArray m_target; +		[SerializeField] +		float m_index; +		Shader m_textureArrayPreview; +		Material m_previewMaterial; +		GUIStyle slider = null; +		GUIStyle thumb = null; +		GUIContent m_allButton = null; +		[SerializeField] +		bool m_seeAll; +		void OnEnable() +		{ +			m_target = ( target as Texture2DArray ); +			m_textureArrayPreview = AssetDatabase.LoadAssetAtPath<Shader>( AssetDatabase.GUIDToAssetPath( "610c24aad350fba4583068c6c22fa428" ) ); +			m_previewMaterial = new Material( m_textureArrayPreview ); +			slider = null; +			thumb = null; +		} + +		public override void OnPreviewGUI( Rect r, GUIStyle background ) +		{ +			base.OnPreviewGUI( r, background ); +			m_previewMaterial.SetTexture( "_MainTex", m_target ); +			m_previewMaterial.SetFloat( "_Index", m_index ); +			EditorGUI.DrawPreviewTexture( r, m_target, m_previewMaterial, ScaleMode.ScaleToFit, 1f ); +		} + +		private void OnDisable() +		{ +			DestroyImmediate( m_previewMaterial ); +			m_previewMaterial = null; +		} + +		public override void OnInspectorGUI() +		{ +			if( slider == null ) +				slider = "preSlider"; + +			if( thumb == null ) +				thumb = "preSliderThumb"; + +			if( m_allButton == null ) +				m_allButton = EditorGUIUtility.IconContent( "PreTextureMipMapLow" ); + +			base.OnInspectorGUI(); +		} + +		public override bool HasPreviewGUI() +		{ +			return true; +		} + +		public override void OnPreviewSettings() +		{ +			base.OnPreviewSettings(); +			m_seeAll = GUILayout.Toggle( m_seeAll, m_allButton, "preButton" ); +			EditorGUI.BeginDisabledGroup( m_seeAll ); +			m_index = Mathf.Round( GUILayout.HorizontalSlider( m_index, 0, m_target.depth - 1, slider, thumb ) ); +			EditorGUI.EndDisabledGroup(); +		} + +		public override void OnInteractivePreviewGUI( Rect r, GUIStyle background ) +		{ +			//base.OnInteractivePreviewGUI( r, background ); +			if( m_seeAll ) +			{ +				int columns = Mathf.CeilToInt( Mathf.Sqrt( m_target.depth ) ); +				float sizeX = r.width / columns - 20; +				float centerY = ( columns * columns ) - m_target.depth; +				int rows = columns; +				if( centerY >= columns ) +					rows--; +				float sizeY = ( r.height - 16 ) / rows - 15; + +				if( centerY >= columns ) +					centerY = sizeY * 0.5f; +				else +					centerY = 0; + +				Rect smallRect = r; +				if( rows > 1 ) +					smallRect.y += ( 15 / ( rows - 1 ) ); +				else +					smallRect.y += 15; +				smallRect.x = r.x + 10; +				smallRect.width = sizeX; +				smallRect.height = sizeY; + +				for( int i = 0; i < m_target.depth; i++ ) +				{ +					m_previewMaterial.SetTexture( "_MainTex", m_target ); +					m_previewMaterial.SetFloat( "_Index", i ); +					EditorGUI.DrawPreviewTexture( smallRect, m_target, m_previewMaterial, ScaleMode.ScaleToFit, 1 ); +					Rect dropRect = smallRect; + +					float diff = smallRect.height - smallRect.width; +					if( diff > 0 ) +						dropRect.y -= diff * 0.5f; +					dropRect.y += 16; +					EditorGUI.DropShadowLabel( dropRect, "[" + i + "]" ); + +					smallRect.x += sizeX + 20; +					if( ( ( i + 1 ) % ( columns ) ) == 0 ) +					{ +						smallRect.x = r.x + 10; +						smallRect.height = sizeY; +						smallRect.y += sizeY + 30; +					} +				} +			} +			else +			{ +				m_previewMaterial.SetTexture( "_MainTex", m_target ); +				m_previewMaterial.SetFloat( "_Index", m_index ); +				EditorGUI.DrawPreviewTexture( r, m_target, m_previewMaterial, ScaleMode.ScaleToFit, 1f ); +				EditorGUI.DropShadowLabel( r, "[" + m_index + "]" ); +			} +		} +	} +} +#endif | 
