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 |