private void ShowCompiledCodeButton(Shader s) { EditorGUILayout.BeginHorizontal(new GUILayoutOption[0]); EditorGUILayout.PrefixLabel("Compiled code", EditorStyles.miniButton); bool flag = ShaderUtil.HasShaderSnippets(s) || ShaderUtil.HasSurfaceShaders(s) || ShaderUtil.HasFixedFunctionShaders(s); if (flag) { GUIContent showCurrent = ShaderInspector.Styles.showCurrent; Rect rect = GUILayoutUtility.GetRect(showCurrent, EditorStyles.miniButton, new GUILayoutOption[] { GUILayout.ExpandWidth(false) }); Rect position = new Rect(rect.xMax - 16f, rect.y, 16f, rect.height); if (EditorGUI.DropdownButton(position, GUIContent.none, FocusType.Passive, GUIStyle.none)) { Rect last = GUILayoutUtility.topLevel.GetLast(); PopupWindow.Show(last, new ShaderInspectorPlatformsPopup(s)); GUIUtility.ExitGUI(); } if (GUI.Button(rect, showCurrent, EditorStyles.miniButton)) { ShaderUtil.OpenCompiledShader(s, ShaderInspectorPlatformsPopup.currentMode, ShaderInspectorPlatformsPopup.currentPlatformMask, ShaderInspectorPlatformsPopup.currentVariantStripping == 0); GUIUtility.ExitGUI(); } } else { GUILayout.Button("none (precompiled shader)", GUI.skin.label, new GUILayoutOption[0]); } EditorGUILayout.EndHorizontal(); }
// Compiled shader code button+dropdown private void ShowCompiledCodeButton(Shader s) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("Compiled code", EditorStyles.miniButton); var hasCode = ShaderUtil.HasShaderSnippets(s) || ShaderUtil.HasSurfaceShaders(s) || ShaderUtil.HasFixedFunctionShaders(s); if (hasCode) { // button with a drop-down part on the right var modeContent = Styles.showCurrent; var modeRect = GUILayoutUtility.GetRect(modeContent, EditorStyles.miniButton, GUILayout.ExpandWidth(false)); var modeDropRect = new Rect(modeRect.xMax - 16, modeRect.y, 16, modeRect.height); if (EditorGUI.DropdownButton(modeDropRect, GUIContent.none, FocusType.Passive, GUIStyle.none)) { Rect rect = GUILayoutUtility.topLevel.GetLast(); PopupWindow.Show(rect, new ShaderInspectorPlatformsPopup(s)); GUIUtility.ExitGUI(); } if (GUI.Button(modeRect, modeContent, EditorStyles.miniButton)) { ShaderUtil.OpenCompiledShader(s, ShaderInspectorPlatformsPopup.currentMode, ShaderInspectorPlatformsPopup.currentPlatformMask, ShaderInspectorPlatformsPopup.currentVariantStripping == 0); GUIUtility.ExitGUI(); } } else { // Note: PrefixLabel is sometimes buggy if followed by a non-control (like Label). // We just want to show a label here, but have to pretend it's a button so it is treated like // a control. GUILayout.Button("none (precompiled shader)", GUI.skin.label); } EditorGUILayout.EndHorizontal(); }
// Compiled shader code button+dropdown private void ShowCompiledCodeButton(Shader s) { EditorGUILayout.BeginVertical(); ShaderImporter importer = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(s.GetInstanceID())) as ShaderImporter; bool enablePreprocessOnly = EditorSettings.cachingShaderPreprocessor; if (importer && importer.preprocessorOverride == PreprocessorOverride.ForceCachingPreprocessor) { enablePreprocessOnly = true; } using (new EditorGUI.DisabledScope(!enablePreprocessOnly)) s_PreprocessOnly = EditorGUILayout.Toggle(Styles.togglePreprocess, s_PreprocessOnly); EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("Compiled code", EditorStyles.miniButton); var hasCode = ShaderUtil.HasShaderSnippets(s) || ShaderUtil.HasSurfaceShaders(s) || ShaderUtil.HasFixedFunctionShaders(s); if (hasCode) { // button with a drop-down part on the right var modeContent = Styles.showCurrent; var modeRect = GUILayoutUtility.GetRect(modeContent, EditorStyles.miniButton, GUILayout.ExpandWidth(false)); var modeDropRect = new Rect(modeRect.xMax - 16, modeRect.y, 16, modeRect.height); if (EditorGUI.DropdownButton(modeDropRect, GUIContent.none, FocusType.Passive, GUIStyle.none)) { Rect rect = GUILayoutUtility.topLevel.GetLast(); PopupWindow.Show(rect, new ShaderInspectorPlatformsPopup(s)); GUIUtility.ExitGUI(); } if (GUI.Button(modeRect, modeContent, EditorStyles.miniButton)) { ShaderUtil.OpenCompiledShader(s, ShaderInspectorPlatformsPopup.currentMode, ShaderInspectorPlatformsPopup.currentPlatformMask, ShaderInspectorPlatformsPopup.currentVariantStripping == 0, enablePreprocessOnly && s_PreprocessOnly); GUIUtility.ExitGUI(); } } else { // Note: PrefixLabel is sometimes buggy if followed by a non-control (like Label). // We just want to show a label here, but have to pretend it's a button so it is treated like // a control. GUILayout.Button("none (precompiled shader)", GUI.skin.label); } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); }