Add separate GBuffer view modes in Editor viewport widget

This commit is contained in:
Wojtek Figat
2022-08-17 20:37:12 +02:00
parent 0b15c369d6
commit db6cd541c2

View File

@@ -511,11 +511,26 @@ namespace FlaxEditor.Viewport
var debugView = ViewWidgetButtonMenu.AddChildMenu("Debug View").ContextMenu;
for (int i = 0; i < EditorViewportViewModeValues.Length; i++)
{
var v = EditorViewportViewModeValues[i];
ref var v = ref EditorViewportViewModeValues[i];
if (v.Options != null)
{
var childMenu = debugView.AddChildMenu(v.Name).ContextMenu;
childMenu.ButtonClicked += WidgetViewModeShowHideClicked;
childMenu.VisibleChanged += WidgetViewModeShowHide;
for (int j = 0; j < v.Options.Length; j++)
{
ref var vv = ref v.Options[j];
var button = childMenu.AddButton(vv.Name);
button.Tag = vv.Mode;
}
}
else
{
var button = debugView.AddButton(v.Name);
button.Tag = v.Mode;
}
debugView.ButtonClicked += button => Task.ViewMode = (ViewMode)button.Tag;
}
debugView.ButtonClicked += WidgetViewModeShowHideClicked;
debugView.VisibleChanged += WidgetViewModeShowHide;
}
@@ -1382,13 +1397,22 @@ namespace FlaxEditor.Viewport
private struct ViewModeOptions
{
public readonly ViewMode Mode;
public readonly string Name;
public readonly ViewMode Mode;
public readonly ViewModeOptions[] Options;
public ViewModeOptions(ViewMode mode, string name)
{
Mode = mode;
Name = name;
Options = null;
}
public ViewModeOptions(string name, ViewModeOptions[] options)
{
Name = name;
Mode = ViewMode.Default;
Options = options;
}
}
@@ -1401,6 +1425,8 @@ namespace FlaxEditor.Viewport
new ViewModeOptions(ViewMode.LightBuffer, "Light Buffer"),
new ViewModeOptions(ViewMode.Reflections, "Reflections Buffer"),
new ViewModeOptions(ViewMode.Depth, "Depth Buffer"),
new ViewModeOptions("GBuffer", new[]
{
new ViewModeOptions(ViewMode.Diffuse, "Diffuse"),
new ViewModeOptions(ViewMode.Metalness, "Metalness"),
new ViewModeOptions(ViewMode.Roughness, "Roughness"),
@@ -1411,6 +1437,7 @@ namespace FlaxEditor.Viewport
new ViewModeOptions(ViewMode.Emissive, "Emissive Light"),
new ViewModeOptions(ViewMode.Normals, "Normals"),
new ViewModeOptions(ViewMode.AmbientOcclusion, "Ambient Occlusion"),
}),
new ViewModeOptions(ViewMode.MotionVectors, "Motion Vectors"),
new ViewModeOptions(ViewMode.LightmapUVsDensity, "Lightmap UVs Density"),
new ViewModeOptions(ViewMode.VertexColors, "Vertex Colors"),
@@ -1441,6 +1468,12 @@ namespace FlaxEditor.Viewport
}
}
private void WidgetViewModeShowHideClicked(ContextMenuButton button)
{
if (button.Tag is ViewMode v)
Task.ViewMode = v;
}
private void WidgetViewModeShowHide(Control cm)
{
if (cm.Visible == false)
@@ -1449,13 +1482,8 @@ namespace FlaxEditor.Viewport
var ccm = (ContextMenu)cm;
foreach (var e in ccm.Items)
{
if (e is ContextMenuButton b)
{
var v = (ViewMode)b.Tag;
b.Icon = Task.View.Mode == v
? Style.Current.CheckBoxTick
: SpriteHandle.Invalid;
}
if (e is ContextMenuButton b && b.Tag is ViewMode v)
b.Icon = Task.View.Mode == v ? Style.Current.CheckBoxTick : SpriteHandle.Invalid;
}
}