Skip to content

Commit f098e5d

Browse files
authored
Merge pull request #8277 from Unity-Technologies/internal/6000.5/staging
mirror Internal/6000.5/staging
2 parents 366ddfd + 87e71b5 commit f098e5d

File tree

734 files changed

+59197
-13643
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

734 files changed

+59197
-13643
lines changed

Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Editors.meta

Lines changed: 0 additions & 3 deletions
This file was deleted.

Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Editors/HaloEditor.cs

Lines changed: 0 additions & 31 deletions
This file was deleted.

Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Editors/HaloEditor.cs.meta

Lines changed: 0 additions & 3 deletions
This file was deleted.

Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/Window/RenderPipelineConvertersEditor.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,16 @@ public static void ShowWindow()
8282
[MenuItem("Window/Rendering/Render Pipeline Converter", true, 50)]
8383
public static bool CanShowWindow()
8484
{
85-
return !EditorApplication.isPlaying;
85+
if (EditorApplication.isPlaying)
86+
return false;
87+
88+
foreach (var converterType in TypeCache.GetTypesDerivedFrom<IRenderPipelineConverter>())
89+
{
90+
if (!converterType.IsAbstract && !converterType.IsInterface)
91+
return true;
92+
}
93+
94+
return false;
8695
}
8796

8897
internal static void DontSaveToLayout(EditorWindow wnd)
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
#if ENABLE_UIELEMENTS_MODULE && (UNITY_EDITOR || DEVELOPMENT_BUILD)
2+
#define ENABLE_RENDERING_DEBUGGER_UI
3+
#endif
4+
5+
using System;
6+
using System.Collections.Generic;
7+
using UnityEditor.UIElements;
8+
using UnityEngine;
9+
using UnityEngine.Rendering;
10+
using UnityEngine.UIElements;
11+
12+
namespace UnityEditor.Rendering
13+
{
14+
internal class WidgetSearchData
15+
{
16+
public List<TextElement> textElements;
17+
public string aggregatedAdditionalSearchText;
18+
19+
public WidgetSearchData(List<TextElement> textElements, string aggregatedAdditionalSearchText)
20+
{
21+
this.textElements = textElements;
22+
this.aggregatedAdditionalSearchText = aggregatedAdditionalSearchText;
23+
}
24+
}
25+
26+
sealed partial class DebugWindow
27+
{
28+
#if ENABLE_RENDERING_DEBUGGER_UI
29+
readonly Dictionary<DebugUI.Widget, WidgetSearchData> m_WidgetSearchElementCache = new();
30+
readonly List<TextElement> m_PanelHeaderTextElements = new();
31+
UIElementSearchFilter m_SearchFilter;
32+
33+
void BuildSearchCache()
34+
{
35+
m_WidgetSearchElementCache.Clear();
36+
m_PanelHeaderTextElements.Clear();
37+
38+
foreach (var panelElement in m_RightPaneElement.Children())
39+
{
40+
var headerLabel = panelElement.Q<Label>(className: "debug-window-search-filter-target");
41+
if (headerLabel != null)
42+
m_PanelHeaderTextElements.Add(headerLabel);
43+
}
44+
45+
DebugManager.instance.ForEachWidget(widget =>
46+
{
47+
if (widget.m_VisualElement == null)
48+
return;
49+
50+
List<TextElement> textElements = widget.m_VisualElement.Query()
51+
.Descendents<TextElement>(classname: "debug-window-search-filter-target")
52+
.ToList();
53+
54+
string aggregatedText = CollectAggregatedAdditionalSearchText(widget);
55+
m_WidgetSearchElementCache[widget] = new WidgetSearchData(textElements, aggregatedText);
56+
});
57+
}
58+
59+
void InitializeSearchField()
60+
{
61+
m_SearchFilter = new UIElementSearchFilter(
62+
rootVisualElement,
63+
searchString =>
64+
{
65+
var visiblePanels = PerformSearch(m_WidgetSearchElementCache, searchString, hideRootElementIfNoMatch: true);
66+
67+
foreach (var headerLabel in m_PanelHeaderTextElements)
68+
UIElementSearchFilter.ApplySearchAndHighlight(headerLabel, searchString, out _);
69+
70+
foreach (var panel in DebugManager.instance.panels)
71+
{
72+
var tab = m_LeftPaneElement.Q<VisualElement>(name: panel.displayName + "_Tab");
73+
if (tab != null)
74+
{
75+
bool shouldShow = string.IsNullOrEmpty(searchString) || visiblePanels.Contains(panel.displayName);
76+
tab.style.display = shouldShow ? DisplayStyle.Flex : DisplayStyle.None;
77+
}
78+
}
79+
}
80+
);
81+
m_SearchFilter.InitializeSearchField("search-field");
82+
}
83+
84+
internal static string CollectAggregatedAdditionalSearchText(DebugUI.Widget widget)
85+
{
86+
var parts = new List<string>();
87+
88+
if (!string.IsNullOrEmpty(widget.m_AdditionalSearchText))
89+
parts.Add(widget.m_AdditionalSearchText);
90+
91+
if (widget is DebugUI.Container container)
92+
{
93+
foreach (var child in container.children)
94+
{
95+
string childAggregated = CollectAggregatedAdditionalSearchText(child);
96+
if (!string.IsNullOrEmpty(childAggregated))
97+
parts.Add(childAggregated);
98+
}
99+
}
100+
101+
return parts.Count > 0 ? string.Join(",", parts) : string.Empty;
102+
}
103+
104+
internal static HashSet<string> PerformSearch(Dictionary<DebugUI.Widget, WidgetSearchData> elementCache, string searchString, bool hideRootElementIfNoMatch = false)
105+
{
106+
var panelsWithVisibleWidgets = new HashSet<string>();
107+
108+
foreach (var (widget, searchData) in elementCache)
109+
{
110+
bool anyDescendantMatchesSearch = false;
111+
foreach (var elem in searchData.textElements)
112+
{
113+
UIElementSearchFilter.ApplySearchAndHighlight(elem, searchString, out bool matched);
114+
if (matched)
115+
anyDescendantMatchesSearch = true;
116+
}
117+
118+
if (!string.IsNullOrEmpty(searchData.aggregatedAdditionalSearchText))
119+
{
120+
if (searchData.aggregatedAdditionalSearchText.Contains(searchString, StringComparison.CurrentCultureIgnoreCase))
121+
anyDescendantMatchesSearch = true;
122+
}
123+
124+
if (hideRootElementIfNoMatch)
125+
{
126+
if (searchString == string.Empty && searchData.textElements.Count == 0)
127+
{
128+
widget.m_IsHiddenBySearchFilter = false;
129+
}
130+
else
131+
{
132+
widget.m_IsHiddenBySearchFilter = !anyDescendantMatchesSearch;
133+
}
134+
}
135+
else
136+
{
137+
widget.m_IsHiddenBySearchFilter = false;
138+
}
139+
140+
if (!widget.m_IsHiddenBySearchFilter && widget.panel != null)
141+
panelsWithVisibleWidgets.Add(widget.panel.displayName);
142+
}
143+
144+
return panelsWithVisibleWidgets;
145+
}
146+
#endif
147+
}
148+
}

Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.SearchFilter.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,11 +163,15 @@ static void SendWidgetValueChangedAnalytic<T>(string queryPath, T previousValue,
163163
// Note: this won't get called if the window is opened when the editor itself is closed
164164
void OnDestroy()
165165
{
166-
// Note: In the case where the window is maximized/unmaximized, OnEnable for the new window gets called *before* OnDestroy.
167-
// Therefore you need to be careful with statics/globals. In this case, we only mark displayEditorUI as false if we are
168-
// closing the only/last DebugWindow instance.
169-
if (Resources.FindObjectsOfTypeAll(typeof(DebugWindow)).Length == 0)
170-
DebugManager.instance.displayEditorUI = false;
166+
EditorApplication.delayCall += () =>
167+
{
168+
// Note: In the case where the window is maximized/unmaximized, OnEnable for the new window gets called *before* OnDestroy.
169+
// Therefore you need to be careful with statics/globals. In this case, we only mark displayEditorUI as false if we are
170+
// closing the only/last DebugWindow instance. The check is delayed because inside OnDestroy, the current window still exists.
171+
var debugWindows = Resources.FindObjectsOfTypeAll(typeof(DebugWindow));
172+
if (debugWindows.Length == 0)
173+
DebugManager.instance.displayEditorUI = false;
174+
};
171175

172176
DebugManager.instance.onSetDirty -= MarkDirty;
173177

@@ -286,6 +290,9 @@ private void RecreateGUI()
286290
// The schedulers themselves are created in AttachToPanelEvent so we need to delay to ensure this has happened.
287291
EditorApplication.delayCall += () => SetSelectedPanel(m_SelectedPanelName);
288292
});
293+
294+
BuildSearchCache();
295+
InitializeSearchField();
289296
}
290297

291298
void ResetClicked()

Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.uss

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
:root {
22
}
33

4-
/* Lateral Tab Panel */
4+
.top-toolbar {
5+
height: 22px;
6+
}
57

68
#debug-window-tab-panel {
79
align-items: stretch;

Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.uxml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
33
<uie:Toolbar class="top-toolbar">
44
<uie:ToolbarSpacer style="flex-grow: 1" />
5+
<uie:ToolbarSearchField name="search-field"/>
56
<uie:ToolbarButton text="Reset" name="btn-reset" focusable="false" />
67
</uie:Toolbar>
78
<ui:TwoPaneSplitView fixed-pane-index="0" fixed-pane-initial-dimension="225" view-data-key="debug-window-split-view">

Packages/com.unity.render-pipelines.core/Editor/Lighting/LightProbeProxyVolumeEditor.cs

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)