|
@@ -277,7 +277,9 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
|
|
|
|
|
|
// 1. Draw Non Selected objects in the depth buffer
|
|
|
this.renderScene.overrideMaterial = this.depthMaterial;
|
|
|
- renderer.render( this.renderScene, this.renderCamera, this.renderTargetDepthBuffer, true );
|
|
|
+ renderer.setRenderTarget( this.renderTargetDepthBuffer );
|
|
|
+ renderer.clear();
|
|
|
+ renderer.render( this.renderScene, this.renderCamera );
|
|
|
|
|
|
// Make selected objects visible
|
|
|
this.changeVisibilityOfSelectedObjects( true );
|
|
@@ -291,7 +293,9 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
|
|
|
this.prepareMaskMaterial.uniforms[ "cameraNearFar" ].value = new THREE.Vector2( this.renderCamera.near, this.renderCamera.far );
|
|
|
this.prepareMaskMaterial.uniforms[ "depthTexture" ].value = this.renderTargetDepthBuffer.texture;
|
|
|
this.prepareMaskMaterial.uniforms[ "textureMatrix" ].value = this.textureMatrix;
|
|
|
- renderer.render( this.renderScene, this.renderCamera, this.renderTargetMaskBuffer, true );
|
|
|
+ renderer.setRenderTarget( this.renderTargetMaskBuffer );
|
|
|
+ renderer.clear();
|
|
|
+ renderer.render( this.renderScene, this.renderCamera );
|
|
|
this.renderScene.overrideMaterial = null;
|
|
|
this.changeVisibilityOfNonSelectedObjects( true );
|
|
|
|
|
@@ -300,7 +304,9 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
|
|
|
// 2. Downsample to Half resolution
|
|
|
this.quad.material = this.materialCopy;
|
|
|
this.copyUniforms[ "tDiffuse" ].value = this.renderTargetMaskBuffer.texture;
|
|
|
- renderer.render( this.scene, this.camera, this.renderTargetMaskDownSampleBuffer, true );
|
|
|
+ renderer.setRenderTarget( this.renderTargetMaskDownSampleBuffer );
|
|
|
+ renderer.clear();
|
|
|
+ renderer.render( this.scene, this.camera );
|
|
|
|
|
|
this.tempPulseColor1.copy( this.visibleEdgeColor );
|
|
|
this.tempPulseColor2.copy( this.hiddenEdgeColor );
|
|
@@ -319,26 +325,36 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
|
|
|
this.edgeDetectionMaterial.uniforms[ "texSize" ].value = new THREE.Vector2( this.renderTargetMaskDownSampleBuffer.width, this.renderTargetMaskDownSampleBuffer.height );
|
|
|
this.edgeDetectionMaterial.uniforms[ "visibleEdgeColor" ].value = this.tempPulseColor1;
|
|
|
this.edgeDetectionMaterial.uniforms[ "hiddenEdgeColor" ].value = this.tempPulseColor2;
|
|
|
- renderer.render( this.scene, this.camera, this.renderTargetEdgeBuffer1, true );
|
|
|
+ renderer.setRenderTarget( this.renderTargetEdgeBuffer1 );
|
|
|
+ renderer.clear();
|
|
|
+ renderer.render( this.scene, this.camera );
|
|
|
|
|
|
// 4. Apply Blur on Half res
|
|
|
this.quad.material = this.separableBlurMaterial1;
|
|
|
this.separableBlurMaterial1.uniforms[ "colorTexture" ].value = this.renderTargetEdgeBuffer1.texture;
|
|
|
this.separableBlurMaterial1.uniforms[ "direction" ].value = THREE.OutlinePass.BlurDirectionX;
|
|
|
this.separableBlurMaterial1.uniforms[ "kernelRadius" ].value = this.edgeThickness;
|
|
|
- renderer.render( this.scene, this.camera, this.renderTargetBlurBuffer1, true );
|
|
|
+ renderer.setRenderTarget( this.renderTargetBlurBuffer1 );
|
|
|
+ renderer.clear();
|
|
|
+ renderer.render( this.scene, this.camera );
|
|
|
this.separableBlurMaterial1.uniforms[ "colorTexture" ].value = this.renderTargetBlurBuffer1.texture;
|
|
|
this.separableBlurMaterial1.uniforms[ "direction" ].value = THREE.OutlinePass.BlurDirectionY;
|
|
|
- renderer.render( this.scene, this.camera, this.renderTargetEdgeBuffer1, true );
|
|
|
+ renderer.setRenderTarget( this.renderTargetEdgeBuffer1 );
|
|
|
+ renderer.clear();
|
|
|
+ renderer.render( this.scene, this.camera );
|
|
|
|
|
|
// Apply Blur on quarter res
|
|
|
this.quad.material = this.separableBlurMaterial2;
|
|
|
this.separableBlurMaterial2.uniforms[ "colorTexture" ].value = this.renderTargetEdgeBuffer1.texture;
|
|
|
this.separableBlurMaterial2.uniforms[ "direction" ].value = THREE.OutlinePass.BlurDirectionX;
|
|
|
- renderer.render( this.scene, this.camera, this.renderTargetBlurBuffer2, true );
|
|
|
+ renderer.setRenderTarget( this.renderTargetBlurBuffer2 );
|
|
|
+ renderer.clear();
|
|
|
+ renderer.render( this.scene, this.camera );
|
|
|
this.separableBlurMaterial2.uniforms[ "colorTexture" ].value = this.renderTargetBlurBuffer2.texture;
|
|
|
this.separableBlurMaterial2.uniforms[ "direction" ].value = THREE.OutlinePass.BlurDirectionY;
|
|
|
- renderer.render( this.scene, this.camera, this.renderTargetEdgeBuffer2, true );
|
|
|
+ renderer.setRenderTarget( this.renderTargetEdgeBuffer2 );
|
|
|
+ renderer.clear();
|
|
|
+ renderer.render( this.scene, this.camera );
|
|
|
|
|
|
// Blend it additively over the input texture
|
|
|
this.quad.material = this.overlayMaterial;
|
|
@@ -353,7 +369,8 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
|
|
|
|
|
|
if ( maskActive ) renderer.context.enable( renderer.context.STENCIL_TEST );
|
|
|
|
|
|
- renderer.render( this.scene, this.camera, readBuffer, false );
|
|
|
+ renderer.setRenderTarget( readBuffer );
|
|
|
+ renderer.render( this.scene, this.camera );
|
|
|
|
|
|
renderer.setClearColor( this.oldClearColor, this.oldClearAlpha );
|
|
|
renderer.autoClear = oldAutoClear;
|
|
@@ -364,6 +381,7 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
|
|
|
|
|
|
this.quad.material = this.materialCopy;
|
|
|
this.copyUniforms[ "tDiffuse" ].value = readBuffer.texture;
|
|
|
+ renderer.setRenderTarget( null );
|
|
|
renderer.render( this.scene, this.camera );
|
|
|
|
|
|
}
|