diff options
| author | Emmanuel Hansen <emmausssss@gmail.com> | 2022-08-16 16:32:37 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-16 16:32:37 +0000 |
| commit | c8f9292babd5aa6021ce1bd6a977130baebb7de3 (patch) | |
| tree | e6e62d79d08726129485476078732f9b89f6ab5c /Ryujinx.Ava/Ui/ViewModels | |
| parent | 0ec933a6152ebb7724da1e3a05a5ae1c2ea07b2f (diff) | |
Avalonia - Couple fixes and improvements to vulkan (#3483)
* drop split devices, rebase
* add fallback to opengl if vulkan is not available
* addressed review
* ensure present image references are incremented and decremented when necessary
* allow changing vsync for vulkan
* fix screenshot on avalonia vulkan
* save favorite when toggled
* improve sync between popups
* use separate devices for each new window
* fix crash when closing window
* addressed review
* don't create the main window with immediate mode
* change skia vk delegate to method
* update vulkan throwonerror
* addressed review
Diffstat (limited to 'Ryujinx.Ava/Ui/ViewModels')
| -rw-r--r-- | Ryujinx.Ava/Ui/ViewModels/MainWindowViewModel.cs | 15 | ||||
| -rw-r--r-- | Ryujinx.Ava/Ui/ViewModels/SettingsViewModel.cs | 45 |
2 files changed, 48 insertions, 12 deletions
diff --git a/Ryujinx.Ava/Ui/ViewModels/MainWindowViewModel.cs b/Ryujinx.Ava/Ui/ViewModels/MainWindowViewModel.cs index cd756d68..98516159 100644 --- a/Ryujinx.Ava/Ui/ViewModels/MainWindowViewModel.cs +++ b/Ryujinx.Ava/Ui/ViewModels/MainWindowViewModel.cs @@ -38,6 +38,8 @@ namespace Ryujinx.Ava.Ui.ViewModels { internal class MainWindowViewModel : BaseModel { + private const int HotKeyPressDelayMs = 500; + private readonly MainWindow _owner; private ObservableCollection<ApplicationData> _applications; private string _aspectStatusText; @@ -54,6 +56,7 @@ namespace Ryujinx.Ava.Ui.ViewModels private bool _isLoading; private int _progressMaximum; private int _progressValue; + private long _lastFullscreenToggle = Environment.TickCount64; private bool _showLoadProgress; private bool _showMenuAndStatusBar = true; private bool _showStatusSeparator; @@ -929,6 +932,13 @@ namespace Ryujinx.Ava.Ui.ViewModels public void ToggleFullscreen() { + if (Environment.TickCount64 - _lastFullscreenToggle < HotKeyPressDelayMs) + { + return; + } + + _lastFullscreenToggle = Environment.TickCount64; + WindowState state = _owner.WindowState; if (state == WindowState.FullScreen) @@ -1085,6 +1095,11 @@ namespace Ryujinx.Ava.Ui.ViewModels { selection.Favorite = !selection.Favorite; + _owner.ApplicationLibrary.LoadAndSaveMetaData(selection.TitleId, appMetadata => + { + appMetadata.Favorite = selection.Favorite; + }); + RefreshView(); } } diff --git a/Ryujinx.Ava/Ui/ViewModels/SettingsViewModel.cs b/Ryujinx.Ava/Ui/ViewModels/SettingsViewModel.cs index 7b08923e..a7cf710e 100644 --- a/Ryujinx.Ava/Ui/ViewModels/SettingsViewModel.cs +++ b/Ryujinx.Ava/Ui/ViewModels/SettingsViewModel.cs @@ -48,6 +48,10 @@ namespace Ryujinx.Ava.Ui.ViewModels private int _graphicsBackendMultithreadingIndex; private float _previousVolumeLevel; private float _volume; + private bool _isVulkanAvailable = true; + private List<string> _gpuIds = new List<string>(); + private KeyboardHotkeys _keyboardHotkeys; + private int _graphicsBackendIndex; public int ResolutionScale { @@ -97,6 +101,17 @@ namespace Ryujinx.Ava.Ui.ViewModels } } + public bool IsVulkanAvailable + { + get => _isVulkanAvailable; + set + { + _isVulkanAvailable = value; + + OnPropertyChanged(); + } + } + public bool EnableDiscordIntegration { get; set; } public bool CheckUpdatesOnStart { get; set; } public bool ShowConfirmExit { get; set; } @@ -143,10 +158,10 @@ namespace Ryujinx.Ava.Ui.ViewModels public int BaseStyleIndex { get; set; } public int GraphicsBackendIndex { - get => graphicsBackendIndex; + get => _graphicsBackendIndex; set { - graphicsBackendIndex = value; + _graphicsBackendIndex = value; OnPropertyChanged(); OnPropertyChanged(nameof(IsVulkanSelected)); } @@ -170,14 +185,9 @@ namespace Ryujinx.Ava.Ui.ViewModels public DateTimeOffset DateOffset { get; set; } public TimeSpan TimeOffset { get; set; } public AvaloniaList<TimeZone> TimeZones { get; set; } - public AvaloniaList<string> GameDirectories { get; set; } public ObservableCollection<ComboBoxItem> AvailableGpus { get; set; } - private KeyboardHotkeys _keyboardHotkeys; - private int graphicsBackendIndex; - private List<string> _gpuIds = new List<string>(); - public KeyboardHotkeys KeyboardHotkeys { get => _keyboardHotkeys; @@ -233,20 +243,31 @@ namespace Ryujinx.Ava.Ui.ViewModels if (!Program.UseVulkan) { var devices = VulkanRenderer.GetPhysicalDevices(); - foreach (var device in devices) + + if (devices.Length == 0) { - _gpuIds.Add(device.Id); - names.Add($"{device.Name} {(device.IsDiscrete ? "(dGpu)" : "")}"); + IsVulkanAvailable = false; + GraphicsBackendIndex = 1; + } + else + { + foreach (var device in devices) + { + _gpuIds.Add(device.Id); + names.Add($"{device.Name} {(device.IsDiscrete ? "(dGPU)" : "")}"); + } } } else { foreach (var device in VulkanPhysicalDevice.SuitableDevices) { - _gpuIds.Add(VulkanInitialization.StringFromIdPair(device.Value.VendorID, device.Value.DeviceID)); + _gpuIds.Add( + VulkanInitialization.StringFromIdPair(device.Value.VendorID, device.Value.DeviceID)); var value = device.Value; var name = value.DeviceName; - names.Add($"{Marshal.PtrToStringAnsi((IntPtr)name)} {(device.Value.DeviceType == PhysicalDeviceType.DiscreteGpu ? "(dGpu)" : "")}"); + names.Add( + $"{Marshal.PtrToStringAnsi((IntPtr)name)} {(device.Value.DeviceType == PhysicalDeviceType.DiscreteGpu ? "(dGPU)" : "")}"); } } |
