Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -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 ++ ) {
Expand All @@ -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;

},
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