diff --git a/Dalamud/Interface/Internal/DalamudTextureWrap.cs b/Dalamud/Interface/Internal/DalamudTextureWrap.cs
index 346b7cd24..97fb1dd0b 100644
--- a/Dalamud/Interface/Internal/DalamudTextureWrap.cs
+++ b/Dalamud/Interface/Internal/DalamudTextureWrap.cs
@@ -21,6 +21,14 @@ public class DalamudTextureWrap : TextureWrap
this.wrappedWrap = wrappingWrap;
}
+ ///
+ /// Finalizes an instance of the class.
+ ///
+ ~DalamudTextureWrap()
+ {
+ this.Dispose(false);
+ }
+
///
/// Gets the ImGui handle of the texture.
///
@@ -41,7 +49,8 @@ public class DalamudTextureWrap : TextureWrap
///
public void Dispose()
{
- Service.Get().EnqueueDeferredDispose(this);
+ this.Dispose(true);
+ GC.SuppressFinalize(this);
}
///
@@ -51,4 +60,12 @@ public class DalamudTextureWrap : TextureWrap
{
this.wrappedWrap.Dispose();
}
+
+ private void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ Service.GetNullable()?.EnqueueDeferredDispose(this);
+ }
+ }
}
diff --git a/Dalamud/Interface/Internal/InterfaceManager.cs b/Dalamud/Interface/Internal/InterfaceManager.cs
index aa721ad39..9a8da773c 100644
--- a/Dalamud/Interface/Internal/InterfaceManager.cs
+++ b/Dalamud/Interface/Internal/InterfaceManager.cs
@@ -606,12 +606,16 @@ internal class InterfaceManager : IDisposable, IServiceType
this.RenderImGui();
- foreach (var texture in this.deferredDisposeTextures)
+ if (this.deferredDisposeTextures.Count > 0)
{
- texture.RealDispose();
- }
+ Log.Verbose("[IM] Disposing {Count} textures", this.deferredDisposeTextures.Count);
+ foreach (var texture in this.deferredDisposeTextures)
+ {
+ texture.RealDispose();
+ }
- this.deferredDisposeTextures.Clear();
+ this.deferredDisposeTextures.Clear();
+ }
return this.presentHook.Original(swapChain, syncInterval, presentFlags);
}