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; var debugView = ViewWidgetButtonMenu.AddChildMenu("Debug View").ContextMenu;
for (int i = 0; i < EditorViewportViewModeValues.Length; i++) for (int i = 0; i < EditorViewportViewModeValues.Length; i++)
{ {
var v = EditorViewportViewModeValues[i]; ref var v = ref EditorViewportViewModeValues[i];
var button = debugView.AddButton(v.Name); if (v.Options != null)
button.Tag = v.Mode; {
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; debugView.VisibleChanged += WidgetViewModeShowHide;
} }
@@ -1382,13 +1397,22 @@ namespace FlaxEditor.Viewport
private struct ViewModeOptions private struct ViewModeOptions
{ {
public readonly ViewMode Mode;
public readonly string Name; public readonly string Name;
public readonly ViewMode Mode;
public readonly ViewModeOptions[] Options;
public ViewModeOptions(ViewMode mode, string name) public ViewModeOptions(ViewMode mode, string name)
{ {
Mode = mode; Mode = mode;
Name = name; Name = name;
Options = null;
}
public ViewModeOptions(string name, ViewModeOptions[] options)
{
Name = name;
Mode = ViewMode.Default;
Options = options;
} }
} }
@@ -1401,16 +1425,19 @@ namespace FlaxEditor.Viewport
new ViewModeOptions(ViewMode.LightBuffer, "Light Buffer"), new ViewModeOptions(ViewMode.LightBuffer, "Light Buffer"),
new ViewModeOptions(ViewMode.Reflections, "Reflections Buffer"), new ViewModeOptions(ViewMode.Reflections, "Reflections Buffer"),
new ViewModeOptions(ViewMode.Depth, "Depth Buffer"), new ViewModeOptions(ViewMode.Depth, "Depth Buffer"),
new ViewModeOptions(ViewMode.Diffuse, "Diffuse"), new ViewModeOptions("GBuffer", new[]
new ViewModeOptions(ViewMode.Metalness, "Metalness"), {
new ViewModeOptions(ViewMode.Roughness, "Roughness"), new ViewModeOptions(ViewMode.Diffuse, "Diffuse"),
new ViewModeOptions(ViewMode.Specular, "Specular"), new ViewModeOptions(ViewMode.Metalness, "Metalness"),
new ViewModeOptions(ViewMode.SpecularColor, "Specular Color"), new ViewModeOptions(ViewMode.Roughness, "Roughness"),
new ViewModeOptions(ViewMode.SubsurfaceColor, "Subsurface Color"), new ViewModeOptions(ViewMode.Specular, "Specular"),
new ViewModeOptions(ViewMode.ShadingModel, "Shading Model"), new ViewModeOptions(ViewMode.SpecularColor, "Specular Color"),
new ViewModeOptions(ViewMode.Emissive, "Emissive Light"), new ViewModeOptions(ViewMode.SubsurfaceColor, "Subsurface Color"),
new ViewModeOptions(ViewMode.Normals, "Normals"), new ViewModeOptions(ViewMode.ShadingModel, "Shading Model"),
new ViewModeOptions(ViewMode.AmbientOcclusion, "Ambient Occlusion"), 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.MotionVectors, "Motion Vectors"),
new ViewModeOptions(ViewMode.LightmapUVsDensity, "Lightmap UVs Density"), new ViewModeOptions(ViewMode.LightmapUVsDensity, "Lightmap UVs Density"),
new ViewModeOptions(ViewMode.VertexColors, "Vertex Colors"), 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) private void WidgetViewModeShowHide(Control cm)
{ {
if (cm.Visible == false) if (cm.Visible == false)
@@ -1449,13 +1482,8 @@ namespace FlaxEditor.Viewport
var ccm = (ContextMenu)cm; var ccm = (ContextMenu)cm;
foreach (var e in ccm.Items) foreach (var e in ccm.Items)
{ {
if (e is ContextMenuButton b) if (e is ContextMenuButton b && b.Tag is ViewMode v)
{ b.Icon = Task.View.Mode == v ? Style.Current.CheckBoxTick : SpriteHandle.Invalid;
var v = (ViewMode)b.Tag;
b.Icon = Task.View.Mode == v
? Style.Current.CheckBoxTick
: SpriteHandle.Invalid;
}
} }
} }