using System;
using System.Reflection;
using UnityEngine.Rendering.RenderGraphModule;
using NameAndTooltip = UnityEngine.Rendering.DebugUI.Widget.NameAndTooltip;
namespace UnityEngine.Rendering
{
/// <summary>
/// Render Graph-related Rendering Debugger settings.
/// </summary>
[PipelineHelpURL("UniversalRenderPipelineAsset", pageName: "features/rendering-debugger-reference", pageHash: "render-graph")]
[PipelineHelpURL("HDRenderPipelineAsset", pageName: "rendering-debugger-window-reference", pageHash: "render-graph")]
class DebugDisplaySettingsRenderGraph : IDebugDisplaySettingsData
{
public DebugDisplaySettingsRenderGraph()
{
foreach (var graph in RenderGraph.GetRegisteredRenderGraphs())
{
graph.debugParams.Reset();
}
}
[DisplayInfo(name = "Rendering", order = 10)]
private class SettingsPanel : DebugDisplaySettingsPanel
{
public SettingsPanel(DebugDisplaySettingsRenderGraph _)
{
DocumentationUtils.TryGetHelpURL(typeof(DebugDisplaySettingsRenderGraph), out var documentationUrl);
var foldout = new DebugUI.Foldout()
{
displayName = "Render Graph",
documentationUrl = documentationUrl
};
AddWidget(foldout);
bool usingRenderGraph = false;
foreach (var graph in RenderGraph.GetRegisteredRenderGraphs())
{
usingRenderGraph = true;
var list = graph.GetWidgetList();
foreach (var item in list)
foldout.children.Add(item);
}
if (!usingRenderGraph)
{
foldout.children.Add(new DebugUI.MessageBox()
{
displayName =
"Warning: The current render pipeline does not have Render Graphs Registered",
style = DebugUI.MessageBox.Style.Warning
});
}
}
}
#region IDebugDisplaySettingsQuery
/// <inheritdoc/>
IDebugDisplaySettingsPanelDisposable IDebugDisplaySettingsData.CreatePanel()
{
return new SettingsPanel(this);
}
public bool AreAnySettingsActive
{
get
{
foreach (var (graph, _) in RenderGraph.GetRegisteredExecutions())
{
if (graph.areAnySettingsActive)
return true;
}
return false;
}
}
#endregion
}
}