diff --git a/BizHawk.Client.EmuHawk/DisplayManager/Filters/Retro.cs b/BizHawk.Client.EmuHawk/DisplayManager/Filters/Retro.cs
index 72e20b9c7f..ca756988c6 100644
--- a/BizHawk.Client.EmuHawk/DisplayManager/Filters/Retro.cs
+++ b/BizHawk.Client.EmuHawk/DisplayManager/Filters/Retro.cs
@@ -45,36 +45,39 @@ namespace BizHawk.Client.EmuHawk.Filters
Owner = owner;
this.Preset = preset;
Passes = preset.Passes.ToArray();
-
- bool ok = true;
Errors = "";
//load up the shaders
Shaders = new RetroShader[preset.Passes.Count];
- for (int i = 0; i < preset.Passes.Count; i++)
+ for (var i = 0; i < preset.Passes.Count; i++)
{
- RetroShaderPreset.ShaderPass pass = preset.Passes[i];
-
//acquire content
- string path = Path.Combine(baseDirectory, pass.ShaderPath);
- if (!File.Exists(path))
+ var path = Path.Combine(baseDirectory, preset.Passes[i].ShaderPath);
+ string content;
+ try
{
- ok = false;
- break;
+ content = ResolveIncludes(File.ReadAllText(path), Path.GetDirectoryName(path));
+ }
+ catch (DirectoryNotFoundException e)
+ {
+ Errors += $"caught {nameof(DirectoryNotFoundException)}: {e.Message}\n";
+ return;
+ }
+ catch (FileNotFoundException e)
+ {
+ Errors += $"could not read file {e.FileName}\n";
+ return;
}
- string content = ResolveIncludes(File.ReadAllText(path), Path.GetDirectoryName(path));
-
- var shader = new RetroShader(Owner, content, debug);
- Shaders[i] = shader;
+ var shader = Shaders[i] = new RetroShader(Owner, content, debug);
if (!shader.Available)
{
- Errors += $"===================\r\nPass {i}:\r\n{shader.Errors}";
- ok = false;
+ Errors += $"===================\r\nPass {i}:\r\n{shader.Errors}\n";
+ return;
}
}
- Available = ok;
+ Available = true;
}
public void Dispose()
@@ -85,12 +88,9 @@ namespace BizHawk.Client.EmuHawk.Filters
_isDisposed = true;
}
- ///
- /// Whether this shader chain is available (it wont be available if some resources failed to load or compile)
- ///
- public bool Available { get; private set; }
- public string Errors { get; private set; }
-
+ /// Whether this shader chain is available (it wont be available if some resources failed to load or compile)
+ public readonly bool Available;
+ public readonly string Errors;
public readonly IGL Owner;
public readonly RetroShaderPreset Preset;
public readonly RetroShader[] Shaders;