From 85f911fb5c3f2649aa6113a39bc0f5c3c57adef0 Mon Sep 17 00:00:00 2001 From: Marc-Sefan Cassola Date: Mon, 14 Jan 2019 10:03:27 +0000 Subject: [PATCH] removed renderTarget and forceClear from WebGLRenderer.render() in example code --- examples/js/GPUComputationRenderer.js | 10 ++++- examples/js/Ocean.js | 43 ++++++++++++++----- examples/js/cameras/CinematicCamera.js | 13 +++++- examples/js/crossfade/scenes.js | 14 ++++-- examples/js/crossfade/transition.js | 6 ++- examples/js/effects/AnaglyphEffect.js | 13 +++++- examples/js/effects/OutlineEffect.js | 28 ++++++++++-- examples/js/effects/ParallaxBarrierEffect.js | 9 +++- .../loaders/EquirectangularToCubeGenerator.js | 8 +++- examples/js/nodes/inputs/RTTNode.js | 8 +++- .../postprocessing/NodePostProcessing.js | 4 +- examples/js/objects/Fire.js | 18 +++++--- examples/js/objects/Reflector.js | 4 +- examples/js/objects/Refractor.js | 4 +- examples/js/objects/Water.js | 4 +- examples/js/pmrem/PMREMCubeUVPacker.js | 3 +- examples/js/pmrem/PMREMGenerator.js | 4 +- .../postprocessing/AdaptiveToneMappingPass.js | 14 ++++-- examples/js/postprocessing/AfterimagePass.js | 24 +++++++---- examples/js/postprocessing/BloomPass.js | 12 ++++-- examples/js/postprocessing/BokehPass.js | 11 +++-- examples/js/postprocessing/CubeTexturePass.js | 4 +- examples/js/postprocessing/DotScreenPass.js | 5 ++- examples/js/postprocessing/EffectComposer.js | 4 ++ examples/js/postprocessing/FilmPass.js | 5 ++- examples/js/postprocessing/GlitchPass.js | 5 ++- examples/js/postprocessing/HalftonePass.js | 5 ++- examples/js/postprocessing/MaskPass.js | 9 +++- examples/js/postprocessing/OutlinePass.js | 36 ++++++++++++---- examples/js/postprocessing/RenderPass.js | 4 +- examples/js/postprocessing/SAOPass.js | 19 +++++--- examples/js/postprocessing/SMAAPass.js | 13 ++++-- examples/js/postprocessing/SSAARenderPass.js | 9 +++- examples/js/postprocessing/SSAOPass.js | 20 +++++---- examples/js/postprocessing/SavePass.js | 4 +- examples/js/postprocessing/ShaderPass.js | 5 ++- examples/js/postprocessing/TAARenderPass.js | 17 ++++++-- examples/js/postprocessing/TexturePass.js | 4 +- examples/js/postprocessing/UnrealBloomPass.js | 26 ++++++++--- examples/webgl_depth_texture.html | 4 +- examples/webgl_interactive_cubes_gpu.html | 4 +- examples/webgl_interactive_instances_gpu.html | 7 ++- examples/webgl_materials_nodes.html | 5 ++- examples/webgl_postprocessing_dof2.html | 10 ++++- examples/webgl_postprocessing_godrays.html | 18 +++++--- examples/webgl_read_float_buffer.html | 5 ++- examples/webgl_rtt.html | 7 ++- examples/webgl_simple_gi.html | 4 +- examples/webgl_terrain_dynamic.html | 9 +++- examples/webgl_tiled_forward.html | 3 +- src/cameras/CubeCamera.js | 14 +++--- 51 files changed, 403 insertions(+), 135 deletions(-) diff --git a/examples/js/GPUComputationRenderer.js b/examples/js/GPUComputationRenderer.js index c9b22e8efa..b962bb03b3 100644 --- a/examples/js/GPUComputationRenderer.js +++ b/examples/js/GPUComputationRenderer.js @@ -277,7 +277,9 @@ function GPUComputationRenderer( sizeX, sizeY, renderer ) { addResolutionDefine( material ); return material; + } + this.createShaderMaterial = createShaderMaterial; this.createRenderTarget = function( sizeXTexture, sizeYTexture, wrapS, wrapT, minFilter, magFilter ) { @@ -316,7 +318,6 @@ function GPUComputationRenderer( sizeX, sizeY, renderer ) { }; - this.renderTexture = function( input, output ) { // Takes a texture, and render out in rendertarget @@ -333,10 +334,15 @@ function GPUComputationRenderer( sizeX, sizeY, renderer ) { this.doRenderTarget = function( material, output ) { + var currentRenderTarget = renderer.getRenderTarget(); + mesh.material = material; - renderer.render( scene, camera, output ); + renderer.setRenderTarget( output ); + renderer.render( scene, camera ); mesh.material = passThruShader; + renderer.setRenderTarget( currentRenderTarget ); + }; // Shaders diff --git a/examples/js/Ocean.js b/examples/js/Ocean.js index 276d810357..781adce460 100644 --- a/examples/js/Ocean.js +++ b/examples/js/Ocean.js @@ -256,7 +256,10 @@ THREE.Ocean.prototype.renderInitialSpectrum = function () { this.scene.overrideMaterial = this.materialInitialSpectrum; this.materialInitialSpectrum.uniforms.u_wind.value.set( this.windX, this.windY ); this.materialInitialSpectrum.uniforms.u_size.value = this.size; - this.renderer.render( this.scene, this.oceanCamera, this.initialSpectrumFramebuffer, true ); + + this.renderer.setRenderTarget( this.initialSpectrumFramebuffer ); + this.renderer.clear(); + this.renderer.render( this.scene, this.oceanCamera ); }; @@ -269,14 +272,15 @@ THREE.Ocean.prototype.renderWavePhase = function () { this.materialPhase.uniforms.u_phases.value = this.pingPhaseTexture; this.initial = false; - }else { + } else { this.materialPhase.uniforms.u_phases.value = this.pingPhase ? this.pingPhaseFramebuffer.texture : this.pongPhaseFramebuffer.texture; } this.materialPhase.uniforms.u_deltaTime.value = this.deltaTime; this.materialPhase.uniforms.u_size.value = this.size; - this.renderer.render( this.scene, this.oceanCamera, this.pingPhase ? this.pongPhaseFramebuffer : this.pingPhaseFramebuffer ); + this.renderer.setRenderTarget( this.pingPhase ? this.pongPhaseFramebuffer : this.pingPhaseFramebuffer ); + this.renderer.render( this.scene, this.oceanCamera ); this.pingPhase = ! this.pingPhase; }; @@ -288,7 +292,9 @@ THREE.Ocean.prototype.renderSpectrum = function () { this.materialSpectrum.uniforms.u_phases.value = this.pingPhase ? this.pingPhaseFramebuffer.texture : this.pongPhaseFramebuffer.texture; this.materialSpectrum.uniforms.u_choppiness.value = this.choppiness; this.materialSpectrum.uniforms.u_size.value = this.size; - this.renderer.render( this.scene, this.oceanCamera, this.spectrumFramebuffer ); + + this.renderer.setRenderTarget( this.spectrumFramebuffer ); + this.renderer.render( this.scene, this.oceanCamera ); }; @@ -305,19 +311,25 @@ THREE.Ocean.prototype.renderSpectrumFFT = function() { this.materialOceanHorizontal.uniforms.u_input.value = this.spectrumFramebuffer.texture; this.materialOceanHorizontal.uniforms.u_subtransformSize.value = Math.pow( 2, ( i % ( iterations ) ) + 1 ); - this.renderer.render( this.scene, this.oceanCamera, this.pingTransformFramebuffer ); + + this.renderer.setRenderTarget( this.pingTransformFramebuffer ); + this.renderer.render( this.scene, this.oceanCamera ); } else if ( i % 2 === 1 ) { this.materialOceanHorizontal.uniforms.u_input.value = this.pingTransformFramebuffer.texture; this.materialOceanHorizontal.uniforms.u_subtransformSize.value = Math.pow( 2, ( i % ( iterations ) ) + 1 ); - this.renderer.render( this.scene, this.oceanCamera, this.pongTransformFramebuffer ); + + this.renderer.setRenderTarget( this.pongTransformFramebuffer ); + this.renderer.render( this.scene, this.oceanCamera ); } else { this.materialOceanHorizontal.uniforms.u_input.value = this.pongTransformFramebuffer.texture; this.materialOceanHorizontal.uniforms.u_subtransformSize.value = Math.pow( 2, ( i % ( iterations ) ) + 1 ); - this.renderer.render( this.scene, this.oceanCamera, this.pingTransformFramebuffer ); + + this.renderer.setRenderTarget( this.pingTransformFramebuffer ); + this.renderer.render( this.scene, this.oceanCamera ); } @@ -329,19 +341,25 @@ THREE.Ocean.prototype.renderSpectrumFFT = function() { this.materialOceanVertical.uniforms.u_input.value = ( iterations % 2 === 0 ) ? this.pingTransformFramebuffer.texture : this.pongTransformFramebuffer.texture; this.materialOceanVertical.uniforms.u_subtransformSize.value = Math.pow( 2, ( i % ( iterations ) ) + 1 ); - this.renderer.render( this.scene, this.oceanCamera, this.displacementMapFramebuffer ); + + this.renderer.setRenderTarget( this.displacementMapFramebuffer ); + this.renderer.render( this.scene, this.oceanCamera ); } else if ( i % 2 === 1 ) { this.materialOceanVertical.uniforms.u_input.value = this.pingTransformFramebuffer.texture; this.materialOceanVertical.uniforms.u_subtransformSize.value = Math.pow( 2, ( i % ( iterations ) ) + 1 ); - this.renderer.render( this.scene, this.oceanCamera, this.pongTransformFramebuffer ); + + this.renderer.setRenderTarget( this.pongTransformFramebuffer ); + this.renderer.render( this.scene, this.oceanCamera ); } else { this.materialOceanVertical.uniforms.u_input.value = this.pongTransformFramebuffer.texture; this.materialOceanVertical.uniforms.u_subtransformSize.value = Math.pow( 2, ( i % ( iterations ) ) + 1 ); - this.renderer.render( this.scene, this.oceanCamera, this.pingTransformFramebuffer ); + + this.renderer.setRenderTarget( this.pingTransformFramebuffer ); + this.renderer.render( this.scene, this.oceanCamera ); } @@ -354,6 +372,9 @@ THREE.Ocean.prototype.renderNormalMap = function () { this.scene.overrideMaterial = this.materialNormal; if ( this.changed ) this.materialNormal.uniforms.u_size.value = this.size; this.materialNormal.uniforms.u_displacementMap.value = this.displacementMapFramebuffer.texture; - this.renderer.render( this.scene, this.oceanCamera, this.normalMapFramebuffer, true ); + + this.renderer.setRenderTarget( this.normalMapFramebuffer ); + this.renderer.clear(); + this.renderer.render( this.scene, this.oceanCamera ); }; diff --git a/examples/js/cameras/CinematicCamera.js b/examples/js/cameras/CinematicCamera.js index 970fc24f8e..35ac6ab81e 100644 --- a/examples/js/cameras/CinematicCamera.js +++ b/examples/js/cameras/CinematicCamera.js @@ -177,22 +177,31 @@ THREE.CinematicCamera.prototype.renderCinematic = function ( scene, renderer ) { if ( this.postprocessing.enabled ) { + var currentRenderTarget = renderer.getRenderTarget(); + renderer.clear(); // Render scene into texture scene.overrideMaterial = null; - renderer.render( scene, camera, this.postprocessing.rtTextureColor, true ); + renderer.setRenderTarget( this.postprocessing.rtTextureColor ); + renderer.clear(); + renderer.render( scene, camera ); // Render depth into texture scene.overrideMaterial = this.materialDepth; - renderer.render( scene, camera, this.postprocessing.rtTextureDepth, true ); + renderer.setRenderTarget( this.postprocessing.rtTextureDepth ); + renderer.clear(); + renderer.render( scene, camera, this.postprocessing.rtTextureDepth ); // Render bokeh composite + renderer.setRenderTarget( null ); renderer.render( this.postprocessing.scene, this.postprocessing.camera ); + renderer.setRenderTarget( currentRenderTarget ); + } }; diff --git a/examples/js/crossfade/scenes.js b/examples/js/crossfade/scenes.js index 6ad3766852..28d2596f2d 100644 --- a/examples/js/crossfade/scenes.js +++ b/examples/js/crossfade/scenes.js @@ -101,11 +101,19 @@ function Scene( type, numObjects, cameraZ, fov, rotationSpeed, clearColor ) { renderer.setClearColor( this.clearColor ); - if ( rtt ) - renderer.render( this.scene, this.camera, this.fbo, true ); - else + if ( rtt ) { + + renderer.setRenderTarget( this.fbo ); + renderer.clear(); + renderer.render( this.scene, this.camera ); + + } else { + + renderer.setRenderTarget( null ); renderer.render( this.scene, this.camera ); + } + }; } diff --git a/examples/js/crossfade/transition.js b/examples/js/crossfade/transition.js index 60fbc7dd25..137d4ba197 100644 --- a/examples/js/crossfade/transition.js +++ b/examples/js/crossfade/transition.js @@ -1,4 +1,4 @@ -function Transition ( sceneA, sceneB ) { +function Transition( sceneA, sceneB ) { this.scene = new THREE.Scene(); @@ -157,7 +157,9 @@ function Transition ( sceneA, sceneB ) { this.sceneA.render( delta, true ); this.sceneB.render( delta, true ); - renderer.render( this.scene, this.cameraOrtho, null, true ); + renderer.setRenderTarget( null ); + renderer.clear(); + renderer.render( this.scene, this.cameraOrtho ); } diff --git a/examples/js/effects/AnaglyphEffect.js b/examples/js/effects/AnaglyphEffect.js index 36bc325387..f2eed24d5e 100644 --- a/examples/js/effects/AnaglyphEffect.js +++ b/examples/js/effects/AnaglyphEffect.js @@ -130,16 +130,25 @@ THREE.AnaglyphEffect = function ( renderer, width, height ) { this.render = function ( scene, camera ) { + var currentRenderTarget = renderer.getRenderTarget(); + scene.updateMatrixWorld(); if ( camera.parent === null ) camera.updateMatrixWorld(); _stereo.update( camera ); - renderer.render( scene, _stereo.cameraL, _renderTargetL, true ); - renderer.render( scene, _stereo.cameraR, _renderTargetR, true ); + renderer.setRenderTarget( _renderTargetL ); + renderer.clear(); + renderer.render( scene, _stereo.cameraL ); + + renderer.setRenderTarget( _renderTargetR ); + renderer.clear(); + renderer.render( scene, _stereo.cameraR ); renderer.render( _scene, _camera ); + renderer.setRenderTarget( currentRenderTarget ); + }; this.dispose = function () { diff --git a/examples/js/effects/OutlineEffect.js b/examples/js/effects/OutlineEffect.js index 44a1a01801..3e97ea0395 100644 --- a/examples/js/effects/OutlineEffect.js +++ b/examples/js/effects/OutlineEffect.js @@ -402,11 +402,31 @@ THREE.OutlineEffect = function ( renderer, parameters ) { } - this.render = function ( scene, camera, renderTarget, forceClear ) { + this.render = function ( scene, camera ) { + + var renderTarget; + var forceClear; + + if ( arguments[ 2 ] !== undefined ) { + + console.warn( 'THREE.OutlineEffect.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' ); + renderTarget = arguments[ 2 ]; + + } + + if ( arguments[ 3 ] !== undefined ) { + + console.warn( 'THREE.OutlineEffect.render(): the forceClear argument has been removed. Use .clear() instead.' ); + forceClear = arguments[ 3 ]; + + } + + renderer.setRenderTarget( renderTarget ); + if ( forceClear ) renderer.clear(); if ( this.enabled === false ) { - renderer.render( scene, camera, renderTarget, forceClear ); + renderer.render( scene, camera ); return; } @@ -415,7 +435,7 @@ THREE.OutlineEffect = function ( renderer, parameters ) { renderer.autoClear = this.autoClear; // 1. render normally - renderer.render( scene, camera, renderTarget, forceClear ); + renderer.render( scene, camera ); // 2. render outline var currentSceneAutoUpdate = scene.autoUpdate; @@ -429,7 +449,7 @@ THREE.OutlineEffect = function ( renderer, parameters ) { scene.traverse( setOutlineMaterial ); - renderer.render( scene, camera, renderTarget ); + renderer.render( scene, camera ); scene.traverse( restoreOriginalMaterial ); diff --git a/examples/js/effects/ParallaxBarrierEffect.js b/examples/js/effects/ParallaxBarrierEffect.js index 6756149b24..7cf1abdbfe 100644 --- a/examples/js/effects/ParallaxBarrierEffect.js +++ b/examples/js/effects/ParallaxBarrierEffect.js @@ -87,8 +87,15 @@ THREE.ParallaxBarrierEffect = function ( renderer ) { _stereo.update( camera ); - renderer.render( scene, _stereo.cameraL, _renderTargetL, true ); + renderer.setRenderTarget( _renderTargetL ); + renderer.clear(); + renderer.render( scene, _stereo.cameraL ); + + renderer.setRenderTarget( _renderTargetR ); + renderer.clear(); renderer.render( scene, _stereo.cameraR, _renderTargetR, true ); + + renderer.setRenderTarget( null ); renderer.render( _scene, _camera ); }; diff --git a/examples/js/loaders/EquirectangularToCubeGenerator.js b/examples/js/loaders/EquirectangularToCubeGenerator.js index 5700d030af..5229324048 100644 --- a/examples/js/loaders/EquirectangularToCubeGenerator.js +++ b/examples/js/loaders/EquirectangularToCubeGenerator.js @@ -152,6 +152,8 @@ THREE.EquirectangularToCubeGenerator = ( function () { update: function ( renderer ) { + var currentRenderTarget = renderer.getRenderTarget(); + boxMesh.material.uniforms.equirectangularMap.value = this.sourceTexture; for ( var i = 0; i < 6; i ++ ) { @@ -164,10 +166,14 @@ THREE.EquirectangularToCubeGenerator = ( function () { camera.up.set( v.u[ 0 ], v.u[ 1 ], v.u[ 2 ] ); camera.lookAt( v.t[ 0 ], v.t[ 1 ], v.t[ 2 ] ); - renderer.render( scene, camera, this.renderTarget, true ); + renderer.setRenderTarget( this.renderTarget ); + renderer.clear(); + renderer.render( scene, camera ); } + renderer.setRenderTarget( currentRenderTarget ); + return this.renderTarget.texture; }, diff --git a/examples/js/nodes/inputs/RTTNode.js b/examples/js/nodes/inputs/RTTNode.js index 0abc03c8b2..b6065b50e9 100644 --- a/examples/js/nodes/inputs/RTTNode.js +++ b/examples/js/nodes/inputs/RTTNode.js @@ -72,7 +72,9 @@ RTTNode.prototype.updateFramesaveTo = function ( frame ) { this.saveToCurrent = this.saveTo; - frame.renderer.render( this.saveToScene, this.camera, this.saveTo.renderTarget, this.saveTo.clear ); + frame.renderer.setRenderTarget( this.saveTo.renderTarget ); + if ( this.saveTo.clear ) frame.renderer.clear(); + frame.renderer.render( this.saveToScene, this.camera ); }; @@ -96,7 +98,9 @@ RTTNode.prototype.updateFrame = function ( frame ) { } - frame.renderer.render( this.scene, this.camera, this.renderTarget, this.clear ); + frame.renderer.setRenderTarget( this.renderTarget ); + if ( this.clear ) frame.renderer.clear(); + frame.renderer.render( this.scene, this.camera ); } diff --git a/examples/js/nodes/postprocessing/NodePostProcessing.js b/examples/js/nodes/postprocessing/NodePostProcessing.js index cc24ba1d0f..cd5cb39538 100644 --- a/examples/js/nodes/postprocessing/NodePostProcessing.js +++ b/examples/js/nodes/postprocessing/NodePostProcessing.js @@ -64,10 +64,12 @@ NodePostProcessing.prototype = { frame.setRenderer( this.renderer ) .setRenderTexture( this.renderTarget.texture ); - this.renderer.render( scene, camera, this.renderTarget ); + this.renderer.setRenderTarget( this.renderTarget ); + this.renderer.render( scene, camera ); frame.updateNode( this.material ); + this.renderer.setRenderTarget( null ); this.renderer.render( this.scene, this.camera ); }, diff --git a/examples/js/objects/Fire.js b/examples/js/objects/Fire.js index 68b7724314..523ebbc7ae 100644 --- a/examples/js/objects/Fire.js +++ b/examples/js/objects/Fire.js @@ -342,7 +342,8 @@ THREE.Fire = function ( geometry, options ) { this.sourceMaterial.uniforms[ "densityMap" ].value = this.field0.texture; - renderer.render( this.fieldScene, this.orthoCamera, this.field1 ); + renderer.setRenderTarget( this.field1 ); + renderer.render( this.fieldScene, this.orthoCamera ); this.sourceMesh.visible = false; @@ -356,7 +357,8 @@ THREE.Fire = function ( geometry, options ) { this.diffuseMaterial.uniforms[ "densityMap" ].value = this.field0.texture; - renderer.render( this.fieldScene, this.orthoCamera, this.field1 ); + renderer.setRenderTarget( this.field1 ); + renderer.render( this.fieldScene, this.orthoCamera ); this.diffuseMesh.visible = false; @@ -370,7 +372,8 @@ THREE.Fire = function ( geometry, options ) { this.driftMaterial.uniforms[ "densityMap" ].value = this.field0.texture; - renderer.render( this.fieldScene, this.orthoCamera, this.field1 ); + renderer.setRenderTarget( this.field1 ); + renderer.render( this.fieldScene, this.orthoCamera ); this.driftMesh.visible = false; @@ -386,7 +389,8 @@ THREE.Fire = function ( geometry, options ) { this.projMaterial1.uniforms[ "densityMap" ].value = this.field0.texture; - renderer.render( this.fieldScene, this.orthoCamera, this.fieldProj ); + renderer.setRenderTarget( this.fieldProj ); + renderer.render( this.fieldScene, this.orthoCamera ); this.projMesh1.visible = false; @@ -398,7 +402,8 @@ THREE.Fire = function ( geometry, options ) { for ( var i = 0; i < 20; i ++ ) { - renderer.render( this.fieldScene, this.orthoCamera, this.field1 ); + renderer.setRenderTarget( this.field1 ); + renderer.render( this.fieldScene, this.orthoCamera ); var temp = this.field1; this.field1 = this.fieldProj; @@ -417,7 +422,8 @@ THREE.Fire = function ( geometry, options ) { this.projMesh3.visible = true; - renderer.render( this.fieldScene, this.orthoCamera, this.field1 ); + renderer.setRenderTarget( this.field1 ); + renderer.render( this.fieldScene, this.orthoCamera ); this.projMesh3.visible = false; diff --git a/examples/js/objects/Reflector.js b/examples/js/objects/Reflector.js index d94104a96e..0eefd3aeea 100644 --- a/examples/js/objects/Reflector.js +++ b/examples/js/objects/Reflector.js @@ -161,7 +161,9 @@ THREE.Reflector = function ( geometry, options ) { renderer.vr.enabled = false; // Avoid camera modification and recursion renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows - renderer.render( scene, virtualCamera, renderTarget, true ); + renderer.setRenderTarget( renderTarget ); + renderer.clear(); + renderer.render( scene, virtualCamera ); renderer.vr.enabled = currentVrEnabled; renderer.shadowMap.autoUpdate = currentShadowAutoUpdate; diff --git a/examples/js/objects/Refractor.js b/examples/js/objects/Refractor.js index 156820a1df..8d3f98f0f6 100644 --- a/examples/js/objects/Refractor.js +++ b/examples/js/objects/Refractor.js @@ -199,7 +199,9 @@ THREE.Refractor = function ( geometry, options ) { renderer.vr.enabled = false; // avoid camera modification renderer.shadowMap.autoUpdate = false; // avoid re-computing shadows - renderer.render( scene, virtualCamera, renderTarget, true ); + renderer.setRenderTarget( renderTarget ); + renderer.clear(); + renderer.render( scene, virtualCamera ); renderer.vr.enabled = currentVrEnabled; renderer.shadowMap.autoUpdate = currentShadowAutoUpdate; diff --git a/examples/js/objects/Water.js b/examples/js/objects/Water.js index 2f655fbd11..9a298ec959 100644 --- a/examples/js/objects/Water.js +++ b/examples/js/objects/Water.js @@ -291,7 +291,9 @@ THREE.Water = function ( geometry, options ) { renderer.vr.enabled = false; // Avoid camera modification and recursion renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows - renderer.render( scene, mirrorCamera, renderTarget, true ); + renderer.setRenderTarget( renderTarget ); + renderer.clear(); + renderer.render( scene, mirrorCamera ); scope.visible = true; diff --git a/examples/js/pmrem/PMREMCubeUVPacker.js b/examples/js/pmrem/PMREMCubeUVPacker.js index cb6de3d34e..1fe2523fa0 100644 --- a/examples/js/pmrem/PMREMCubeUVPacker.js +++ b/examples/js/pmrem/PMREMCubeUVPacker.js @@ -137,7 +137,8 @@ THREE.PMREMCubeUVPacker = ( function () { renderer.gammaOutput = false; renderer.toneMapping = THREE.LinearToneMapping; renderer.toneMappingExposure = 1.0; - renderer.render( scene, camera, this.CubeUVRenderTarget, false ); + renderer.setRenderTarget( this.CubeUVRenderTarget ); + renderer.render( scene, camera ); renderer.setRenderTarget( currentRenderTarget ); renderer.toneMapping = toneMapping; diff --git a/examples/js/pmrem/PMREMGenerator.js b/examples/js/pmrem/PMREMGenerator.js index 971f430873..73e49669f8 100644 --- a/examples/js/pmrem/PMREMGenerator.js +++ b/examples/js/pmrem/PMREMGenerator.js @@ -137,7 +137,9 @@ THREE.PMREMGenerator = ( function () { renderTarget.activeCubeFace = faceIndex; shader.uniforms[ 'faceIndex' ].value = faceIndex; - renderer.render( scene, camera, renderTarget, true ); + renderer.setRenderTarget( renderTarget ); + renderer.clear(); + renderer.render( scene, camera ); }, diff --git a/examples/js/postprocessing/AdaptiveToneMappingPass.js b/examples/js/postprocessing/AdaptiveToneMappingPass.js index e6f9f5d207..0ba56031a5 100644 --- a/examples/js/postprocessing/AdaptiveToneMappingPass.js +++ b/examples/js/postprocessing/AdaptiveToneMappingPass.js @@ -148,7 +148,8 @@ THREE.AdaptiveToneMappingPass.prototype = Object.assign( Object.create( THREE.Pa //Render the luminance of the current scene into a render target with mipmapping enabled this.quad.material = this.materialLuminance; this.materialLuminance.uniforms.tDiffuse.value = readBuffer.texture; - renderer.render( this.scene, this.camera, this.currentLuminanceRT ); + renderer.setRenderTarget( this.currentLuminanceRT ); + renderer.render( this.scene, this.camera ); //Use the new luminance values, the previous luminance and the frame delta to //adapt the luminance over time. @@ -156,11 +157,13 @@ THREE.AdaptiveToneMappingPass.prototype = Object.assign( Object.create( THREE.Pa this.materialAdaptiveLum.uniforms.delta.value = delta; this.materialAdaptiveLum.uniforms.lastLum.value = this.previousLuminanceRT.texture; this.materialAdaptiveLum.uniforms.currentLum.value = this.currentLuminanceRT.texture; - renderer.render( this.scene, this.camera, this.luminanceRT ); + renderer.setRenderTarget( this.luminanceRT ); + renderer.render( this.scene, this.camera ); //Copy the new adapted luminance value so that it can be used by the next frame. this.quad.material = this.materialCopy; this.copyUniforms.tDiffuse.value = this.luminanceRT.texture; + renderer.setRenderTarget( this.previousLuminanceRT ); renderer.render( this.scene, this.camera, this.previousLuminanceRT ); } @@ -170,11 +173,16 @@ THREE.AdaptiveToneMappingPass.prototype = Object.assign( Object.create( THREE.Pa if ( this.renderToScreen ) { + renderer.setRenderTarget( null ); renderer.render( this.scene, this.camera ); } else { - renderer.render( this.scene, this.camera, writeBuffer, this.clear ); + renderer.setRenderTarget( writeBuffer ); + + if ( this.clear ) renderer.clear(); + + renderer.render( this.scene, this.camera ); } diff --git a/examples/js/postprocessing/AfterimagePass.js b/examples/js/postprocessing/AfterimagePass.js index 7c8ace62d4..fc9dafebf4 100644 --- a/examples/js/postprocessing/AfterimagePass.js +++ b/examples/js/postprocessing/AfterimagePass.js @@ -70,17 +70,25 @@ THREE.AfterimagePass.prototype = Object.assign( Object.create( THREE.Pass.protot this.quadComp.material = this.shaderMaterial; - renderer.render( this.sceneComp, this.camera, this.textureComp ); - renderer.render( this.scene, this.camera, this.textureOld ); - + renderer.setRenderTarget( this.textureComp ); + renderer.render( this.sceneComp, this.camera ); + + renderer.setRenderTarget( this.textureOld ); + renderer.render( this.scene, this.camera ); + if ( this.renderToScreen ) { - + + renderer.setRenderTarget( null ); renderer.render( this.scene, this.camera ); - + } else { - - renderer.render( this.scene, this.camera, writeBuffer, this.clear ); - + + renderer.setRenderTarget( writeBuffer ); + + if ( this.clear ) renderer.clear(); + + renderer.render( this.scene, this.camera ); + } } diff --git a/examples/js/postprocessing/BloomPass.js b/examples/js/postprocessing/BloomPass.js index 6de0151966..4481ea3a8c 100644 --- a/examples/js/postprocessing/BloomPass.js +++ b/examples/js/postprocessing/BloomPass.js @@ -91,7 +91,9 @@ THREE.BloomPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ) this.convolutionUniforms[ "tDiffuse" ].value = readBuffer.texture; this.convolutionUniforms[ "uImageIncrement" ].value = THREE.BloomPass.blurX; - renderer.render( this.scene, this.camera, this.renderTargetX, true ); + renderer.setRenderTarget( this.renderTargetX ); + renderer.clear(); + renderer.render( this.scene, this.camera ); // Render quad with blured scene into texture (convolution pass 2) @@ -99,7 +101,9 @@ THREE.BloomPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ) this.convolutionUniforms[ "tDiffuse" ].value = this.renderTargetX.texture; this.convolutionUniforms[ "uImageIncrement" ].value = THREE.BloomPass.blurY; - renderer.render( this.scene, this.camera, this.renderTargetY, true ); + renderer.setRenderTarget( this.renderTargetY ); + renderer.clear(); + renderer.render( this.scene, this.camera ); // Render original scene with superimposed blur to texture @@ -109,7 +113,9 @@ THREE.BloomPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ) if ( maskActive ) renderer.context.enable( renderer.context.STENCIL_TEST ); - renderer.render( this.scene, this.camera, readBuffer, this.clear ); + renderer.setRenderTarget( readBuffer ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); } diff --git a/examples/js/postprocessing/BokehPass.js b/examples/js/postprocessing/BokehPass.js index fb79ccb433..1ad1f3b0de 100644 --- a/examples/js/postprocessing/BokehPass.js +++ b/examples/js/postprocessing/BokehPass.js @@ -97,7 +97,9 @@ THREE.BokehPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ) renderer.setClearColor( 0xffffff ); renderer.setClearAlpha( 1.0 ); - renderer.render( this.scene, this.camera, this.renderTargetDepth, true ); + renderer.setRenderTarget( this.renderTargetDepth ); + renderer.clear(); + renderer.render( this.scene, this.camera ); // Render bokeh composite @@ -107,11 +109,14 @@ THREE.BokehPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ) if ( this.renderToScreen ) { + renderer.setRenderTarget( null ); renderer.render( this.scene2, this.camera2 ); } else { - renderer.render( this.scene2, this.camera2, writeBuffer, this.clear ); + renderer.setRenderTarget( writeBuffer ); + renderer.clear(); + renderer.render( this.scene2, this.camera2 ); } @@ -119,7 +124,7 @@ THREE.BokehPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ) renderer.setClearColor( this.oldClearColor ); renderer.setClearAlpha( this.oldClearAlpha ); renderer.autoClear = this.oldAutoClear; - + } } ); diff --git a/examples/js/postprocessing/CubeTexturePass.js b/examples/js/postprocessing/CubeTexturePass.js index 132892d374..619f5e6b1e 100644 --- a/examples/js/postprocessing/CubeTexturePass.js +++ b/examples/js/postprocessing/CubeTexturePass.js @@ -48,7 +48,9 @@ THREE.CubeTexturePass.prototype = Object.assign( Object.create( THREE.Pass.proto this.cubeMesh.material.uniforms[ "opacity" ].value = this.opacity; this.cubeMesh.material.transparent = ( this.opacity < 1.0 ); - renderer.render( this.cubeScene, this.cubeCamera, this.renderToScreen ? null : readBuffer, this.clear ); + renderer.setRenderTarget( this.renderToScreen ? null : readBuffer ); + if ( this.clear ) renderer.clear(); + renderer.render( this.cubeScene, this.cubeCamera ); renderer.autoClear = oldAutoClear; diff --git a/examples/js/postprocessing/DotScreenPass.js b/examples/js/postprocessing/DotScreenPass.js index 0d09e713ee..5c4a0f5d2e 100644 --- a/examples/js/postprocessing/DotScreenPass.js +++ b/examples/js/postprocessing/DotScreenPass.js @@ -47,11 +47,14 @@ THREE.DotScreenPass.prototype = Object.assign( Object.create( THREE.Pass.prototy if ( this.renderToScreen ) { + renderer.setRenderTarget( null ); renderer.render( this.scene, this.camera ); } else { - renderer.render( this.scene, this.camera, writeBuffer, this.clear ); + renderer.setRenderTarget( writeBuffer ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); } diff --git a/examples/js/postprocessing/EffectComposer.js b/examples/js/postprocessing/EffectComposer.js index 3c3fa65b64..89b07da875 100644 --- a/examples/js/postprocessing/EffectComposer.js +++ b/examples/js/postprocessing/EffectComposer.js @@ -75,6 +75,8 @@ Object.assign( THREE.EffectComposer.prototype, { render: function ( delta ) { + var currentRenderTarget = this.renderer.getRenderTarget(); + var maskActive = false; var pass, i, il = this.passes.length; @@ -121,6 +123,8 @@ Object.assign( THREE.EffectComposer.prototype, { } + this.renderer.setRenderTarget( currentRenderTarget ); + }, reset: function ( renderTarget ) { diff --git a/examples/js/postprocessing/FilmPass.js b/examples/js/postprocessing/FilmPass.js index e999fb0a9a..fa15738dfc 100644 --- a/examples/js/postprocessing/FilmPass.js +++ b/examples/js/postprocessing/FilmPass.js @@ -48,11 +48,14 @@ THREE.FilmPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), if ( this.renderToScreen ) { + renderer.setRenderTarget( null ); renderer.render( this.scene, this.camera ); } else { - renderer.render( this.scene, this.camera, writeBuffer, this.clear ); + renderer.setRenderTarget( writeBuffer ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); } diff --git a/examples/js/postprocessing/GlitchPass.js b/examples/js/postprocessing/GlitchPass.js index 21f628cb5b..a219ffc5e4 100644 --- a/examples/js/postprocessing/GlitchPass.js +++ b/examples/js/postprocessing/GlitchPass.js @@ -77,11 +77,14 @@ THREE.GlitchPass.prototype = Object.assign( Object.create( THREE.Pass.prototype if ( this.renderToScreen ) { + renderer.setRenderTarget( null ); renderer.render( this.scene, this.camera ); } else { - renderer.render( this.scene, this.camera, writeBuffer, this.clear ); + renderer.setRenderTarget( writeBuffer ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); } diff --git a/examples/js/postprocessing/HalftonePass.js b/examples/js/postprocessing/HalftonePass.js index 17dc84e339..97078bd0be 100644 --- a/examples/js/postprocessing/HalftonePass.js +++ b/examples/js/postprocessing/HalftonePass.js @@ -55,11 +55,14 @@ THREE.HalftonePass = function ( width, height, params ) { if ( this.renderToScreen ) { + renderer.setRenderTarget( null ); renderer.render( this.scene, this.camera ); } else { - renderer.render( this.scene, this.camera, writeBuffer, this.clear ); + renderer.setRenderTarget( writeBuffer ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); } diff --git a/examples/js/postprocessing/MaskPass.js b/examples/js/postprocessing/MaskPass.js index 8c3f19f221..c2329fb4d2 100644 --- a/examples/js/postprocessing/MaskPass.js +++ b/examples/js/postprocessing/MaskPass.js @@ -58,8 +58,13 @@ THREE.MaskPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), // draw into the stencil buffer - renderer.render( this.scene, this.camera, readBuffer, this.clear ); - renderer.render( this.scene, this.camera, writeBuffer, this.clear ); + renderer.setRenderTarget( readBuffer ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); + + renderer.setRenderTarget( writeBuffer ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); // unlock color and depth buffer for subsequent rendering diff --git a/examples/js/postprocessing/OutlinePass.js b/examples/js/postprocessing/OutlinePass.js index 31ad22d399..b9006d2511 100644 --- a/examples/js/postprocessing/OutlinePass.js +++ b/examples/js/postprocessing/OutlinePass.js @@ -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 ); } diff --git a/examples/js/postprocessing/RenderPass.js b/examples/js/postprocessing/RenderPass.js index 2711be7b55..64af5119e1 100644 --- a/examples/js/postprocessing/RenderPass.js +++ b/examples/js/postprocessing/RenderPass.js @@ -48,7 +48,9 @@ THREE.RenderPass.prototype = Object.assign( Object.create( THREE.Pass.prototype } - renderer.render( this.scene, this.camera, this.renderToScreen ? null : readBuffer, this.clear ); + renderer.setRenderTarget( this.renderToScreen ? null : readBuffer ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); if ( this.clearColor ) { diff --git a/examples/js/postprocessing/SAOPass.js b/examples/js/postprocessing/SAOPass.js index a8734a3ade..81ef04d4fc 100644 --- a/examples/js/postprocessing/SAOPass.js +++ b/examples/js/postprocessing/SAOPass.js @@ -234,7 +234,9 @@ THREE.SAOPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), // Rendering scene to depth texture renderer.setClearColor( 0x000000 ); - renderer.render( this.scene, this.camera, this.beautyRenderTarget, true ); + renderer.setRenderTarget( this.beautyRenderTarget ); + renderer.clear(); + renderer.render( this.scene, this.camera ); // Re-render scene if depth texture extension is not supported if ( ! this.supportsDepthTextureExtension ) { @@ -317,18 +319,20 @@ THREE.SAOPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), var originalClearAlpha = renderer.getClearAlpha(); var originalAutoClear = renderer.autoClear; + renderer.setRenderTarget( renderTarget); + // setup pass state renderer.autoClear = false; - var clearNeeded = ( clearColor !== undefined ) && ( clearColor !== null ); - if ( clearNeeded ) { + if ( ( clearColor !== undefined ) && ( clearColor !== null ) ) { renderer.setClearColor( clearColor ); renderer.setClearAlpha( clearAlpha || 0.0 ); + renderer.clear(); } this.quad.material = passMaterial; - renderer.render( this.quadScene, this.quadCamera, renderTarget, clearNeeded ); + renderer.render( this.quadScene, this.quadCamera ); // restore original state renderer.autoClear = originalAutoClear; @@ -343,20 +347,21 @@ THREE.SAOPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), var originalClearAlpha = renderer.getClearAlpha(); var originalAutoClear = renderer.autoClear; + renderer.setRenderTarget( renderTarget ); renderer.autoClear = false; clearColor = overrideMaterial.clearColor || clearColor; clearAlpha = overrideMaterial.clearAlpha || clearAlpha; - var clearNeeded = ( clearColor !== undefined ) && ( clearColor !== null ); - if ( clearNeeded ) { + if ( ( clearColor !== undefined ) && ( clearColor !== null ) ) { renderer.setClearColor( clearColor ); renderer.setClearAlpha( clearAlpha || 0.0 ); + renderer.clear(); } this.scene.overrideMaterial = overrideMaterial; - renderer.render( this.scene, this.camera, renderTarget, clearNeeded ); + renderer.render( this.scene, this.camera ); this.scene.overrideMaterial = null; // restore original state diff --git a/examples/js/postprocessing/SMAAPass.js b/examples/js/postprocessing/SMAAPass.js index ab1c6458e8..5309a7e865 100644 --- a/examples/js/postprocessing/SMAAPass.js +++ b/examples/js/postprocessing/SMAAPass.js @@ -128,13 +128,17 @@ THREE.SMAAPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), this.quad.material = this.materialEdges; - renderer.render( this.scene, this.camera, this.edgesRT, this.clear ); + renderer.setRenderTarget( this.edgesRT ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); // pass 2 this.quad.material = this.materialWeights; - renderer.render( this.scene, this.camera, this.weightsRT, this.clear ); + renderer.setRenderTarget( this.weightsRT ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); // pass 3 @@ -144,11 +148,14 @@ THREE.SMAAPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), if ( this.renderToScreen ) { + renderer.setRenderTarget( null ); renderer.render( this.scene, this.camera ); } else { - renderer.render( this.scene, this.camera, writeBuffer, this.clear ); + renderer.setRenderTarget( writeBuffer ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); } diff --git a/examples/js/postprocessing/SSAARenderPass.js b/examples/js/postprocessing/SSAARenderPass.js index 3088d58ab8..b8c798109d 100644 --- a/examples/js/postprocessing/SSAARenderPass.js +++ b/examples/js/postprocessing/SSAARenderPass.js @@ -120,15 +120,20 @@ THREE.SSAARenderPass.prototype = Object.assign( Object.create( THREE.Pass.protot this.copyUniforms[ "opacity" ].value = sampleWeight; renderer.setClearColor( this.clearColor, this.clearAlpha ); - renderer.render( this.scene, this.camera, this.sampleRenderTarget, true ); + renderer.setRenderTarget( this.sampleRenderTarget ); + renderer.clear(); + renderer.render( this.scene, this.camera ); + + renderer.setRenderTarget( this.renderToScreen ? null : writeBuffer ); if ( i === 0 ) { renderer.setClearColor( 0x000000, 0.0 ); + renderer.clear(); } - renderer.render( this.scene2, this.camera2, this.renderToScreen ? null : writeBuffer, ( i === 0 ) ); + renderer.render( this.scene2, this.camera2 ); } diff --git a/examples/js/postprocessing/SSAOPass.js b/examples/js/postprocessing/SSAOPass.js index 2421514f76..d74b3a5f32 100644 --- a/examples/js/postprocessing/SSAOPass.js +++ b/examples/js/postprocessing/SSAOPass.js @@ -177,7 +177,9 @@ THREE.SSAOPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), // render beauty and depth - renderer.render( this.scene, this.camera, this.beautyRenderTarget, true ); + renderer.setRenderTarget( this.beautyRenderTarget ); + renderer.clear(); + renderer.render( this.scene, this.camera ); // render normals @@ -262,18 +264,20 @@ THREE.SSAOPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), var originalClearAlpha = renderer.getClearAlpha(); var originalAutoClear = renderer.autoClear; + renderer.setRenderTarget( renderTarget ); + // setup pass state renderer.autoClear = false; - var clearNeeded = ( clearColor !== undefined ) && ( clearColor !== null ); - if ( clearNeeded ) { + if ( ( clearColor !== undefined ) && ( clearColor !== null ) ) { renderer.setClearColor( clearColor ); renderer.setClearAlpha( clearAlpha || 0.0 ); + renderer.clear(); } this.quad.material = passMaterial; - renderer.render( this.quadScene, this.quadCamera, renderTarget, clearNeeded ); + renderer.render( this.quadScene, this.quadCamera ); // restore original state renderer.autoClear = originalAutoClear; @@ -288,22 +292,22 @@ THREE.SSAOPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), var originalClearAlpha = renderer.getClearAlpha(); var originalAutoClear = renderer.autoClear; + renderer.setRenderTarget( renderTarget ); renderer.autoClear = false; clearColor = overrideMaterial.clearColor || clearColor; clearAlpha = overrideMaterial.clearAlpha || clearAlpha; - var clearNeeded = ( clearColor !== undefined ) && ( clearColor !== null ); - - if ( clearNeeded ) { + if ( ( clearColor !== undefined ) && ( clearColor !== null ) ) { renderer.setClearColor( clearColor ); renderer.setClearAlpha( clearAlpha || 0.0 ); + renderer.clear(); } this.scene.overrideMaterial = overrideMaterial; - renderer.render( this.scene, this.camera, renderTarget, clearNeeded ); + renderer.render( this.scene, this.camera ); this.scene.overrideMaterial = null; // restore original state diff --git a/examples/js/postprocessing/SavePass.js b/examples/js/postprocessing/SavePass.js index fd0992e9b5..880f76fca8 100644 --- a/examples/js/postprocessing/SavePass.js +++ b/examples/js/postprocessing/SavePass.js @@ -57,7 +57,9 @@ THREE.SavePass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), this.quad.material = this.material; - renderer.render( this.scene, this.camera, this.renderTarget, this.clear ); + renderer.setRenderTarget( this.renderTarget ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); } diff --git a/examples/js/postprocessing/ShaderPass.js b/examples/js/postprocessing/ShaderPass.js index b244a0fa5b..d047e4a976 100644 --- a/examples/js/postprocessing/ShaderPass.js +++ b/examples/js/postprocessing/ShaderPass.js @@ -54,11 +54,14 @@ THREE.ShaderPass.prototype = Object.assign( Object.create( THREE.Pass.prototype if ( this.renderToScreen ) { + renderer.setRenderTarget( null ); renderer.render( this.scene, this.camera ); } else { - renderer.render( this.scene, this.camera, writeBuffer, this.clear ); + renderer.setRenderTarget( writeBuffer ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); } diff --git a/examples/js/postprocessing/TAARenderPass.js b/examples/js/postprocessing/TAARenderPass.js index 58f1fb3d61..42029e3483 100644 --- a/examples/js/postprocessing/TAARenderPass.js +++ b/examples/js/postprocessing/TAARenderPass.js @@ -93,8 +93,13 @@ THREE.TAARenderPass.prototype = Object.assign( Object.create( THREE.SSAARenderPa } - renderer.render( this.scene, this.camera, writeBuffer, true ); - renderer.render( this.scene2, this.camera2, this.sampleRenderTarget, ( this.accumulateIndex === 0 ) ); + renderer.setRenderTarget( writeBuffer ); + renderer.clear(); + renderer.render( this.scene, this.camera ); + + renderer.setRenderTarget( this.sampleRenderTarget ); + if ( this.accumulateIndex === 0 ) renderer.clear(); + renderer.render( this.scene2, this.camera2 ); this.accumulateIndex ++; @@ -112,7 +117,9 @@ THREE.TAARenderPass.prototype = Object.assign( Object.create( THREE.SSAARenderPa this.copyUniforms[ "opacity" ].value = 1.0; this.copyUniforms[ "tDiffuse" ].value = this.sampleRenderTarget.texture; - renderer.render( this.scene2, this.camera2, writeBuffer, true ); + renderer.setRenderTarget( writeBuffer ); + renderer.clear(); + renderer.render( this.scene2, this.camera2 ); } @@ -120,7 +127,9 @@ THREE.TAARenderPass.prototype = Object.assign( Object.create( THREE.SSAARenderPa this.copyUniforms[ "opacity" ].value = 1.0 - accumulationWeight; this.copyUniforms[ "tDiffuse" ].value = this.holdRenderTarget.texture; - renderer.render( this.scene2, this.camera2, writeBuffer, ( accumulationWeight === 0 ) ); + renderer.setRenderTarget( writeBuffer ); + if ( accumulationWeight === 0 ) renderer.clear(); + renderer.render( this.scene2, this.camera2 ); } diff --git a/examples/js/postprocessing/TexturePass.js b/examples/js/postprocessing/TexturePass.js index f924ba6300..39439e03d2 100644 --- a/examples/js/postprocessing/TexturePass.js +++ b/examples/js/postprocessing/TexturePass.js @@ -52,7 +52,9 @@ THREE.TexturePass.prototype = Object.assign( Object.create( THREE.Pass.prototype this.uniforms[ "tDiffuse" ].value = this.map; this.material.transparent = ( this.opacity < 1.0 ); - renderer.render( this.scene, this.camera, this.renderToScreen ? null : readBuffer, this.clear ); + renderer.setRenderTarget( this.renderToScreen ? null : readBuffer ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); renderer.autoClear = oldAutoClear; } diff --git a/examples/js/postprocessing/UnrealBloomPass.js b/examples/js/postprocessing/UnrealBloomPass.js index 405ad790d4..81bf88c510 100644 --- a/examples/js/postprocessing/UnrealBloomPass.js +++ b/examples/js/postprocessing/UnrealBloomPass.js @@ -203,7 +203,9 @@ THREE.UnrealBloomPass.prototype = Object.assign( Object.create( THREE.Pass.proto this.quad.material = this.basic; this.basic.map = readBuffer.texture; - renderer.render( this.scene, this.camera, undefined, true ); + renderer.setRenderTarget( null ); + renderer.clear(); + renderer.render( this.scene, this.camera ); } @@ -213,7 +215,9 @@ THREE.UnrealBloomPass.prototype = Object.assign( Object.create( THREE.Pass.proto this.highPassUniforms[ "luminosityThreshold" ].value = this.threshold; this.quad.material = this.materialHighPassFilter; - renderer.render( this.scene, this.camera, this.renderTargetBright, true ); + renderer.setRenderTarget( this.renderTargetBright ); + renderer.clear(); + renderer.render( this.scene, this.camera ); // 2. Blur All the mips progressively @@ -225,11 +229,15 @@ THREE.UnrealBloomPass.prototype = Object.assign( Object.create( THREE.Pass.proto this.separableBlurMaterials[ i ].uniforms[ "colorTexture" ].value = inputRenderTarget.texture; this.separableBlurMaterials[ i ].uniforms[ "direction" ].value = THREE.UnrealBloomPass.BlurDirectionX; - renderer.render( this.scene, this.camera, this.renderTargetsHorizontal[ i ], true ); + renderer.setRenderTarget( this.renderTargetsHorizontal[ i ] ); + renderer.clear(); + renderer.render( this.scene, this.camera ); this.separableBlurMaterials[ i ].uniforms[ "colorTexture" ].value = this.renderTargetsHorizontal[ i ].texture; this.separableBlurMaterials[ i ].uniforms[ "direction" ].value = THREE.UnrealBloomPass.BlurDirectionY; - renderer.render( this.scene, this.camera, this.renderTargetsVertical[ i ], true ); + renderer.setRenderTarget( this.renderTargetsVertical[ i ] ); + renderer.clear(); + renderer.render( this.scene, this.camera ); inputRenderTarget = this.renderTargetsVertical[ i ]; @@ -242,7 +250,9 @@ THREE.UnrealBloomPass.prototype = Object.assign( Object.create( THREE.Pass.proto this.compositeMaterial.uniforms[ "bloomRadius" ].value = this.radius; this.compositeMaterial.uniforms[ "bloomTintColors" ].value = this.bloomTintColors; - renderer.render( this.scene, this.camera, this.renderTargetsHorizontal[ 0 ], true ); + renderer.setRenderTarget( this.renderTargetsHorizontal[ 0 ] ); + renderer.clear(); + renderer.render( this.scene, this.camera ); // Blend it additively over the input texture @@ -254,11 +264,13 @@ THREE.UnrealBloomPass.prototype = Object.assign( Object.create( THREE.Pass.proto if ( this.renderToScreen ) { - renderer.render( this.scene, this.camera, undefined, false ); + renderer.setRenderTarget( null ); + renderer.render( this.scene, this.camera ); } else { - renderer.render( this.scene, this.camera, readBuffer, false ); + renderer.setRenderTarget( readBuffer ); + renderer.render( this.scene, this.camera ); } diff --git a/examples/webgl_depth_texture.html b/examples/webgl_depth_texture.html index 18a72585c7..4a8547e095 100644 --- a/examples/webgl_depth_texture.html +++ b/examples/webgl_depth_texture.html @@ -229,9 +229,11 @@ requestAnimationFrame( animate ); // render scene into target - renderer.render( scene, camera, target ); + renderer.setRenderTarget( target ); + renderer.render( scene, camera ); // render post FX + renderer.setRenderTarget( null ); renderer.render( postScene, postCamera ); stats.update(); diff --git a/examples/webgl_interactive_cubes_gpu.html b/examples/webgl_interactive_cubes_gpu.html index e1f36ba386..962454f464 100644 --- a/examples/webgl_interactive_cubes_gpu.html +++ b/examples/webgl_interactive_cubes_gpu.html @@ -206,7 +206,8 @@ // render the scene - renderer.render( pickingScene, camera, pickingTexture ); + renderer.setRenderTarget( pickingTexture ); + renderer.render( pickingScene, camera ); // clear the view offset so rendering returns to normal @@ -252,6 +253,7 @@ pick(); + renderer.setRenderTarget( null ); renderer.render( scene, camera ); } diff --git a/examples/webgl_interactive_instances_gpu.html b/examples/webgl_interactive_instances_gpu.html index 06e4ddb20e..12e5132d97 100644 --- a/examples/webgl_interactive_instances_gpu.html +++ b/examples/webgl_interactive_instances_gpu.html @@ -1045,15 +1045,17 @@ highlightBox.visible = false; + renderer.setRenderTarget( pickingRenderTarget ); + if ( singlePickingMaterial ) { scene.overrideMaterial = singlePickingMaterial; - renderer.render( scene, camera, pickingRenderTarget ); + renderer.render( scene, camera ); scene.overrideMaterial = null; } else { - renderer.render( pickingScene, camera, pickingRenderTarget ); + renderer.render( pickingScene, camera ); } @@ -1105,6 +1107,7 @@ function render() { pick(); + renderer.setRenderTarget( null ); renderer.render( scene, camera ); } diff --git a/examples/webgl_materials_nodes.html b/examples/webgl_materials_nodes.html index a08c6b237c..d53299b14d 100644 --- a/examples/webgl_materials_nodes.html +++ b/examples/webgl_materials_nodes.html @@ -2748,12 +2748,15 @@ scene.overrideMaterial = rtMaterial; - renderer.render( scene, camera, rtTexture, true ); + renderer.setRenderTarget( rtTexture ); + renderer.clear(); + renderer.render( scene, camera ); scene.overrideMaterial = null; } + renderer.setRenderTarget( null ); renderer.render( scene, camera ); requestAnimationFrame( animate ); diff --git a/examples/webgl_postprocessing_dof2.html b/examples/webgl_postprocessing_dof2.html index 19f6c934cb..870e766121 100644 --- a/examples/webgl_postprocessing_dof2.html +++ b/examples/webgl_postprocessing_dof2.html @@ -507,16 +507,21 @@ // render scene into texture - renderer.render( scene, camera, postprocessing.rtTextureColor, true ); + renderer.setRenderTarget( postprocessing.rtTextureColor ); + renderer.clear(); + renderer.render( scene, camera ); // render depth into texture scene.overrideMaterial = materialDepth; - renderer.render( scene, camera, postprocessing.rtTextureDepth, true ); + renderer.setRenderTarget( postprocessing.rtTextureDepth ); + renderer.clear(); + renderer.render( scene, camera ); scene.overrideMaterial = null; // render bokeh composite + renderer.setRenderTarget( null ); renderer.render( postprocessing.scene, postprocessing.camera ); @@ -524,6 +529,7 @@ scene.overrideMaterial = null; + renderer.setRenderTarget( null ); renderer.clear(); renderer.render( scene, camera ); diff --git a/examples/webgl_postprocessing_godrays.html b/examples/webgl_postprocessing_godrays.html index ad926c2d24..4584ac721d 100644 --- a/examples/webgl_postprocessing_godrays.html +++ b/examples/webgl_postprocessing_godrays.html @@ -302,7 +302,8 @@ postprocessing.godrayGenUniforms[ "fStepSize" ].value = stepSize; postprocessing.godrayGenUniforms[ "tInput" ].value = inputTex; - renderer.render( postprocessing.scene, postprocessing.camera, renderTarget ); + renderer.setRenderTarget( renderTarget ); + renderer.render( postprocessing.scene, postprocessing.camera ); postprocessing.scene.overrideMaterial = null; } @@ -360,7 +361,8 @@ postprocessing.godraysFakeSunUniforms[ "fAspect" ].value = window.innerWidth / window.innerHeight; postprocessing.scene.overrideMaterial = postprocessing.materialGodraysFakeSun; - renderer.render( postprocessing.scene, postprocessing.camera, postprocessing.rtTextureColors ); + renderer.render( postprocessing.rtTextureColors ); + renderer.render( postprocessing.scene, postprocessing.camera ); renderer.setScissorTest( false ); @@ -369,19 +371,23 @@ // Colors scene.overrideMaterial = null; - renderer.render( scene, camera, postprocessing.rtTextureColors ); + renderer.setRenderTarget( postprocessing.rtTextureColors ); + renderer.render( scene, camera ); // Depth scene.overrideMaterial = materialDepth; - renderer.render( scene, camera, postprocessing.rtTextureDepth, true ); + renderer.setRenderTarget( postprocessing.rtTextureDepth ); + renderer.clear(); + renderer.render( scene, camera ); // postprocessing.godrayMaskUniforms[ "tInput" ].value = postprocessing.rtTextureDepth.texture; postprocessing.scene.overrideMaterial = postprocessing.materialGodraysDepthMask; - renderer.render( postprocessing.scene, postprocessing.camera, postprocessing.rtTextureDepthMask ); + renderer.setRenderTarget( postprocessing.rtTextureDepthMask ); + renderer.render( postprocessing.scene, postprocessing.camera ); // -- Render god-rays -- @@ -414,11 +420,13 @@ postprocessing.scene.overrideMaterial = postprocessing.materialGodraysCombine; + renderer.setRenderTarget( null ); renderer.render( postprocessing.scene, postprocessing.camera ); postprocessing.scene.overrideMaterial = null; } else { + renderer.setRenderTarget( null ); renderer.clear(); renderer.render( scene, camera ); diff --git a/examples/webgl_read_float_buffer.html b/examples/webgl_read_float_buffer.html index 2d6841d160..5e50916975 100644 --- a/examples/webgl_read_float_buffer.html +++ b/examples/webgl_read_float_buffer.html @@ -240,10 +240,13 @@ // Render first scene into texture - renderer.render( sceneRTT, cameraRTT, rtTexture, true ); + renderer.setRenderTarget( rtTexture ); + renderer.clear(); + renderer.render( sceneRTT, cameraRTT ); // Render full screen quad with generated texture + renderer.setRenderTarget( null ); renderer.render( sceneScreen, cameraRTT ); var read = new Float32Array( 4 ); diff --git a/examples/webgl_rtt.html b/examples/webgl_rtt.html index 448c8fd6d5..87b1349e66 100644 --- a/examples/webgl_rtt.html +++ b/examples/webgl_rtt.html @@ -252,14 +252,17 @@ material.uniforms[ "time" ].value += delta; - renderer.clear(); // Render first scene into texture - renderer.render( sceneRTT, cameraRTT, rtTexture, true ); + renderer.setRenderTarget( rtTexture ); + renderer.clear(); + renderer.render( sceneRTT, cameraRTT ); // Render full screen quad with generated texture + renderer.setRenderTarget( null ); + renderer.clear(); renderer.render( sceneScreen, cameraRTT ); // Render second scene to screen diff --git a/examples/webgl_simple_gi.html b/examples/webgl_simple_gi.html index b5845c32fa..448bb97c85 100644 --- a/examples/webgl_simple_gi.html +++ b/examples/webgl_simple_gi.html @@ -113,7 +113,8 @@ camera.position.copy( position ); camera.lookAt( position.add( normal ) ); - renderer.render( clone, camera, rt ); + renderer.setRenderTarget( rt ); + renderer.render( clone, camera ); renderer.readRenderTargetPixels( rt, 0, 0, SIZE, SIZE, buffer ); @@ -243,6 +244,7 @@ requestAnimationFrame( animate ); + renderer.setRenderTarget( null ); renderer.render( scene, camera ); } diff --git a/examples/webgl_terrain_dynamic.html b/examples/webgl_terrain_dynamic.html index f3c735c8a6..ab11bead67 100644 --- a/examples/webgl_terrain_dynamic.html +++ b/examples/webgl_terrain_dynamic.html @@ -491,13 +491,18 @@ uniformsTerrain[ 'uOffset' ].value.x = 4 * uniformsNoise[ 'offset' ].value.x; quadTarget.material = mlib[ 'heightmap' ]; - renderer.render( sceneRenderTarget, cameraOrtho, heightMap, true ); + renderer.setRenderTarget( heightMap ); + renderer.clear(); + renderer.render( sceneRenderTarget, cameraOrtho ); quadTarget.material = mlib[ 'normal' ]; - renderer.render( sceneRenderTarget, cameraOrtho, normalMap, true ); + renderer.setRenderTarget( normalMap ); + renderer.clear(); + renderer.render( sceneRenderTarget, cameraOrtho ); } + renderer.setRenderTarget( null ); renderer.render( scene, camera ); } diff --git a/examples/webgl_tiled_forward.html b/examples/webgl_tiled_forward.html index 366593a06e..0b20c1785a 100644 --- a/examples/webgl_tiled_forward.html +++ b/examples/webgl_tiled_forward.html @@ -386,7 +386,8 @@ update( time / 1000 ); stats.begin(); - renderer.render( scene, camera, renderTarget ); + renderer.setRenderTarget( renderTarget ); + renderer.render( scene, camera ); stats.end(); } ); diff --git a/src/cameras/CubeCamera.js b/src/cameras/CubeCamera.js index 377137dbc7..ae3ae3ecf2 100644 --- a/src/cameras/CubeCamera.js +++ b/src/cameras/CubeCamera.js @@ -66,24 +66,26 @@ function CubeCamera( near, far, cubeResolution, options ) { renderTarget.texture.generateMipmaps = false; renderTarget.activeCubeFace = 0; - renderer.render( scene, cameraPX, renderTarget ); + renderer.setRenderTarget( renderTarget ); + + renderer.render( scene, cameraPX ); renderTarget.activeCubeFace = 1; - renderer.render( scene, cameraNX, renderTarget ); + renderer.render( scene, cameraNX ); renderTarget.activeCubeFace = 2; - renderer.render( scene, cameraPY, renderTarget ); + renderer.render( scene, cameraPY ); renderTarget.activeCubeFace = 3; - renderer.render( scene, cameraNY, renderTarget ); + renderer.render( scene, cameraNY ); renderTarget.activeCubeFace = 4; - renderer.render( scene, cameraPZ, renderTarget ); + renderer.render( scene, cameraPZ ); renderTarget.texture.generateMipmaps = generateMipmaps; renderTarget.activeCubeFace = 5; - renderer.render( scene, cameraNZ, renderTarget ); + renderer.render( scene, cameraNZ ); renderer.setRenderTarget( currentRenderTarget ); -- GitLab