From a507eeb1cd778562e88e7d64cfafb94d09c937db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Sat, 1 Jul 2023 12:49:17 +0200 Subject: [PATCH] Kind of fixed a memory leak --- GlitchyEngine/src/Helper.bf | 10 ++++++++++ GlitchyEngine/src/Renderer/Effect.bf | 26 +++++++------------------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/GlitchyEngine/src/Helper.bf b/GlitchyEngine/src/Helper.bf index 1a597a1..4e26070 100644 --- a/GlitchyEngine/src/Helper.bf +++ b/GlitchyEngine/src/Helper.bf @@ -1,6 +1,7 @@ using DirectX.Common; using GlitchyEngine.Core; using System.Collections; +using System; namespace GlitchyEngine { @@ -15,6 +16,15 @@ namespace GlitchyEngine oldDest?.ReleaseRef(); } + /// Releases the reference to destination, writes newValue into it and adds a reference to newValue. + public static mixin SetReferenceVar(T destination, T newValue) where T: var + { + var oldDest = destination; + destination = newValue; + destination?.AddRef(); + oldDest?.Release(); + } + /// Releases the reference to value and nullifies it. public static mixin ReleaseRefAndNullify(T value) where T: RefCounter { diff --git a/GlitchyEngine/src/Renderer/Effect.bf b/GlitchyEngine/src/Renderer/Effect.bf index ff2fd1c..fea27fb 100644 --- a/GlitchyEngine/src/Renderer/Effect.bf +++ b/GlitchyEngine/src/Renderer/Effect.bf @@ -247,7 +247,7 @@ public class Effect : Asset { Debug.Profiler.ProfileRendererFunction!(); - [Inline]InternalSetTexture(name, textureViewBinding..AddRef()); + [Inline]InternalSetTexture(name, textureViewBinding); } private void InternalSetTexture(String name, TextureViewBinding textureViewBinding) @@ -256,29 +256,17 @@ public class Effect : Asset ref TextureEntry entry = ref _textures[name]; + // TODO: Thats weird, we increment this reference somewhere... but WHERE?! entry.BoundTexture.Release(); entry.BoundTexture = textureViewBinding; - entry.VsSlot?.BoundTexture..Release() = entry.BoundTexture..AddRef(); - entry.PsSlot?.BoundTexture..Release() = entry.BoundTexture..AddRef(); + if (entry.VsSlot != null) + SetReferenceVar!(entry.VsSlot.BoundTexture, entry.BoundTexture); + + if (entry.PsSlot != null) + SetReferenceVar!(entry.PsSlot.BoundTexture, entry.BoundTexture); } - /*private void ApplyTextures() - { - Debug.Profiler.ProfileRendererFunction!(); - - for(let (name, entry) in _textures) - { - entry.VsSlot?.BoundTexture.Release(); - entry.VsSlot?.BoundTexture = entry.BoundTexture; - entry.VsSlot?.BoundTexture.AddRef(); - - entry.PsSlot?.BoundTexture.Release(); - entry.PsSlot?.BoundTexture = entry.BoundTexture; - entry.PsSlot?.BoundTexture.AddRef(); - } - }*/ - public void ApplyChanges() { Debug.Profiler.ProfileRendererFunction!();