You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Renamed Material Depth -> Material ID, and Hit Proxy Depth -> Hit Proxy ID Moved Material ID into the Standard commands grouping, as it can be useful for content creators. Made the editor hide all the Advanced commands by default, can make them available in the UX with r.Nanite.Visualize.Advanced now. Command line has full access to all of them, regardless of this setting. Renamed r.Nanite.DebugSceneComposite to r.Nanite.Visualize.Composite, and changed the behavior for -1=default, 0=off, 1=on Renamed r.Nanite.DebugSobelFilter to r.Nanite.Visualize.EdgeDetect and defaulted it on for content creator benefit. Removed int4 VisualizeConfig member from Rasterizer UB, and added 32bit visualization mode mask instead. Removed 32bit RasterStateReverseCull member from Rasterizer UB, and folded it into pre-existing 32bit RenderFlags Renamed Nanite::FDebugVisualizeCS -> Nanite::FNaniteVisualizeCS Renamed DebugVisualize.usf -> Visualize.usf Made all visualizations composite against scene depth by default, except the overdraw mode. Changed overdraw view mode to use ColorMapInferno from ColorMap.ush #rb brian.karis #fyi michal.valient, rune.stubbe [CL 15828833 by graham wihlidal in ue5-main branch]
159 lines
5.0 KiB
C++
159 lines
5.0 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "NaniteVisualizationMenuCommands.h"
|
|
#include "NaniteVisualizationData.h"
|
|
#include "Containers/UnrealString.h"
|
|
#include "Framework/Commands/InputChord.h"
|
|
#include "Materials/Material.h"
|
|
#include "Internationalization/Text.h"
|
|
#include "Templates/Function.h"
|
|
#include "EditorStyleSet.h"
|
|
#include "EditorViewportClient.h"
|
|
|
|
int32 GNaniteVisualizeAdvanced = 0;
|
|
static FAutoConsoleVariableRef CVarNaniteVisualizeAdvanced(
|
|
TEXT("r.Nanite.Visualize.Advanced"),
|
|
GNaniteVisualizeAdvanced,
|
|
TEXT("")
|
|
);
|
|
|
|
#define LOCTEXT_NAMESPACE "NaniteVisualizationMenuCommands"
|
|
|
|
FNaniteVisualizationMenuCommands::FNaniteVisualizationMenuCommands()
|
|
: TCommands<FNaniteVisualizationMenuCommands>
|
|
(
|
|
TEXT("NaniteVisualizationMenu"), // Context name for fast lookup
|
|
NSLOCTEXT("Contexts", "NaniteVisualizationMenu", "Nanite Visualization"), // Localized context name for displaying
|
|
NAME_None, // Parent context name.
|
|
FEditorStyle::GetStyleSetName() // Icon Style Set
|
|
),
|
|
CommandMap()
|
|
{
|
|
}
|
|
|
|
void FNaniteVisualizationMenuCommands::BuildCommandMap()
|
|
{
|
|
const FNaniteVisualizationData& VisualizationData = GetNaniteVisualizationData();
|
|
const FNaniteVisualizationData::TModeMap& ModeMap = VisualizationData.GetModeMap();
|
|
|
|
CommandMap.Empty();
|
|
for (FNaniteVisualizationData::TModeMap::TConstIterator It = ModeMap.CreateConstIterator(); It; ++It)
|
|
{
|
|
const FNaniteVisualizationData::FModeRecord& Entry = It.Value();
|
|
FNaniteVisualizationRecord& Record = CommandMap.Add(Entry.ModeName, FNaniteVisualizationRecord());
|
|
Record.Name = Entry.ModeName;
|
|
Record.Command = FUICommandInfoDecl(
|
|
this->AsShared(),
|
|
Entry.ModeName,
|
|
Entry.ModeText,
|
|
Entry.ModeDesc)
|
|
.UserInterfaceType(EUserInterfaceActionType::RadioButton)
|
|
.DefaultChord(FInputChord()
|
|
);
|
|
|
|
switch (Entry.ModeType)
|
|
{
|
|
default:
|
|
case FNaniteVisualizationData::FModeType::Overview:
|
|
Record.Type = FNaniteVisualizationType::Overview;
|
|
break;
|
|
|
|
case FNaniteVisualizationData::FModeType::Standard:
|
|
Record.Type = FNaniteVisualizationType::Standard;
|
|
break;
|
|
|
|
case FNaniteVisualizationData::FModeType::Advanced:
|
|
Record.Type = FNaniteVisualizationType::Advanced;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void FNaniteVisualizationMenuCommands::BuildVisualisationSubMenu(FMenuBuilder& Menu)
|
|
{
|
|
const bool bShowAdvanced = GNaniteVisualizeAdvanced != 0;
|
|
|
|
const FNaniteVisualizationMenuCommands& Commands = FNaniteVisualizationMenuCommands::Get();
|
|
if (Commands.IsPopulated())
|
|
{
|
|
Menu.BeginSection("LevelViewportNaniteVisualizationMode", LOCTEXT("NaniteVisualizationHeader", "Nanite Visualization Mode"));
|
|
|
|
if (Commands.AddCommandTypeToMenu(Menu, FNaniteVisualizationType::Overview))
|
|
{
|
|
Menu.AddMenuSeparator();
|
|
}
|
|
|
|
if (Commands.AddCommandTypeToMenu(Menu, FNaniteVisualizationType::Standard))
|
|
{
|
|
if (bShowAdvanced)
|
|
{
|
|
Menu.AddMenuSeparator();
|
|
}
|
|
}
|
|
|
|
if (bShowAdvanced)
|
|
{
|
|
Commands.AddCommandTypeToMenu(Menu, FNaniteVisualizationType::Advanced);
|
|
}
|
|
|
|
Menu.EndSection();
|
|
}
|
|
}
|
|
|
|
bool FNaniteVisualizationMenuCommands::AddCommandTypeToMenu(FMenuBuilder& Menu, const FNaniteVisualizationType Type) const
|
|
{
|
|
bool bAddedCommands = false;
|
|
|
|
const TNaniteVisualizationModeCommandMap& Commands = CommandMap;
|
|
for (TCommandConstIterator It = CreateCommandConstIterator(); It; ++It)
|
|
{
|
|
const FNaniteVisualizationRecord& Record = It.Value();
|
|
if (Record.Type == Type)
|
|
{
|
|
Menu.AddMenuEntry(Record.Command, NAME_None, Record.Command->GetLabel());
|
|
bAddedCommands = true;
|
|
}
|
|
}
|
|
|
|
return bAddedCommands;
|
|
}
|
|
|
|
FNaniteVisualizationMenuCommands::TCommandConstIterator FNaniteVisualizationMenuCommands::CreateCommandConstIterator() const
|
|
{
|
|
return CommandMap.CreateConstIterator();
|
|
}
|
|
|
|
void FNaniteVisualizationMenuCommands::RegisterCommands()
|
|
{
|
|
BuildCommandMap();
|
|
}
|
|
|
|
void FNaniteVisualizationMenuCommands::BindCommands(FUICommandList& CommandList, const TSharedPtr<FEditorViewportClient>& Client) const
|
|
{
|
|
// Map Nanite visualization mode actions
|
|
for (FNaniteVisualizationMenuCommands::TCommandConstIterator It = FNaniteVisualizationMenuCommands::Get().CreateCommandConstIterator(); It; ++It)
|
|
{
|
|
const FNaniteVisualizationMenuCommands::FNaniteVisualizationRecord& Record = It.Value();
|
|
CommandList.MapAction(
|
|
Record.Command,
|
|
FExecuteAction::CreateStatic<const TSharedPtr<FEditorViewportClient>&>(&FNaniteVisualizationMenuCommands::ChangeNaniteVisualizationMode, Client, Record.Name),
|
|
FCanExecuteAction(),
|
|
FIsActionChecked::CreateStatic<const TSharedPtr<FEditorViewportClient>&>(&FNaniteVisualizationMenuCommands::IsNaniteVisualizationModeSelected, Client, Record.Name)
|
|
);
|
|
}
|
|
}
|
|
|
|
void FNaniteVisualizationMenuCommands::ChangeNaniteVisualizationMode(const TSharedPtr<FEditorViewportClient>& Client, FName InName)
|
|
{
|
|
check(Client.IsValid());
|
|
Client->ChangeNaniteVisualizationMode(InName);
|
|
}
|
|
|
|
bool FNaniteVisualizationMenuCommands::IsNaniteVisualizationModeSelected(const TSharedPtr<FEditorViewportClient>& Client, FName InName)
|
|
{
|
|
check(Client.IsValid());
|
|
return Client->IsNaniteVisualizationModeSelected(InName);
|
|
}
|
|
|
|
#undef LOCTEXT_NAMESPACE
|