Skip to content

Commit

Permalink
Merge pull request #15571 from maccesch/dev
Browse files Browse the repository at this point in the history
deprecated renderTarget and forceClear from WebGLRenderer.render()
  • Loading branch information
mrdoob committed Feb 13, 2019
2 parents 28b6dc8 + 85f911f commit 253517e
Show file tree
Hide file tree
Showing 53 changed files with 428 additions and 147 deletions.
12 changes: 5 additions & 7 deletions docs/api/en/renderers/WebGLRenderer.html
Original file line number Diff line number Diff line change
Expand Up @@ -368,17 +368,15 @@ <h3>[method:null readRenderTargetPixels]( [param:WebGLRenderTarget renderTarget]
See the [example:webgl_interactive_cubes_gpu interactive / cubes / gpu] example.
</p>

<h3>[method:null render]( [param:Scene scene], [param:Camera camera], [param:WebGLRenderTarget renderTarget], [param:Boolean forceClear] )</h3>
<h3>[method:null render]( [param:Scene scene], [param:Camera camera] )</h3>
<p>
Render a [page:Scene scene] using a [page:Camera camera].<br />

The render is done to the [page:WebGLRenderTarget renderTarget] (if specified) or to the canvas as usual.<br />
The render is done to a previously specified [page:WebGLRenderTarget renderTarget] set by calling [page:WebGLRenderer.setRenderTarget .setRenderTarget] or to the canvas as usual.<br />

If [page:Boolean forceClear] is *true*, the depth, stencil and color buffers will be cleared
before rendering even if the renderer's [page:WebGLRenderer.autoClear autoClear] property is false.<br />

Even with forceClear set to true you can prevent certain buffers being cleared by setting
either the [page:WebGLRenderer.autoClearColor autoClearColor], [page:WebGLRenderer.autoClearStencil autoClearStencil] or [page:WebGLRenderer.autoClearDepth autoClearDepth] properties to false.
By default render buffers are cleared before rendering but you can prevent this by setting the property [page:WebGLRenderer.autoClear autoClear] to false.
If you want to prevent only certain buffers being cleared you can set either the [page:WebGLRenderer.autoClearColor autoClearColor], [page:WebGLRenderer.autoClearStencil autoClearStencil] or
[page:WebGLRenderer.autoClearDepth autoClearDepth] properties to false. To forcibly clear one ore more buffers call [page:WebGLRenderer.clear .clear].
</p>

<h3>[method:null renderBufferDirect]( [param:Camera camera], [param:Fog fog], [param:Geometry geometry], [param:Material material], [param:Object3D object], [param:Object group] )</h3>
Expand Down
10 changes: 8 additions & 2 deletions examples/js/GPUComputationRenderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 ) {
Expand Down Expand Up @@ -316,7 +318,6 @@ function GPUComputationRenderer( sizeX, sizeY, renderer ) {

};


this.renderTexture = function( input, output ) {

// Takes a texture, and render out in rendertarget
Expand All @@ -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
Expand Down
43 changes: 32 additions & 11 deletions examples/js/Ocean.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 );

};

Expand All @@ -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;

};
Expand All @@ -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 );

};

Expand All @@ -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 );

}

Expand All @@ -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 );

}

Expand All @@ -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 );

};
13 changes: 11 additions & 2 deletions examples/js/cameras/CinematicCamera.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 );

}

};
14 changes: 11 additions & 3 deletions examples/js/crossfade/scenes.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 );

}

};

}
6 changes: 4 additions & 2 deletions examples/js/crossfade/transition.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
function Transition ( sceneA, sceneB ) {
function Transition( sceneA, sceneB ) {

this.scene = new THREE.Scene();

Expand Down Expand Up @@ -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 );

}

Expand Down
13 changes: 11 additions & 2 deletions examples/js/effects/AnaglyphEffect.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 () {
Expand Down
28 changes: 24 additions & 4 deletions examples/js/effects/OutlineEffect.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;

}
Expand All @@ -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;
Expand All @@ -429,7 +449,7 @@ THREE.OutlineEffect = function ( renderer, parameters ) {

scene.traverse( setOutlineMaterial );

renderer.render( scene, camera, renderTarget );
renderer.render( scene, camera );

scene.traverse( restoreOriginalMaterial );

Expand Down
9 changes: 8 additions & 1 deletion examples/js/effects/ParallaxBarrierEffect.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 );

};
Expand Down
8 changes: 7 additions & 1 deletion examples/js/loaders/EquirectangularToCubeGenerator.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,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 ++ ) {
Expand All @@ -168,10 +170,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;

},
Expand Down
8 changes: 6 additions & 2 deletions examples/js/nodes/inputs/RTTNode.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 );

};

Expand All @@ -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 );

}

Expand Down
4 changes: 3 additions & 1 deletion examples/js/nodes/postprocessing/NodePostProcessing.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 );

},
Expand Down
Loading

0 comments on commit 253517e

Please sign in to comment.