Skip to content

Commit

Permalink
WebGPUTextures: Support .dispose() with render targets.
Browse files Browse the repository at this point in the history
  • Loading branch information
Mugen87 committed Sep 16, 2020
1 parent 16353c9 commit 3dcce7a
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 4 deletions.
37 changes: 37 additions & 0 deletions examples/jsm/renderers/webgpu/WebGPUTextures.js
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,15 @@ class WebGPUTextures {

}

//

const disposeCallback = onRenderTargetDispose.bind( this );
renderTargetProperties.disposeCallback = disposeCallback;

renderTarget.addEventListener( 'dispose', disposeCallback );

//

renderTargetProperties.initialized = true;

}
Expand Down Expand Up @@ -450,6 +459,34 @@ class WebGPUTextures {

}

function onRenderTargetDispose( event ) {

const renderTarget = event.target;
const properties = this.properties;

const renderTargetProperties = properties.get( renderTarget );

renderTarget.removeEventListener( 'dispose', renderTargetProperties.disposeCallback );

renderTargetProperties.colorTextureGPU.destroy();
properties.remove( renderTarget.texture );

if ( renderTarget.depthBuffer === true ) {

renderTargetProperties.depthTextureGPU.destroy();

if ( renderTarget.depthTexture !== null ) {

properties.remove( renderTarget.depthTexture );

}

}

properties.remove( renderTarget );

}

function onTextureDispose( event ) {

const texture = event.target;
Expand Down
7 changes: 3 additions & 4 deletions examples/webgpu_rtt.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@

let box;

const dpr = window.devicePixelRatio;

init().then( animate ).catch( error );

async function init() {
Expand Down Expand Up @@ -54,8 +56,6 @@

//

const dpr = window.devicePixelRatio;

renderer = new WebGPURenderer();
renderer.setPixelRatio( dpr );
renderer.setSize( window.innerWidth, window.innerHeight );
Expand Down Expand Up @@ -93,8 +93,7 @@
camera.updateProjectionMatrix();

renderer.setSize( window.innerWidth, window.innerHeight );

// @TODO Resize render target, implement respective .dispose()
renderTarget.setSize( window.innerWidth * dpr, window.innerHeight * dpr );

}

Expand Down

0 comments on commit 3dcce7a

Please sign in to comment.