Skip to content

Commit 3dcce7a

Browse files
committed
WebGPUTextures: Support .dispose() with render targets.
1 parent 16353c9 commit 3dcce7a

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

examples/jsm/renderers/webgpu/WebGPUTextures.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,15 @@ class WebGPUTextures {
220220

221221
}
222222

223+
//
224+
225+
const disposeCallback = onRenderTargetDispose.bind( this );
226+
renderTargetProperties.disposeCallback = disposeCallback;
227+
228+
renderTarget.addEventListener( 'dispose', disposeCallback );
229+
230+
//
231+
223232
renderTargetProperties.initialized = true;
224233

225234
}
@@ -450,6 +459,34 @@ class WebGPUTextures {
450459

451460
}
452461

462+
function onRenderTargetDispose( event ) {
463+
464+
const renderTarget = event.target;
465+
const properties = this.properties;
466+
467+
const renderTargetProperties = properties.get( renderTarget );
468+
469+
renderTarget.removeEventListener( 'dispose', renderTargetProperties.disposeCallback );
470+
471+
renderTargetProperties.colorTextureGPU.destroy();
472+
properties.remove( renderTarget.texture );
473+
474+
if ( renderTarget.depthBuffer === true ) {
475+
476+
renderTargetProperties.depthTextureGPU.destroy();
477+
478+
if ( renderTarget.depthTexture !== null ) {
479+
480+
properties.remove( renderTarget.depthTexture );
481+
482+
}
483+
484+
}
485+
486+
properties.remove( renderTarget );
487+
488+
}
489+
453490
function onTextureDispose( event ) {
454491

455492
const texture = event.target;

examples/webgpu_rtt.html

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
let box;
2525

26+
const dpr = window.devicePixelRatio;
27+
2628
init().then( animate ).catch( error );
2729

2830
async function init() {
@@ -54,8 +56,6 @@
5456

5557
//
5658

57-
const dpr = window.devicePixelRatio;
58-
5959
renderer = new WebGPURenderer();
6060
renderer.setPixelRatio( dpr );
6161
renderer.setSize( window.innerWidth, window.innerHeight );
@@ -93,8 +93,7 @@
9393
camera.updateProjectionMatrix();
9494

9595
renderer.setSize( window.innerWidth, window.innerHeight );
96-
97-
// @TODO Resize render target, implement respective .dispose()
96+
renderTarget.setSize( window.innerWidth * dpr, window.innerHeight * dpr );
9897

9998
}
10099

0 commit comments

Comments
 (0)