浏览代码

Remove redundant blit from AfterimagePass

It's much faster to just swap the buffers in AfterimagePass instead of doing a blit to copy them.
Olli Etuaho 6 年之前
父节点
当前提交
9cf1fe3159
共有 1 个文件被更改,包括 11 次插入8 次删除
  1. 11 8
      examples/js/postprocessing/AfterimagePass.js

+ 11 - 8
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 ) {