@@ -85,6 +85,8 @@ public class LevelFrame : Frame
8585
8686 private List < Frame > subFrames ;
8787
88+ private void ToolboxOnToolChanged ( object ? sender , EventArgs e ) => InvalidateView ( ) ;
89+
8890 public LevelFrame ( Window wnd , string res ) : base ( wnd )
8991 {
9092 level = new Level ( res ) ;
@@ -102,7 +104,7 @@ public LevelFrame(Window wnd, string res) : base(wnd)
102104 selectedObjects = new Selection ( ) ;
103105 selectedObjects . CollectionChanged += SelectedObjectsOnCollectionChanged ;
104106
105- toolbox . ToolChanged += ( _ , _ ) => InvalidateView ( ) ;
107+ toolbox . ToolChanged += ToolboxOnToolChanged ;
106108
107109 rendererPayload = new RendererPayload ( camera , selectedObjects , toolbox , showBangles ) ;
108110
@@ -524,7 +526,15 @@ public override void Render(float deltaTime)
524526
525527 private void RenderSubFrames ( float deltaTime )
526528 {
529+ foreach ( Frame levelSubFrame in subFrames )
530+ {
531+ if ( FrameMustClose ( levelSubFrame ) )
532+ {
533+ levelSubFrame . Dispose ( ) ;
534+ }
535+ }
527536 subFrames . RemoveAll ( FrameMustClose ) ;
537+
528538 foreach ( Frame levelSubFrame in subFrames )
529539 {
530540 levelSubFrame . RenderAsWindow ( deltaTime ) ;
@@ -1055,14 +1065,12 @@ public void InvalidateView()
10551065
10561066 public bool StartMemoryHook ( ref string message )
10571067 {
1068+ hook ? . Dispose ( ) ;
10581069 hook = new MemoryHook . MemoryHookHandle ( level ) ;
10591070
10601071 message = hook . GetLastErrorMessage ( ) ;
10611072
1062- if ( hook . hookWorking )
1063- {
1064- interactiveSession = true ;
1065- }
1073+ interactiveSession = hook . hookWorking ;
10661074
10671075 return hook . hookWorking ;
10681076 }
@@ -1105,6 +1113,41 @@ public void AddSubFrame(Frame frame)
11051113 {
11061114 if ( ! subFrames . Contains ( frame ) ) subFrames . Add ( frame ) ;
11071115 }
1116+
1117+ public override void Dispose ( )
1118+ {
1119+ hook ? . Dispose ( ) ;
1120+
1121+ selectedObjects . CollectionChanged -= SelectedObjectsOnCollectionChanged ;
1122+ toolbox . ToolChanged -= ToolboxOnToolChanged ;
1123+ toolbox ? . Dispose ( ) ;
1124+
1125+ base . Dispose ( ) ;
1126+
1127+ if ( subFrames != null )
1128+ {
1129+ foreach ( var subFrame in subFrames )
1130+ {
1131+ subFrame . Dispose ( ) ;
1132+ }
1133+ subFrames . Clear ( ) ;
1134+ }
1135+
1136+ renderer ? . Dispose ( ) ;
1137+ levelRenderer ? . Dispose ( ) ;
1138+ shaderTable ? . Dispose ( ) ;
1139+
1140+ if ( textureIds != null )
1141+ {
1142+ foreach ( var texture in textureIds . Values )
1143+ {
1144+ texture . Dispose ( ) ;
1145+ }
1146+ textureIds . Clear ( ) ;
1147+ }
1148+
1149+ level ? . Dispose ( ) ;
1150+ }
11081151 }
11091152
11101153}
0 commit comments