Skip to content

Commit

Permalink
Set Pass.renderToScreen automatically in EffectComposer
Browse files Browse the repository at this point in the history
The last enabled EffectComposer pass is the only one that can really render to the screen, so we can set the renderToScreen flag in the passes automatically. The only case where EffectComposers don't render to the screen at all in the current examples is webgl_materials_skin, that sets up multiple EffectComposers and then combines their results. For that special case we now have a renderToScreen flag in EffectComposer.

This simplifies setting up EffectComposer and will make further enhancements a bit easier.
  • Loading branch information
Oletus committed Mar 22, 2019
1 parent a6ad8c5 commit 911e4b2
Show file tree
Hide file tree
Showing 41 changed files with 25 additions and 72 deletions.
21 changes: 20 additions & 1 deletion examples/js/postprocessing/EffectComposer.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ THREE.EffectComposer = function ( renderer, renderTarget ) {
this.writeBuffer = this.renderTarget1;
this.readBuffer = this.renderTarget2;

this.renderToScreen = true;

this.passes = [];

// dependencies
Expand Down Expand Up @@ -75,6 +77,22 @@ Object.assign( THREE.EffectComposer.prototype, {

},

isLastEnabledPass: function ( passIndex ) {

for ( var i = passIndex + 1; i < this.passes.length; i ++ ) {

if ( this.passes[i].enabled ) {

return false;

}

}

return true;

},

render: function ( deltaTime ) {

// deltaTime value is in seconds
Expand All @@ -99,6 +117,7 @@ Object.assign( THREE.EffectComposer.prototype, {

if ( pass.enabled === false ) continue;

pass.renderToScreen = ( this.renderToScreen && this.isLastEnabledPass( i ) );
pass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive );

if ( pass.needsSwap ) {
Expand Down Expand Up @@ -187,7 +206,7 @@ THREE.Pass = function () {
// if set to true, the pass clears its buffer before rendering
this.clear = false;

// if set to true, the result of the pass is rendered to screen
// if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.
this.renderToScreen = false;

};
Expand Down
2 changes: 0 additions & 2 deletions examples/misc_controls_fly.html
Original file line number Diff line number Diff line change
Expand Up @@ -240,8 +240,6 @@
var renderModel = new THREE.RenderPass( scene, camera );
var effectFilm = new THREE.FilmPass( 0.35, 0.75, 2048, false );

effectFilm.renderToScreen = true;

composer = new THREE.EffectComposer( renderer );

composer.addPass( renderModel );
Expand Down
1 change: 0 additions & 1 deletion examples/webgl2_multisampled_renderbuffers.html
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,6 @@

var renderPass = new THREE.RenderPass( scene, camera );
var copyPass = new THREE.ShaderPass( THREE.CopyShader );
copyPass.renderToScreen = true;

//

Expand Down
14 changes: 1 addition & 13 deletions examples/webgl_lightningstrike.html
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,6 @@
outlinePass.edgeThickness = 2.8;
outlinePass.visibleEdgeColor = visibleColor;
outlinePass.hiddenEdgeColor.set( 0 );
outlinePass.renderToScreen = true;
composer.addPass( outlinePass );

scene.userData.outlineEnabled = true;
Expand Down Expand Up @@ -580,18 +579,7 @@

controls.update();

if ( scene.userData.outlineEnabled ) {

outlinePass.enabled = true;
rayPass.renderToScreen = false;

}
else {

outlinePass.enabled = false;
rayPass.renderToScreen = true;

}
outlinePass.enabled = scene.userData.outlineEnabled;

composer.render();

Expand Down
1 change: 0 additions & 1 deletion examples/webgl_loader_sea3d.html
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,6 @@
composer.addPass( vignettePass );

composer.addPass( copyPass );
copyPass.renderToScreen = true;

// events

Expand Down
1 change: 0 additions & 1 deletion examples/webgl_loader_sea3d_bvh.html
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,6 @@
composer.addPass( vignettePass );

composer.addPass( copyPass );
copyPass.renderToScreen = true;

// events

Expand Down
1 change: 0 additions & 1 deletion examples/webgl_loader_sea3d_bvh_retarget.html
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,6 @@
composer.addPass( vignettePass );

composer.addPass( copyPass );
copyPass.renderToScreen = true;

// events

Expand Down
1 change: 0 additions & 1 deletion examples/webgl_loader_sea3d_hierarchy.html
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,6 @@
composer.addPass( vignettePass );

var copyPass = new THREE.ShaderPass( THREE.CopyShader );
copyPass.renderToScreen = true;
composer.addPass( copyPass );

// events
Expand Down
1 change: 0 additions & 1 deletion examples/webgl_loader_sea3d_keyframe.html
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,6 @@
composer.addPass( vignettePass );

composer.addPass( copyPass );
copyPass.renderToScreen = true;

// events

Expand Down
1 change: 0 additions & 1 deletion examples/webgl_loader_sea3d_morph.html
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,6 @@
composer.addPass( vignettePass );

composer.addPass( copyPass );
copyPass.renderToScreen = true;

// events

Expand Down
1 change: 0 additions & 1 deletion examples/webgl_loader_sea3d_physics.html
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,6 @@
composer.addPass( vignettePass );

composer.addPass( copyPass );
copyPass.renderToScreen = true;

// events

Expand Down
1 change: 0 additions & 1 deletion examples/webgl_loader_sea3d_skinning.html
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,6 @@
composer.addPass( vignettePass );

composer.addPass( copyPass );
copyPass.renderToScreen = true;

// events

Expand Down
1 change: 0 additions & 1 deletion examples/webgl_loader_sea3d_sound.html
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,6 @@
composer.addPass( vignettePass );

composer.addPass( copyPass );
copyPass.renderToScreen = true;

// events

Expand Down
2 changes: 0 additions & 2 deletions examples/webgl_materials_bumpmap_skin.html
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,6 @@
var effectBeckmann = new THREE.ShaderPass( THREE.ShaderSkin[ "beckmann" ] );
var effectCopy = new THREE.ShaderPass( THREE.CopyShader );

effectCopy.renderToScreen = true;

var pars = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBFormat, stencilBuffer: false };
var rtwidth = 512, rtheight = 512;

Expand Down
2 changes: 0 additions & 2 deletions examples/webgl_materials_normalmap.html
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,6 @@
effectColor.uniforms[ 'powRGB' ].value.set( 1.4, 1.45, 1.45 );
effectColor.uniforms[ 'mulRGB' ].value.set( 1.1, 1.1, 1.1 );

effectColor.renderToScreen = true;

composer = new THREE.EffectComposer( renderer );

composer.addPass( renderModel );
Expand Down
8 changes: 4 additions & 4 deletions examples/webgl_materials_skin.html
Original file line number Diff line number Diff line change
Expand Up @@ -186,8 +186,6 @@

var renderModelUV = new THREE.RenderPass( scene, camera, materialUV, new THREE.Color( 0x575757 ) );

var effectCopy = new THREE.ShaderPass( THREE.CopyShader );

var effectBloom1 = new THREE.BloomPass( 1, 15, 2, 512 );
var effectBloom2 = new THREE.BloomPass( 1, 25, 3, 512 );
var effectBloom3 = new THREE.BloomPass( 1, 25, 4, 512 );
Expand All @@ -196,8 +194,6 @@
effectBloom2.clear = true;
effectBloom3.clear = true;

effectCopy.renderToScreen = true;

//

var pars = {
Expand All @@ -215,6 +211,7 @@

composer = new THREE.EffectComposer( renderer, new THREE.WebGLRenderTarget( rtwidth, rtheight, pars ) );
composer.addPass( renderModelUV );
composer.renderToScreen = false;

var renderScene = new THREE.TexturePass( composer.renderTarget2.texture );

Expand All @@ -224,16 +221,19 @@

composerUV1.addPass( renderScene );
composerUV1.addPass( effectBloom1 );
composerUV1.renderToScreen = false;

composerUV2 = new THREE.EffectComposer( renderer, new THREE.WebGLRenderTarget( rtwidth, rtheight, pars ) );

composerUV2.addPass( renderScene );
composerUV2.addPass( effectBloom2 );
composerUV2.renderToScreen = false;

composerUV3 = new THREE.EffectComposer( renderer, new THREE.WebGLRenderTarget( rtwidth, rtheight, pars ) );

composerUV3.addPass( renderScene );
composerUV3.addPass( effectBloom3 );
composerUV3.renderToScreen = false;

//

Expand Down
2 changes: 0 additions & 2 deletions examples/webgl_materials_video.html
Original file line number Diff line number Diff line change
Expand Up @@ -223,8 +223,6 @@
var effectBloom = new THREE.BloomPass( 1.3 );
var effectCopy = new THREE.ShaderPass( THREE.CopyShader );

effectCopy.renderToScreen = true;

composer = new THREE.EffectComposer( renderer );

composer.addPass( renderModel );
Expand Down
2 changes: 0 additions & 2 deletions examples/webgl_points_dynamic.html
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,6 @@
effectFocus.uniforms[ "screenWidth" ].value = window.innerWidth;
effectFocus.uniforms[ "screenHeight" ].value = window.innerHeight;

effectFocus.renderToScreen = true;

composer = new THREE.EffectComposer( renderer );

composer.addPass( renderModel );
Expand Down
1 change: 0 additions & 1 deletion examples/webgl_postprocessing.html
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@

var effect = new THREE.ShaderPass( THREE.RGBShiftShader );
effect.uniforms[ 'amount' ].value = 0.0015;
effect.renderToScreen = true;
composer.addPass( effect );

//
Expand Down
7 changes: 0 additions & 7 deletions examples/webgl_postprocessing_advanced.html
Original file line number Diff line number Diff line change
Expand Up @@ -206,13 +206,6 @@

renderMaskInverse.inverse = true;

//effectFilm.renderToScreen = true;
//effectFilmBW.renderToScreen = true;
//effectDotScreen.renderToScreen = true;
//effectBleach.renderToScreen = true;
effectVignette.renderToScreen = true;
//effectCopy.renderToScreen = true;

//

var rtParameters = {
Expand Down
1 change: 0 additions & 1 deletion examples/webgl_postprocessing_afterimage.html
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@
composer.addPass( new THREE.RenderPass( scene, camera ) );

afterimagePass = new THREE.AfterimagePass();
afterimagePass.renderToScreen = true;
composer.addPass( afterimagePass );

window.addEventListener( 'resize', onWindowResize, false );
Expand Down
1 change: 0 additions & 1 deletion examples/webgl_postprocessing_backgrounds.html
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,6 @@
composer.addPass( renderPass );

var copyPass = new THREE.ShaderPass( THREE.CopyShader );
copyPass.renderToScreen = true;
composer.addPass( copyPass );

var controls = new THREE.OrbitControls( cameraP, renderer.domElement );
Expand Down
2 changes: 0 additions & 2 deletions examples/webgl_postprocessing_dof.html
Original file line number Diff line number Diff line change
Expand Up @@ -260,8 +260,6 @@
height: height
} );

bokehPass.renderToScreen = true;

var composer = new THREE.EffectComposer( renderer );

composer.addPass( renderPass );
Expand Down
2 changes: 0 additions & 2 deletions examples/webgl_postprocessing_fxaa.html
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,6 @@
//

fxaaPass = new THREE.ShaderPass( THREE.FXAAShader );
fxaaPass.renderToScreen = true;

var pixelRatio = renderer.getPixelRatio();

Expand All @@ -150,7 +149,6 @@
//

var copyPass = new THREE.ShaderPass( THREE.CopyShader );
copyPass.renderToScreen = true;

composer2 = new THREE.EffectComposer( renderer );
composer2.addPass( renderPass );
Expand Down
1 change: 0 additions & 1 deletion examples/webgl_postprocessing_glitch.html
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@
composer.addPass( new THREE.RenderPass( scene, camera ) );

glitchPass = new THREE.GlitchPass();
glitchPass.renderToScreen = true;
composer.addPass( glitchPass );


Expand Down
1 change: 0 additions & 1 deletion examples/webgl_postprocessing_masking.html
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@
var texturePass2 = new THREE.TexturePass( texture2 );

var outputPass = new THREE.ShaderPass( THREE.CopyShader );
outputPass.renderToScreen = true;

var parameters = {
minFilter: THREE.LinearFilter,
Expand Down
1 change: 0 additions & 1 deletion examples/webgl_postprocessing_nodes_pass.html
Original file line number Diff line number Diff line change
Expand Up @@ -516,7 +516,6 @@
composer.addPass( new THREE.RenderPass( scene, camera ) );

nodepass = new NodePass();
nodepass.renderToScreen = true;

composer.addPass( nodepass );

Expand Down
1 change: 0 additions & 1 deletion examples/webgl_postprocessing_outline.html
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,6 @@

effectFXAA = new THREE.ShaderPass( THREE.FXAAShader );
effectFXAA.uniforms[ 'resolution' ].value.set( 1 / window.innerWidth, 1 / window.innerHeight );
effectFXAA.renderToScreen = true;
composer.addPass( effectFXAA );

window.addEventListener( 'resize', onWindowResize, false );
Expand Down
1 change: 0 additions & 1 deletion examples/webgl_postprocessing_pixel.html
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,6 @@
pixelPass = new THREE.ShaderPass( THREE.PixelShader );
pixelPass.uniforms[ "resolution" ].value = new THREE.Vector2( window.innerWidth, window.innerHeight );
pixelPass.uniforms[ "resolution" ].value.multiplyScalar( window.devicePixelRatio );
pixelPass.renderToScreen = true;
composer.addPass( pixelPass );

window.addEventListener( 'resize', resize );
Expand Down
1 change: 0 additions & 1 deletion examples/webgl_postprocessing_rgb_halftone.html
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,6 @@
disable: false
};
halftonePass = new THREE.HalftonePass( window.innerWidth, window.innerHeight, params );
halftonePass.renderToScreen = true;
composer.addPass( renderPass );
composer.addPass( halftonePass );

Expand Down
1 change: 0 additions & 1 deletion examples/webgl_postprocessing_sao.html
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,6 @@
renderPass = new THREE.RenderPass( scene, camera );
composer.addPass( renderPass );
saoPass = new THREE.SAOPass( scene, camera, false, true );
saoPass.renderToScreen = true;
composer.addPass( saoPass );

// Init gui
Expand Down
1 change: 0 additions & 1 deletion examples/webgl_postprocessing_smaa.html
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@
composer.addPass( new THREE.RenderPass( scene, camera ) );

pass = new THREE.SMAAPass( window.innerWidth * renderer.getPixelRatio(), window.innerHeight * renderer.getPixelRatio() );
pass.renderToScreen = true;
composer.addPass( pass );

window.addEventListener( 'resize', onWindowResize, false );
Expand Down
1 change: 0 additions & 1 deletion examples/webgl_postprocessing_sobel.html
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,6 @@
// Sobel operator

effectSobel = new THREE.ShaderPass( THREE.SobelOperatorShader );
effectSobel.renderToScreen = true;
effectSobel.uniforms[ "resolution" ].value.x = window.innerWidth;
effectSobel.uniforms[ "resolution" ].value.y = window.innerHeight;
composer.addPass( effectSobel );
Expand Down
1 change: 0 additions & 1 deletion examples/webgl_postprocessing_ssaa.html
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,6 @@
composer.addPass( ssaaRenderPass );

copyPass = new THREE.ShaderPass( THREE.CopyShader );
copyPass.renderToScreen = true;
composer.addPass( copyPass );

window.addEventListener( 'resize', onWindowResize, false );
Expand Down
Loading

0 comments on commit 911e4b2

Please sign in to comment.