|
@@ -5,21 +5,35 @@
|
|
|
THREE.EffectComposer = function( renderer, renderTarget ) {
|
|
|
|
|
|
this.renderer = renderer;
|
|
|
- this.renderTarget = renderTarget;
|
|
|
|
|
|
- if ( this.renderTarget === undefined ) {
|
|
|
+ this.renderTarget1 = renderTarget;
|
|
|
+
|
|
|
+ if ( this.renderTarget1 === undefined ) {
|
|
|
|
|
|
this.renderTargetParameters = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBFormat, stencilBufer: false };
|
|
|
- this.renderTarget = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, this.renderTargetParameters );
|
|
|
+ this.renderTarget1 = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, this.renderTargetParameters );
|
|
|
|
|
|
}
|
|
|
|
|
|
+ this.renderTarget2 = this.renderTarget1.clone();
|
|
|
+
|
|
|
+ this.writeBuffer = this.renderTarget1;
|
|
|
+ this.readBuffer = this.renderTarget2;
|
|
|
+
|
|
|
this.passes = [];
|
|
|
|
|
|
};
|
|
|
|
|
|
THREE.EffectComposer.prototype = {
|
|
|
|
|
|
+ swapBuffers: function() {
|
|
|
+
|
|
|
+ var tmp = this.readBuffer;
|
|
|
+ this.readBuffer = this.writeBuffer;
|
|
|
+ this.writeBuffer = tmp;
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
addPass: function ( pass ) {
|
|
|
|
|
|
this.passes.push( pass );
|
|
@@ -32,20 +46,33 @@ THREE.EffectComposer.prototype = {
|
|
|
|
|
|
for ( i = 0; i < il; i ++ ) {
|
|
|
|
|
|
- this.passes[ i ].render( this.renderer, this.renderTarget, delta );
|
|
|
+ this.passes[ i ].render( this.renderer, this.writeBuffer, this.readBuffer, delta );
|
|
|
+
|
|
|
+ if ( this.passes[ i ].needsSwap ) {
|
|
|
+
|
|
|
+ this.swapBuffers();
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
- reset: function () {
|
|
|
+ reset: function ( renderTarget ) {
|
|
|
+
|
|
|
+ this.renderTarget1 = renderTarget;
|
|
|
|
|
|
- if ( this.renderTargetParameters ) {
|
|
|
+ if ( this.renderTarget1 === undefined ) {
|
|
|
|
|
|
- this.renderTarget = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, this.renderTargetParameters );
|
|
|
+ this.renderTarget1 = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, this.renderTargetParameters );
|
|
|
|
|
|
}
|
|
|
|
|
|
+ this.renderTarget2 = this.renderTarget1.clone();
|
|
|
+
|
|
|
+ this.writeBuffer = this.renderTarget1;
|
|
|
+ this.readBuffer = this.renderTarget2;
|
|
|
+
|
|
|
THREE.EffectComposer.quad.scale.set( window.innerWidth, window.innerHeight, 1 );
|
|
|
|
|
|
THREE.EffectComposer.camera.left = window.innerWidth / - 2;
|
|
@@ -55,7 +82,6 @@ THREE.EffectComposer.prototype = {
|
|
|
|
|
|
THREE.EffectComposer.camera.updateProjectionMatrix();
|
|
|
|
|
|
-
|
|
|
}
|
|
|
|
|
|
};
|