#if ENABLE_UIELEMENTS_MODULE && UNITY_ENABLE_CHECKS #define ENABLE_RENDERING_DEBUGGER_UI #endif #if ENABLE_RENDERING_DEBUGGER_UI using System.Collections.Generic; using UnityEngine.UIElements; namespace UnityEngine.Rendering { [AddComponentMenu("")] // Hide from Add Component menu class RuntimeDebugWindow : MonoBehaviour { PanelRenderer m_PanelRenderer; VisualElement m_RootVisualElement; VisualElement m_PanelRootElement; TabView m_TabViewElement; DebugUI.Panel m_SelectedPanel; bool m_PortraitOrientation; bool m_NeedsRebuild; int m_UIVersion = 0; Dictionary m_ScrollPositions = new Dictionary(); void Awake() { DebugManager.instance.onSetDirty += RequestRebuild; DebugManager.instance.onRecreateDebugUI += RequestRebuild; if (m_PanelRenderer == null) { m_PanelRenderer = gameObject.AddComponent(); if (GraphicsSettings.TryGetRenderPipelineSettings(out var resources)) { m_PanelRenderer.panelSettings = resources.panelSettings; m_PanelRenderer.visualTreeAsset = resources.visualTreeAsset; } } m_PanelRenderer.RegisterUIReloadCallback(OnUIReload); } internal void OnUIReload(PanelRenderer renderer, VisualElement rootElement, int version) { // Called on initial load AND on any asset change if (rootElement == null || rootElement.childCount == 0) return; if (version == m_UIVersion) return; m_UIVersion = version; m_PanelRootElement = rootElement; m_RootVisualElement = rootElement[0]; var resources = GraphicsSettings.GetRenderPipelineSettings(); var styleSheets = resources.styleSheets; foreach (var uss in styleSheets) m_PanelRootElement.styleSheets.Add(uss); BuildDebugUI(); } void BuildDebugUI() { if (m_RootVisualElement == null) return; UpdateOrientation(forceUpdate: true); // Save scroll positions before clearing if (m_TabViewElement != null) { m_ScrollPositions.Clear(); foreach (var tab in m_TabViewElement.Query().ToList()) { var scrollView = tab.Q(); if (scrollView != null) { m_ScrollPositions[tab.label] = scrollView.scrollOffset; } } } m_TabViewElement = m_RootVisualElement.Q(name: "debug-window-tabview"); m_TabViewElement.Clear(); var resetButton = m_RootVisualElement.Q