From 21585c3021567e7284f1c881b392208a11264a63 Mon Sep 17 00:00:00 2001 From: sunag Date: Mon, 24 Aug 2026 17:14:45 -0300 Subject: [PATCH] Renderer: Introduce `dispose()` async (#34364) --- src/renderers/common/Backend.js | 14 +++++++++++++- src/renderers/common/Renderer.js | 10 ++-------- src/renderers/webgl-fallback/WebGLBackend.js | 4 +++- src/renderers/webgpu/WebGPUBackend.js | 14 +++----------- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/renderers/common/Backend.js b/src/renderers/common/Backend.js index afd44468947e7e..cad0d427bc726a 100644 --- a/src/renderers/common/Backend.js +++ b/src/renderers/common/Backend.js @@ -814,7 +814,19 @@ class Backend { * * @abstract */ - dispose() { } + async dispose() { + + for ( const queryPool of Object.values( this.timestampQueryPool ) ) { + + if ( queryPool !== null ) { + + await queryPool.dispose(); + + } + + } + + } } diff --git a/src/renderers/common/Renderer.js b/src/renderers/common/Renderer.js index cc7c87df201dfd..f6ad3db4eeb1da 100644 --- a/src/renderers/common/Renderer.js +++ b/src/renderers/common/Renderer.js @@ -2696,7 +2696,7 @@ class Renderer { * Frees all internal resources of the renderer. Call this method if the renderer * is no longer in use by your app. */ - dispose() { + async dispose() { if ( this._initialized === true ) { @@ -2718,13 +2718,7 @@ class Renderer { } - Object.values( this.backend.timestampQueryPool ).forEach( queryPool => { - - if ( queryPool !== null ) queryPool.dispose(); - - } ); - - this.backend.dispose(); + await this.backend.dispose(); } diff --git a/src/renderers/webgl-fallback/WebGLBackend.js b/src/renderers/webgl-fallback/WebGLBackend.js index c55ef3fe370c7f..3d2495df43ea33 100644 --- a/src/renderers/webgl-fallback/WebGLBackend.js +++ b/src/renderers/webgl-fallback/WebGLBackend.js @@ -2929,7 +2929,9 @@ class WebGLBackend extends Backend { /** * Frees internal resources. */ - dispose() { + async dispose() { + + await super.dispose(); if ( this.textureUtils !== null ) this.textureUtils.dispose(); diff --git a/src/renderers/webgpu/WebGPUBackend.js b/src/renderers/webgpu/WebGPUBackend.js index e24bd4d469ea01..a53977a43cba12 100644 --- a/src/renderers/webgpu/WebGPUBackend.js +++ b/src/renderers/webgpu/WebGPUBackend.js @@ -3245,7 +3245,9 @@ class WebGPUBackend extends Backend { } - dispose() { + async dispose() { + + await super.dispose(); this.bindingUtils.dispose(); this.textureUtils.dispose(); @@ -3262,16 +3264,6 @@ class WebGPUBackend extends Backend { } - if ( this.timestampQueryPool ) { - - for ( const queryPool of Object.values( this.timestampQueryPool ) ) { - - if ( queryPool !== null ) queryPool.dispose(); - - } - - } - if ( this.parameters.device === undefined && this.device !== null ) { this.device.destroy();