[gui] added renderdoc toggle and debug group

This commit is contained in:
ParantezTech
2026-08-03 01:06:36 +03:00
parent dc3f719fa1
commit a7dae8dd7d
5 changed files with 111 additions and 33 deletions
+3
View File
@@ -44,6 +44,9 @@
"Options.Env.LogDirectMemory.Desc": "Log direct memory allocations and failures to the console.\nUse when a game aborts or exits during boot.", "Options.Env.LogDirectMemory.Desc": "Log direct memory allocations and failures to the console.\nUse when a game aborts or exits during boot.",
"Options.Env.LogIo.Desc": "Log file open, read, and path-resolve activity to the console.\nUse when a game cannot find its data files during boot.", "Options.Env.LogIo.Desc": "Log file open, read, and path-resolve activity to the console.\nUse when a game cannot find its data files during boot.",
"Options.Env.LogNp.Desc": "Log NP (PlayStation Network) library calls to the console.", "Options.Env.LogNp.Desc": "Log NP (PlayStation Network) library calls to the console.",
"Options.Env.Group.Debug": "Debug",
"Options.Env.Group.General": "General",
"Options.Env.RenderDoc.Desc": "Load the RenderDoc in-application API so frames can be captured from inside the emulator.\nPress F10 while the game runs to capture one frame; captures land in user/logs/capture_logs/<TITLE_ID>.\nRequires RenderDoc to be installed. Slows the GPU down and hangs some titles, so leave it off unless you are debugging.",
"Options.Env.GuestImageCpuSync.Desc": "Re-upload guest surfaces the game's own CPU code rewrites.\nLeave off normally. Turn on for titles whose CPU-drawn surfaces never reach the screen.\nCosts performance and regresses some titles, such as GTA V.", "Options.Env.GuestImageCpuSync.Desc": "Re-upload guest surfaces the game's own CPU code rewrites.\nLeave off normally. Turn on for titles whose CPU-drawn surfaces never reach the screen.\nCosts performance and regresses some titles, such as GTA V.",
"Options.DefaultProfile.Label": "Default profile name", "Options.DefaultProfile.Label": "Default profile name",
"Options.DefaultProfile.Desc": "Name used when a game asks for text input. Defaults to Sharp.", "Options.DefaultProfile.Desc": "Name used when a game asks for text input. Defaults to Sharp.",
@@ -22,6 +22,7 @@ public partial class MainWindow
"SHARPEMU_LOG_IO", "SHARPEMU_LOG_IO",
"SHARPEMU_LOG_NP", "SHARPEMU_LOG_NP",
"SHARPEMU_GUEST_IMAGE_CPU_SYNC", "SHARPEMU_GUEST_IMAGE_CPU_SYNC",
"SHARPEMU_RENDERDOC",
]; ];
private readonly List<string> _gameEnvironmentPassthrough = new(); private readonly List<string> _gameEnvironmentPassthrough = new();
@@ -482,6 +483,7 @@ public partial class MainWindow
("SHARPEMU_LOG_IO", GameEnvLogIoToggle), ("SHARPEMU_LOG_IO", GameEnvLogIoToggle),
("SHARPEMU_LOG_NP", GameEnvLogNpToggle), ("SHARPEMU_LOG_NP", GameEnvLogNpToggle),
("SHARPEMU_GUEST_IMAGE_CPU_SYNC", GameEnvGuestImageCpuSyncToggle), ("SHARPEMU_GUEST_IMAGE_CPU_SYNC", GameEnvGuestImageCpuSyncToggle),
("SHARPEMU_RENDERDOC", GameEnvRenderDocToggle),
]; ];
private static void SetGameOptionsOpenClass(Control control, bool active) => private static void SetGameOptionsOpenClass(Control control, bool active) =>
+54 -33
View File
@@ -892,28 +892,13 @@ SPDX-License-Identifier: GPL-2.0-or-later
<StackPanel> <StackPanel>
<Border Classes="optionsGroup"> <Border Classes="optionsGroup">
<StackPanel Spacing="8"> <StackPanel Spacing="8">
<TextBlock Classes="optionsGroupHeader" Text="{Binding [Options.Env.Group.Debug], Source={x:Static local:Localization.Instance}, x:CompileBindings=False}" />
<local:SettingRow Classes="optionRow" <local:SettingRow Classes="optionRow"
Label="SHARPEMU_BTHID_UNAVAILABLE" Label="SHARPEMU_RENDERDOC"
Description="{Binding [Options.Env.Bthid.Desc], Description="{Binding [Options.Env.RenderDoc.Desc],
Source={x:Static local:Localization.Instance}, Source={x:Static local:Localization.Instance},
x:CompileBindings=False}"> x:CompileBindings=False}">
<ToggleSwitch x:Name="GameEnvBthidToggle" <ToggleSwitch x:Name="GameEnvRenderDocToggle"
Classes="optionToggle" />
</local:SettingRow>
<local:SettingRow Classes="optionRow"
Label="SHARPEMU_DISABLE_IMPORT_LOOP_GUARD"
Description="{Binding [Options.Env.LoopGuard.Desc],
Source={x:Static local:Localization.Instance},
x:CompileBindings=False}">
<ToggleSwitch x:Name="GameEnvLoopGuardToggle"
Classes="optionToggle" />
</local:SettingRow>
<local:SettingRow Classes="optionRow"
Label="SHARPEMU_WRITABLE_APP0"
Description="{Binding [Options.Env.WritableApp0.Desc],
Source={x:Static local:Localization.Instance},
x:CompileBindings=False}">
<ToggleSwitch x:Name="GameEnvWritableApp0Toggle"
Classes="optionToggle" /> Classes="optionToggle" />
</local:SettingRow> </local:SettingRow>
<local:SettingRow Classes="optionRow" <local:SettingRow Classes="optionRow"
@@ -956,6 +941,34 @@ SPDX-License-Identifier: GPL-2.0-or-later
<ToggleSwitch x:Name="GameEnvLogNpToggle" <ToggleSwitch x:Name="GameEnvLogNpToggle"
Classes="optionToggle" /> Classes="optionToggle" />
</local:SettingRow> </local:SettingRow>
<Border Classes="optionsGroupDivider" />
<TextBlock Classes="optionsGroupHeader" Text="{Binding [Options.Env.Group.General], Source={x:Static local:Localization.Instance}, x:CompileBindings=False}" />
<local:SettingRow Classes="optionRow"
Label="SHARPEMU_BTHID_UNAVAILABLE"
Description="{Binding [Options.Env.Bthid.Desc],
Source={x:Static local:Localization.Instance},
x:CompileBindings=False}">
<ToggleSwitch x:Name="GameEnvBthidToggle"
Classes="optionToggle" />
</local:SettingRow>
<local:SettingRow Classes="optionRow"
Label="SHARPEMU_DISABLE_IMPORT_LOOP_GUARD"
Description="{Binding [Options.Env.LoopGuard.Desc],
Source={x:Static local:Localization.Instance},
x:CompileBindings=False}">
<ToggleSwitch x:Name="GameEnvLoopGuardToggle"
Classes="optionToggle" />
</local:SettingRow>
<local:SettingRow Classes="optionRow"
Label="SHARPEMU_WRITABLE_APP0"
Description="{Binding [Options.Env.WritableApp0.Desc],
Source={x:Static local:Localization.Instance},
x:CompileBindings=False}">
<ToggleSwitch x:Name="GameEnvWritableApp0Toggle"
Classes="optionToggle" />
</local:SettingRow>
<local:SettingRow Classes="optionRow" <local:SettingRow Classes="optionRow"
Label="SHARPEMU_GUEST_IMAGE_CPU_SYNC" Label="SHARPEMU_GUEST_IMAGE_CPU_SYNC"
Description="{Binding [Options.Env.GuestImageCpuSync.Desc], Description="{Binding [Options.Env.GuestImageCpuSync.Desc],
@@ -1427,19 +1440,10 @@ SPDX-License-Identifier: GPL-2.0-or-later
<StackPanel> <StackPanel>
<Border Classes="optionsGroup"> <Border Classes="optionsGroup">
<StackPanel Spacing="8"> <StackPanel Spacing="8">
<local:SettingRow x:Name="EnvBthidRow" Classes="optionRow" LabelFontFamily="Consolas,monospace" Label="SHARPEMU_BTHID_UNAVAILABLE" <TextBlock Classes="optionsGroupHeader" Text="{Binding [Options.Env.Group.Debug], Source={x:Static local:Localization.Instance}}" />
Description="{Binding [Options.Env.Bthid.Desc], Source={x:Static local:Localization.Instance}}"> <local:SettingRow x:Name="EnvRenderDocRow" Classes="optionRow" LabelFontFamily="Consolas,monospace" Label="SHARPEMU_RENDERDOC"
<ToggleSwitch x:Name="EnvBthidToggle" Classes="optionToggle" /> Description="{Binding [Options.Env.RenderDoc.Desc], Source={x:Static local:Localization.Instance}}">
</local:SettingRow> <ToggleSwitch x:Name="EnvRenderDocToggle" Classes="optionToggle" />
<local:SettingRow x:Name="EnvLoopGuardRow" Classes="optionRow" LabelFontFamily="Consolas,monospace" Label="SHARPEMU_DISABLE_IMPORT_LOOP_GUARD"
Description="{Binding [Options.Env.LoopGuard.Desc], Source={x:Static local:Localization.Instance}}">
<ToggleSwitch x:Name="EnvLoopGuardToggle" Classes="optionToggle" />
</local:SettingRow>
<local:SettingRow x:Name="EnvWritableApp0Row" Classes="optionRow" LabelFontFamily="Consolas,monospace" Label="SHARPEMU_WRITABLE_APP0"
Description="{Binding [Options.Env.WritableApp0.Desc], Source={x:Static local:Localization.Instance}}">
<ToggleSwitch x:Name="EnvWritableApp0Toggle" Classes="optionToggle" />
</local:SettingRow> </local:SettingRow>
<local:SettingRow x:Name="EnvVkValidationRow" Classes="optionRow" LabelFontFamily="Consolas,monospace" Label="SHARPEMU_VK_VALIDATION" <local:SettingRow x:Name="EnvVkValidationRow" Classes="optionRow" LabelFontFamily="Consolas,monospace" Label="SHARPEMU_VK_VALIDATION"
@@ -1467,11 +1471,28 @@ SPDX-License-Identifier: GPL-2.0-or-later
<ToggleSwitch x:Name="EnvLogNpToggle" Classes="optionToggle" /> <ToggleSwitch x:Name="EnvLogNpToggle" Classes="optionToggle" />
</local:SettingRow> </local:SettingRow>
<Border Classes="optionsGroupDivider" />
<TextBlock Classes="optionsGroupHeader" Text="{Binding [Options.Env.Group.General], Source={x:Static local:Localization.Instance}}" />
<local:SettingRow x:Name="EnvBthidRow" Classes="optionRow" LabelFontFamily="Consolas,monospace" Label="SHARPEMU_BTHID_UNAVAILABLE"
Description="{Binding [Options.Env.Bthid.Desc], Source={x:Static local:Localization.Instance}}">
<ToggleSwitch x:Name="EnvBthidToggle" Classes="optionToggle" />
</local:SettingRow>
<local:SettingRow x:Name="EnvLoopGuardRow" Classes="optionRow" LabelFontFamily="Consolas,monospace" Label="SHARPEMU_DISABLE_IMPORT_LOOP_GUARD"
Description="{Binding [Options.Env.LoopGuard.Desc], Source={x:Static local:Localization.Instance}}">
<ToggleSwitch x:Name="EnvLoopGuardToggle" Classes="optionToggle" />
</local:SettingRow>
<local:SettingRow x:Name="EnvWritableApp0Row" Classes="optionRow" LabelFontFamily="Consolas,monospace" Label="SHARPEMU_WRITABLE_APP0"
Description="{Binding [Options.Env.WritableApp0.Desc], Source={x:Static local:Localization.Instance}}">
<ToggleSwitch x:Name="EnvWritableApp0Toggle" Classes="optionToggle" />
</local:SettingRow>
<local:SettingRow x:Name="EnvGuestImageCpuSyncRow" Classes="optionRow" LabelFontFamily="Consolas,monospace" Label="SHARPEMU_GUEST_IMAGE_CPU_SYNC" <local:SettingRow x:Name="EnvGuestImageCpuSyncRow" Classes="optionRow" LabelFontFamily="Consolas,monospace" Label="SHARPEMU_GUEST_IMAGE_CPU_SYNC"
Description="{Binding [Options.Env.GuestImageCpuSync.Desc], Source={x:Static local:Localization.Instance}}"> Description="{Binding [Options.Env.GuestImageCpuSync.Desc], Source={x:Static local:Localization.Instance}}">
<ToggleSwitch x:Name="EnvGuestImageCpuSyncToggle" Classes="optionToggle" /> <ToggleSwitch x:Name="EnvGuestImageCpuSyncToggle" Classes="optionToggle" />
</local:SettingRow> </local:SettingRow>
</StackPanel> </StackPanel>
</Border> </Border>
+31
View File
@@ -309,6 +309,35 @@ public partial class MainWindow : Window
Closing += (_, _) => BeginWindowClosing(); Closing += (_, _) => BeginWindowClosing();
Closed += (_, _) => CompleteWindowClosing(); Closed += (_, _) => CompleteWindowClosing();
SdlLauncherGamepad.EnsureStarted();
_gamepadTimer = new DispatcherTimer
{
Interval = TimeSpan.FromMilliseconds(50),
};
EnvRenderDocToggle.IsCheckedChanged += (_, _) =>
SetEnvironmentToggle(
"SHARPEMU_RENDERDOC",
EnvRenderDocToggle.IsChecked == true);
DefaultProfileBox.TextChanged += (_, _) =>
_settings.DefaultProfile = GuiSettings.NormalizeDefaultProfile(DefaultProfileBox.Text);
LanguageBox.SelectionChanged += (_, _) => OnLanguageChanged();
GameList.AddHandler(ContextRequestedEvent, OnGameContextRequested, RoutingStrategies.Tunnel);
AddHandler(KeyDownEvent, OnPreviewKeyDown, RoutingStrategies.Tunnel);
CtxLaunch.Click += (_, _) => LaunchSelected();
CtxOpenFolder.Click += (_, _) => OpenSelectedGameFolder();
CtxCopyPath.Click += async (_, _) =>
await CopyToClipboardAsync((GameList.SelectedItem as GameEntry)?.Path);
CtxCopyTitleId.Click += async (_, _) =>
await CopyToClipboardAsync((GameList.SelectedItem as GameEntry)?.TitleId);
CtxGameSettings.Click += (_, _) => OpenSelectedGameSettings();
CtxRemove.Click += (_, _) => RemoveSelectedFromLibrary();
Opened += async (_, _) => await OnOpenedAsync();
Closing += (_, _) => BeginWindowClosing();
Closed += (_, _) => CompleteWindowClosing();
SdlLauncherGamepad.EnsureStarted(); SdlLauncherGamepad.EnsureStarted();
_gamepadTimer = new DispatcherTimer _gamepadTimer = new DispatcherTimer
{ {
@@ -1184,6 +1213,8 @@ public partial class MainWindow : Window
EnvLogNpToggle.IsChecked = _settings.EnvironmentToggles.Contains("SHARPEMU_LOG_NP"); EnvLogNpToggle.IsChecked = _settings.EnvironmentToggles.Contains("SHARPEMU_LOG_NP");
EnvGuestImageCpuSyncToggle.IsChecked = EnvGuestImageCpuSyncToggle.IsChecked =
_settings.EnvironmentToggles.Contains("SHARPEMU_GUEST_IMAGE_CPU_SYNC"); _settings.EnvironmentToggles.Contains("SHARPEMU_GUEST_IMAGE_CPU_SYNC");
EnvRenderDocToggle.IsChecked =
_settings.EnvironmentToggles.Contains("SHARPEMU_RENDERDOC");
DefaultProfileBox.Text = _settings.DefaultProfile; DefaultProfileBox.Text = _settings.DefaultProfile;
WindowModeBox.SelectedIndex = ChoiceIndex(_settings.WindowMode, "Windowed", "Borderless", "Exclusive"); WindowModeBox.SelectedIndex = ChoiceIndex(_settings.WindowMode, "Windowed", "Borderless", "Exclusive");
LoadHostDisplayOptions(); LoadHostDisplayOptions();
@@ -42,6 +42,27 @@ Options page section transitions and content layout
<Setter Property="Padding" Value="0" /> <Setter Property="Padding" Value="0" />
</Style> </Style>
<Style Selector="TextBlock.optionsGroupHeader">
<Setter Property="FontSize" Value="12" />
<Setter Property="FontWeight" Value="SemiBold" />
<Setter Property="Foreground" Value="#8CFFFFFF" />
<Setter Property="Margin" Value="2,0,0,10" />
</Style>
<Style Selector="Border.optionsGroupDivider">
<Setter Property="Height" Value="1" />
<Setter Property="Margin" Value="0,18,0,18" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="Background">
<LinearGradientBrush StartPoint="0%,0%" EndPoint="100%,0%">
<GradientStop Offset="0" Color="#00FFFFFF" />
<GradientStop Offset="0.06" Color="#2EFFFFFF" />
<GradientStop Offset="0.55" Color="#14FFFFFF" />
<GradientStop Offset="1" Color="#00FFFFFF" />
</LinearGradientBrush>
</Setter>
</Style>
<Style Selector="Border.optionsInfoRow"> <Style Selector="Border.optionsInfoRow">
<Setter Property="MinHeight" Value="70" /> <Setter Property="MinHeight" Value="70" />
<Setter Property="Padding" Value="18,12" /> <Setter Property="Padding" Value="18,12" />