mirror of
https://github.com/par274/sharpemu.git
synced 2026-08-08 18:55:41 +08:00
[gui] added renderdoc toggle and debug group
This commit is contained in:
@@ -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) =>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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" />
|
||||||
|
|||||||
Reference in New Issue
Block a user