summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/CustomTexture2DArrayInspector.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/Utils/CustomTexture2DArrayInspector.cs
parent917e9e0b320775634dc2e710f7deac74fd0822f0 (diff)
*移动amplify shader editor到third party目录
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/CustomTexture2DArrayInspector.cs')
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/CustomTexture2DArrayInspector.cs132
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