From d0a98ee9dd4d50876baf05f4da3d172ba8db3fa4 Mon Sep 17 00:00:00 2001 From: HF Date: Sun, 21 Jan 2024 20:57:50 +0100 Subject: [PATCH] clean some THREEjs memory leaks (some still left) --- src/ui/Renderer2D.js | 1 - src/ui/Renderer3D.js | 23 +++++++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/ui/Renderer2D.js b/src/ui/Renderer2D.js index 5e3fd9fc..c0fc74e7 100644 --- a/src/ui/Renderer2D.js +++ b/src/ui/Renderer2D.js @@ -114,7 +114,6 @@ class Renderer2D extends Renderer { canvasId, } = state.canvas; if (canvasId !== this.canvasId) { - // TODO doesn't immediatelly reload when change from 3d to 2d this.canvasId = canvasId; if (canvasId !== null) { const { diff --git a/src/ui/Renderer3D.js b/src/ui/Renderer3D.js index 2252bf30..594fba0b 100644 --- a/src/ui/Renderer3D.js +++ b/src/ui/Renderer3D.js @@ -214,8 +214,6 @@ class Renderer3D extends Renderer { window.addEventListener('resize', this.onWindowResize, false); this.updateCanvasData(state); - // TODO REMOVE - window.renderer = this; } get view() { @@ -223,12 +221,29 @@ class Renderer3D extends Renderer { } destructor() { + // TODO is still leaking memory window.removeEventListener('resize', this.onWindowResize, false); - this.threeRenderer.dispose(); this.controls.dispose(); + this.oobGeometry.dispose(); + this.oobMaterial.dispose(); + delete this.controls; + delete this.scene; + delete this.camera; + delete this.target; + delete this.rollOverMesh; + delete this.plane; + delete this.oobGeometry; + delete this.oobMaterial; + delete this.mouse; + delete this.raycaster; + // + delete this.loadedChunks; + delete this.objects; const { domElement } = this.threeRenderer; - this.threeRenderer = null; domElement.remove(); + this.threeRenderer.renderLists.dispose(); + this.threeRenderer.dispose(); + delete this.threeRenderer; super.destructor(); }