mirror of
https://github.com/goatcorp/Dalamud.git
synced 2026-01-02 05:43:40 +01:00
ReShade related fixes (#1963)
* Handle ReShadeAddonInterface ctor exceptions * Lower ReShadeApiVersion to 1 * fixes
This commit is contained in:
parent
ec269f483e
commit
1380a55935
1 changed files with 38 additions and 14 deletions
|
|
@ -15,7 +15,7 @@ namespace Dalamud.Interface.Internal.ReShadeHandling;
|
|||
/// <summary>ReShade interface.</summary>
|
||||
internal sealed unsafe partial class ReShadeAddonInterface : IDisposable
|
||||
{
|
||||
private const int ReShadeApiVersion = 12;
|
||||
private const int ReShadeApiVersion = 1;
|
||||
|
||||
private readonly HMODULE hDalamudModule;
|
||||
|
||||
|
|
@ -25,6 +25,8 @@ internal sealed unsafe partial class ReShadeAddonInterface : IDisposable
|
|||
private readonly DelegateStorage<ReShadeInitSwapChain> initSwapChainDelegate;
|
||||
private readonly DelegateStorage<ReShadeDestroySwapChain> destroySwapChainDelegate;
|
||||
|
||||
private bool requiresFinalize;
|
||||
|
||||
private ReShadeAddonInterface()
|
||||
{
|
||||
this.hDalamudModule = (HMODULE)Marshal.GetHINSTANCE(typeof(ReShadeAddonInterface).Assembly.ManifestModule);
|
||||
|
|
@ -40,16 +42,37 @@ internal sealed unsafe partial class ReShadeAddonInterface : IDisposable
|
|||
0,
|
||||
this.GetModuleHandleExWDetour);
|
||||
|
||||
this.addonModuleResolverHook.Enable();
|
||||
Exports.ReShadeRegisterEvent(
|
||||
AddonEvent.ReShadeOverlay,
|
||||
this.reShadeOverlayDelegate = new((ref ApiObject rt) => this.ReShadeOverlay?.Invoke(ref rt)));
|
||||
Exports.ReShadeRegisterEvent(
|
||||
AddonEvent.InitSwapChain,
|
||||
this.initSwapChainDelegate = new((ref ApiObject rt) => this.InitSwapChain?.Invoke(ref rt)));
|
||||
Exports.ReShadeRegisterEvent(
|
||||
AddonEvent.DestroySwapChain,
|
||||
this.destroySwapChainDelegate = new((ref ApiObject rt) => this.DestroySwapChain?.Invoke(ref rt)));
|
||||
try
|
||||
{
|
||||
this.addonModuleResolverHook.Enable();
|
||||
Exports.ReShadeRegisterEvent(
|
||||
AddonEvent.ReShadeOverlay,
|
||||
this.reShadeOverlayDelegate = new((ref ApiObject rt) => this.ReShadeOverlay?.Invoke(ref rt)));
|
||||
Exports.ReShadeRegisterEvent(
|
||||
AddonEvent.InitSwapChain,
|
||||
this.initSwapChainDelegate = new((ref ApiObject rt) => this.InitSwapChain?.Invoke(ref rt)));
|
||||
Exports.ReShadeRegisterEvent(
|
||||
AddonEvent.DestroySwapChain,
|
||||
this.destroySwapChainDelegate = new((ref ApiObject rt) => this.DestroySwapChain?.Invoke(ref rt)));
|
||||
}
|
||||
catch (Exception e1)
|
||||
{
|
||||
Exports.ReShadeUnregisterAddon(this.hDalamudModule);
|
||||
|
||||
try
|
||||
{
|
||||
this.addonModuleResolverHook.Disable();
|
||||
this.addonModuleResolverHook.Dispose();
|
||||
}
|
||||
catch (Exception e2)
|
||||
{
|
||||
throw new AggregateException(e1, e2);
|
||||
}
|
||||
|
||||
throw;
|
||||
}
|
||||
|
||||
this.requiresFinalize = true;
|
||||
}
|
||||
|
||||
/// <summary>Finalizes an instance of the <see cref="ReShadeAddonInterface"/> class.</summary>
|
||||
|
|
@ -104,9 +127,10 @@ internal sealed unsafe partial class ReShadeAddonInterface : IDisposable
|
|||
|
||||
private void ReleaseUnmanagedResources()
|
||||
{
|
||||
Exports.ReShadeUnregisterEvent(AddonEvent.InitSwapChain, this.initSwapChainDelegate);
|
||||
Exports.ReShadeUnregisterEvent(AddonEvent.DestroySwapChain, this.destroySwapChainDelegate);
|
||||
Exports.ReShadeUnregisterEvent(AddonEvent.ReShadeOverlay, this.reShadeOverlayDelegate);
|
||||
if (!this.requiresFinalize)
|
||||
return;
|
||||
this.requiresFinalize = false;
|
||||
// This will also unregister addon event registrations.
|
||||
Exports.ReShadeUnregisterAddon(this.hDalamudModule);
|
||||
this.addonModuleResolverHook.Disable();
|
||||
this.addonModuleResolverHook.Dispose();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue