From 0236130df1b7d2e02c1f817ab8b702e334ce3d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Mon, 24 Feb 2025 23:00:09 +0100 Subject: [PATCH] Fixed crashes due to wrong use of append allocations --- GlitchyEngine/src/Application.bf | 6 ++++-- GlitchyEngine/src/GameTime.bf | 2 +- GlitchyEngine/src/LayerStack.bf | 9 +++++++- GlitchyEngine/src/Scripting/ScriptEngine.bf | 21 ++++++++++++------- .../src/Scripting/ScriptInstanceSerializer.bf | 1 - 5 files changed, 26 insertions(+), 13 deletions(-) diff --git a/GlitchyEngine/src/Application.bf b/GlitchyEngine/src/Application.bf index 994980e..143fbd7 100644 --- a/GlitchyEngine/src/Application.bf +++ b/GlitchyEngine/src/Application.bf @@ -20,13 +20,13 @@ namespace GlitchyEngine private bool _running = true; private bool _isMinimized = false; - private append LayerStack _layerStack = .() ~ delete:append _; + private append LayerStack _layerStack = .(); #if IMGUI private ImGuiLayer _imGuiLayer; #endif - private append GameTime _gameTime = .() ~ delete:append _; + private append GameTime _gameTime = .(); private IContentManager _contentManager; @@ -98,6 +98,8 @@ namespace GlitchyEngine { Profiler.ProfileFunction!(); + _layerStack.ClearLayers(); + SamplerStateManager.Uninit(); Renderer.Deinit(); diff --git a/GlitchyEngine/src/GameTime.bf b/GlitchyEngine/src/GameTime.bf index 2a620c8..0683f39 100644 --- a/GlitchyEngine/src/GameTime.bf +++ b/GlitchyEngine/src/GameTime.bf @@ -8,7 +8,7 @@ namespace GlitchyEngine */ public class GameTime { - private append Stopwatch _stopwatch = .() ~ delete:append _; + private append Stopwatch _stopwatch = .(); private uint64 _frameCount; diff --git a/GlitchyEngine/src/LayerStack.bf b/GlitchyEngine/src/LayerStack.bf index 3aae661..9b0ebc9 100644 --- a/GlitchyEngine/src/LayerStack.bf +++ b/GlitchyEngine/src/LayerStack.bf @@ -4,15 +4,22 @@ namespace GlitchyEngine { public class LayerStack { - private List _layers = new List() ~ delete _; + private append List _layers = .(); public ~this() + { + ClearLayers(); + } + + public void ClearLayers() { for(let layer in _layers) { layer.OnDetach(); delete layer; } + + _layers.Clear(); } /* diff --git a/GlitchyEngine/src/Scripting/ScriptEngine.bf b/GlitchyEngine/src/Scripting/ScriptEngine.bf index bfbe278..f7c7026 100644 --- a/GlitchyEngine/src/Scripting/ScriptEngine.bf +++ b/GlitchyEngine/src/Scripting/ScriptEngine.bf @@ -16,18 +16,18 @@ class EngineClasses { // TODO: Not all of these are actually ScriptClasses (actually none of them are...) - private ScriptClass s_ComponentRoot ~ _?.ReleaseRef(); - private ScriptClass s_EntityRoot ~ _?.ReleaseRef(); - private ScriptClass s_EngineObject ~ _?.ReleaseRef(); + private ScriptClass s_ComponentRoot; + private ScriptClass s_EntityRoot; + private ScriptClass s_EngineObject; - private EntityEditorWrapper s_EntityEditor ~ _?.ReleaseRef(); + private EntityEditorWrapper s_EntityEditor; - private EntitySerializerWrapper s_EntitySerializer ~ _?.ReleaseRef(); - private ScriptClass s_SerializationContext ~ _?.ReleaseRef(); + private EntitySerializerWrapper s_EntitySerializer; + private ScriptClass s_SerializationContext; - private ScriptClass s_Collision2D ~ _?.ReleaseRef(); + private ScriptClass s_Collision2D; - private ScriptClass s_RunInEditModeAttribute ~ _?.ReleaseRef(); + private ScriptClass s_RunInEditModeAttribute; public ScriptClass ComponentRoot => s_ComponentRoot; public ScriptClass EntityRoot => s_EntityRoot; @@ -41,6 +41,11 @@ class EngineClasses public ScriptClass RunInEditModeAttribute => s_RunInEditModeAttribute; + public ~this() + { + ReleaseAndNullify(); + } + internal void ReleaseAndNullify() { ReleaseRefAndNullify!(s_EngineObject); diff --git a/GlitchyEngine/src/Scripting/ScriptInstanceSerializer.bf b/GlitchyEngine/src/Scripting/ScriptInstanceSerializer.bf index bc9e58b..65d91f2 100644 --- a/GlitchyEngine/src/Scripting/ScriptInstanceSerializer.bf +++ b/GlitchyEngine/src/Scripting/ScriptInstanceSerializer.bf @@ -18,7 +18,6 @@ public class ScriptInstanceSerializer public ~this() { Clear(); - delete:append _serializedData; } public void Clear()