diff --git a/src/Graphics/GraphicsDevice.cs b/src/Graphics/GraphicsDevice.cs index f821a6d..c1057d6 100644 --- a/src/Graphics/GraphicsDevice.cs +++ b/src/Graphics/GraphicsDevice.cs @@ -18,7 +18,7 @@ namespace MoonWorks.Graphics public bool IsDisposed { get; private set; } - private readonly List> resources = new List>(); + private readonly HashSet> resources = new HashSet>(); public GraphicsDevice( Backend preferredBackend, @@ -237,10 +237,9 @@ namespace MoonWorks.Graphics { lock (resources) { - for (var i = resources.Count - 1; i >= 0; i--) + foreach (var weakReference in resources) { - var resource = resources[i]; - if (resource.TryGetTarget(out var target)) + if (weakReference.TryGetTarget(out var target)) { target.Dispose(); } diff --git a/src/Graphics/GraphicsResource.cs b/src/Graphics/GraphicsResource.cs index 2e68546..0819a63 100644 --- a/src/Graphics/GraphicsResource.cs +++ b/src/Graphics/GraphicsResource.cs @@ -10,7 +10,7 @@ namespace MoonWorks.Graphics public bool IsDisposed { get; private set; } protected abstract Action QueueDestroyFunction { get; } - private WeakReference selfReference; + internal WeakReference weakReference; public GraphicsResource(GraphicsDevice device, bool trackResource = true) { @@ -18,8 +18,8 @@ namespace MoonWorks.Graphics if (trackResource) { - selfReference = new WeakReference(this); - Device.AddResourceReference(selfReference); + weakReference = new WeakReference(this); + Device.AddResourceReference(weakReference); } } @@ -27,11 +27,11 @@ namespace MoonWorks.Graphics { if (!IsDisposed) { - if (selfReference != null) + if (weakReference != null) { QueueDestroyFunction(Device.Handle, Handle); - Device.RemoveResourceReference(selfReference); - selfReference = null; + Device.RemoveResourceReference(weakReference); + weakReference = null; } IsDisposed = true;