From 9cf1fe31598e76e58098c3598bf8ff0529f26e63 Mon Sep 17 00:00:00 2001 From: Olli Etuaho Date: Fri, 22 Mar 2019 11:31:17 +0200 Subject: [PATCH] Remove redundant blit from AfterimagePass It's much faster to just swap the buffers in AfterimagePass instead of doing a blit to copy them. --- examples/js/postprocessing/AfterimagePass.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/examples/js/postprocessing/AfterimagePass.js b/examples/js/postprocessing/AfterimagePass.js index 15d976d643..45af7f042e 100644 --- a/examples/js/postprocessing/AfterimagePass.js +++ b/examples/js/postprocessing/AfterimagePass.js @@ -41,10 +41,8 @@ THREE.AfterimagePass = function ( damp ) { this.compFsQuad = new THREE.Pass.FullScreenQuad( this.shaderMaterial ); - var material = new THREE.MeshBasicMaterial( { - map: this.textureComp.texture - } ); - this.screenFsQuad = new THREE.Pass.FullScreenQuad( material ); + var material = new THREE.MeshBasicMaterial(); + this.copyFsQuad = new THREE.Pass.FullScreenQuad( material ); }; @@ -60,13 +58,12 @@ THREE.AfterimagePass.prototype = Object.assign( Object.create( THREE.Pass.protot renderer.setRenderTarget( this.textureComp ); this.compFsQuad.render( renderer ); - renderer.setRenderTarget( this.textureOld ); - this.screenFsQuad.render( renderer ); + this.copyFsQuad.material.map = this.textureComp.texture; if ( this.renderToScreen ) { renderer.setRenderTarget( null ); - this.screenFsQuad.render( renderer ); + this.copyFsQuad.render( renderer ); } else { @@ -74,10 +71,16 @@ THREE.AfterimagePass.prototype = Object.assign( Object.create( THREE.Pass.protot if ( this.clear ) renderer.clear(); - this.screenFsQuad.render( renderer ); + this.copyFsQuad.render( renderer ); } + // Swap buffers. + var temp = this.textureOld; + this.textureOld = this.textureComp; + this.textureComp = temp; + // Now textureOld contains the latest image, ready for the next frame. + }, setSize: function ( width, height ) { -- GitLab