aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Headless.SDL2
diff options
context:
space:
mode:
authorAc_K <Acoustik666@gmail.com>2023-03-31 21:16:46 +0200
committerGitHub <noreply@github.com>2023-03-31 21:16:46 +0200
commit4c2d9ff3ff9d7afb1fd0bd764bee5931fa5f053c (patch)
tree1245f5ec356551bd20a9594d114d06a53c41d036 /Ryujinx.Headless.SDL2
parent8198b99935f562ffb2fb9a75175a8df24d235152 (diff)
HLE: Refactoring of ApplicationLoader (#4480)
* HLE: Refactoring of ApplicationLoader * Fix SDL2 Headless * Addresses gdkchan feedback * Fixes LoadUnpackedNca RomFS loading * remove useless casting * Cleanup and fixe empty application name * Remove ProcessInfo * Fixes typo * ActiveProcess to ActiveApplication * Update check * Clean using. * Use the correct filepath when loading Homebrew.npdm * Fix NRE in ProcessResult if MetaLoader is null * Add more checks for valid processId & return success * Add missing logging statement for npdm error * Return result for LoadKip() * Move error logging out of PFS load extension method This avoids logging "Could not find Main NCA" followed by "Loading main..." when trying to start hbl. * Fix GUIs not checking load results * Fix style and formatting issues * Fix formatting and wording * gtk: Refactor LoadApplication() --------- Co-authored-by: TSR Berry <20988865+TSRBerry@users.noreply.github.com>
Diffstat (limited to 'Ryujinx.Headless.SDL2')
-rw-r--r--Ryujinx.Headless.SDL2/Program.cs57
-rw-r--r--Ryujinx.Headless.SDL2/WindowBase.cs18
2 files changed, 55 insertions, 20 deletions
diff --git a/Ryujinx.Headless.SDL2/Program.cs b/Ryujinx.Headless.SDL2/Program.cs
index f618e38d..54ab18cd 100644
--- a/Ryujinx.Headless.SDL2/Program.cs
+++ b/Ryujinx.Headless.SDL2/Program.cs
@@ -447,10 +447,10 @@ namespace Ryujinx.Headless.SDL2
private static void SetupProgressHandler()
{
- if (_emulationContext.Application.DiskCacheLoadState != null)
+ if (_emulationContext.Processes.ActiveApplication.DiskCacheLoadState != null)
{
- _emulationContext.Application.DiskCacheLoadState.StateChanged -= ProgressHandler;
- _emulationContext.Application.DiskCacheLoadState.StateChanged += ProgressHandler;
+ _emulationContext.Processes.ActiveApplication.DiskCacheLoadState.StateChanged -= ProgressHandler;
+ _emulationContext.Processes.ActiveApplication.DiskCacheLoadState.StateChanged += ProgressHandler;
}
_emulationContext.Gpu.ShaderCacheStateChanged -= ProgressHandler;
@@ -608,12 +608,24 @@ namespace Ryujinx.Headless.SDL2
if (romFsFiles.Length > 0)
{
Logger.Info?.Print(LogClass.Application, "Loading as cart with RomFS.");
- _emulationContext.LoadCart(path, romFsFiles[0]);
+
+ if (!_emulationContext.LoadCart(path, romFsFiles[0]))
+ {
+ _emulationContext.Dispose();
+
+ return false;
+ }
}
else
{
Logger.Info?.Print(LogClass.Application, "Loading as cart WITHOUT RomFS.");
- _emulationContext.LoadCart(path);
+
+ if (!_emulationContext.LoadCart(path))
+ {
+ _emulationContext.Dispose();
+
+ return false;
+ }
}
}
else if (File.Exists(path))
@@ -622,27 +634,52 @@ namespace Ryujinx.Headless.SDL2
{
case ".xci":
Logger.Info?.Print(LogClass.Application, "Loading as XCI.");
- _emulationContext.LoadXci(path);
+
+ if (!_emulationContext.LoadXci(path))
+ {
+ _emulationContext.Dispose();
+
+ return false;
+ }
break;
case ".nca":
Logger.Info?.Print(LogClass.Application, "Loading as NCA.");
- _emulationContext.LoadNca(path);
+
+ if (!_emulationContext.LoadNca(path))
+ {
+ _emulationContext.Dispose();
+
+ return false;
+ }
break;
case ".nsp":
case ".pfs0":
Logger.Info?.Print(LogClass.Application, "Loading as NSP.");
- _emulationContext.LoadNsp(path);
+
+ if (!_emulationContext.LoadNsp(path))
+ {
+ _emulationContext.Dispose();
+
+ return false;
+ }
break;
default:
Logger.Info?.Print(LogClass.Application, "Loading as Homebrew.");
try
{
- _emulationContext.LoadProgram(path);
+ if (!_emulationContext.LoadProgram(path))
+ {
+ _emulationContext.Dispose();
+
+ return false;
+ }
}
catch (ArgumentOutOfRangeException)
{
Logger.Error?.Print(LogClass.Application, "The specified file is not supported by Ryujinx.");
+ _emulationContext.Dispose();
+
return false;
}
break;
@@ -664,4 +701,4 @@ namespace Ryujinx.Headless.SDL2
return true;
}
}
-} \ No newline at end of file
+}
diff --git a/Ryujinx.Headless.SDL2/WindowBase.cs b/Ryujinx.Headless.SDL2/WindowBase.cs
index db6c8ec4..e3371042 100644
--- a/Ryujinx.Headless.SDL2/WindowBase.cs
+++ b/Ryujinx.Headless.SDL2/WindowBase.cs
@@ -145,16 +145,14 @@ namespace Ryujinx.Headless.SDL2
private void InitializeWindow()
{
- string titleNameSection = string.IsNullOrWhiteSpace(Device.Application.TitleName) ? string.Empty
- : $" - {Device.Application.TitleName}";
-
- string titleVersionSection = string.IsNullOrWhiteSpace(Device.Application.DisplayVersion) ? string.Empty
- : $" v{Device.Application.DisplayVersion}";
-
- string titleIdSection = string.IsNullOrWhiteSpace(Device.Application.TitleIdText) ? string.Empty
- : $" ({Device.Application.TitleIdText.ToUpper()})";
-
- string titleArchSection = Device.Application.TitleIs64Bit ? " (64-bit)" : " (32-bit)";
+ var activeProcess = Device.Processes.ActiveApplication;
+ var nacp = activeProcess.ApplicationControlProperties;
+ int desiredLanguage = (int)Device.System.State.DesiredTitleLanguage;
+
+ string titleNameSection = string.IsNullOrWhiteSpace(nacp.Title[desiredLanguage].NameString.ToString()) ? string.Empty : $" - {nacp.Title[desiredLanguage].NameString.ToString()}";
+ string titleVersionSection = string.IsNullOrWhiteSpace(nacp.DisplayVersionString.ToString()) ? string.Empty : $" v{nacp.DisplayVersionString.ToString()}";
+ string titleIdSection = string.IsNullOrWhiteSpace(activeProcess.ProgramIdText) ? string.Empty : $" ({activeProcess.ProgramIdText.ToUpper()})";
+ string titleArchSection = activeProcess.Is64Bit ? " (64-bit)" : " (32-bit)";
WindowHandle = SDL_CreateWindow($"Ryujinx {Program.Version}{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, DefaultWidth, DefaultHeight, DefaultFlags | GetWindowFlags());