提交 911e4b21 编写于 作者: O Olli Etuaho

Set Pass.renderToScreen automatically in EffectComposer

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.
上级 a6ad8c59
......@@ -28,6 +28,8 @@ THREE.EffectComposer = function ( renderer, renderTarget ) {
this.writeBuffer = this.renderTarget1;
this.readBuffer = this.renderTarget2;
this.renderToScreen = true;
this.passes = [];
// dependencies
......@@ -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
......@@ -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 ) {
......@@ -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;
};
......
......@@ -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 );
......
......@@ -135,7 +135,6 @@
var renderPass = new THREE.RenderPass( scene, camera );
var copyPass = new THREE.ShaderPass( THREE.CopyShader );
copyPass.renderToScreen = true;
//
......
......@@ -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;
......@@ -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();
......
......@@ -146,7 +146,6 @@
composer.addPass( vignettePass );
composer.addPass( copyPass );
copyPass.renderToScreen = true;
// events
......
......@@ -262,7 +262,6 @@
composer.addPass( vignettePass );
composer.addPass( copyPass );
copyPass.renderToScreen = true;
// events
......
......@@ -211,7 +211,6 @@
composer.addPass( vignettePass );
composer.addPass( copyPass );
copyPass.renderToScreen = true;
// events
......
......@@ -154,7 +154,6 @@
composer.addPass( vignettePass );
var copyPass = new THREE.ShaderPass( THREE.CopyShader );
copyPass.renderToScreen = true;
composer.addPass( copyPass );
// events
......
......@@ -184,7 +184,6 @@
composer.addPass( vignettePass );
composer.addPass( copyPass );
copyPass.renderToScreen = true;
// events
......
......@@ -150,7 +150,6 @@
composer.addPass( vignettePass );
composer.addPass( copyPass );
copyPass.renderToScreen = true;
// events
......
......@@ -177,7 +177,6 @@
composer.addPass( vignettePass );
composer.addPass( copyPass );
copyPass.renderToScreen = true;
// events
......
......@@ -198,7 +198,6 @@
composer.addPass( vignettePass );
composer.addPass( copyPass );
copyPass.renderToScreen = true;
// events
......
......@@ -349,7 +349,6 @@
composer.addPass( vignettePass );
composer.addPass( copyPass );
copyPass.renderToScreen = true;
// events
......
......@@ -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;
......
......@@ -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 );
......
......@@ -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 );
......@@ -196,8 +194,6 @@
effectBloom2.clear = true;
effectBloom3.clear = true;
effectCopy.renderToScreen = true;
//
var pars = {
......@@ -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 );
......@@ -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;
//
......
......@@ -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 );
......
......@@ -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 );
......
......@@ -82,7 +82,6 @@
var effect = new THREE.ShaderPass( THREE.RGBShiftShader );
effect.uniforms[ 'amount' ].value = 0.0015;
effect.renderToScreen = true;
composer.addPass( effect );
//
......
......@@ -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 = {
......
......@@ -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 );
......
......@@ -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 );
......
......@@ -260,8 +260,6 @@
height: height
} );
bokehPass.renderToScreen = true;
var composer = new THREE.EffectComposer( renderer );
composer.addPass( renderPass );
......
......@@ -136,7 +136,6 @@
//
fxaaPass = new THREE.ShaderPass( THREE.FXAAShader );
fxaaPass.renderToScreen = true;
var pixelRatio = renderer.getPixelRatio();
......@@ -150,7 +149,6 @@
//
var copyPass = new THREE.ShaderPass( THREE.CopyShader );
copyPass.renderToScreen = true;
composer2 = new THREE.EffectComposer( renderer );
composer2.addPass( renderPass );
......
......@@ -103,7 +103,6 @@
composer.addPass( new THREE.RenderPass( scene, camera ) );
glitchPass = new THREE.GlitchPass();
glitchPass.renderToScreen = true;
composer.addPass( glitchPass );
......
......@@ -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,
......
......@@ -516,7 +516,6 @@
composer.addPass( new THREE.RenderPass( scene, camera ) );
nodepass = new NodePass();
nodepass.renderToScreen = true;
composer.addPass( nodepass );
......
......@@ -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 );
......
......@@ -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 );
......
......@@ -149,7 +149,6 @@
disable: false
};
halftonePass = new THREE.HalftonePass( window.innerWidth, window.innerHeight, params );
halftonePass.renderToScreen = true;
composer.addPass( renderPass );
composer.addPass( halftonePass );
......
......@@ -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
......
......@@ -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 );
......
......@@ -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 );
......
......@@ -128,7 +128,6 @@
composer.addPass( ssaaRenderPass );
copyPass = new THREE.ShaderPass( THREE.CopyShader );
copyPass.renderToScreen = true;
composer.addPass( copyPass );
window.addEventListener( 'resize', onWindowResize, false );
......
......@@ -182,7 +182,6 @@
ssaaRenderPassO = new THREE.SSAARenderPass( scene, cameraO );
composer.addPass( ssaaRenderPassO );
copyPass = new THREE.ShaderPass( THREE.CopyShader );
copyPass.renderToScreen = true;
composer.addPass( copyPass );
window.addEventListener( 'resize', onWindowResize, false );
......@@ -251,7 +250,6 @@
ssaaRenderPassP.enabled = ( params.camera === 'perspective' );
ssaaRenderPassO.enabled = ( params.camera === 'orthographic' );
ssaaRenderPassP.renderToScreen = ssaaRenderPassO.renderToScreen = params.renderToScreen;
copyPass.enabled = ! params.renderToScreen;
composer.render();
......
......@@ -127,7 +127,6 @@
ssaoPass = new THREE.SSAOPass( scene, camera, width, height );
ssaoPass.kernelRadius = 16;
ssaoPass.renderToScreen = true;
effectComposer = new THREE.EffectComposer( renderer );
effectComposer.addPass( ssaoPass );
......
......@@ -157,7 +157,6 @@
composer.addPass( renderPass );
copyPass = new THREE.ShaderPass( THREE.CopyShader );
copyPass.renderToScreen = true;
composer.addPass( copyPass );
window.addEventListener( 'resize', onWindowResize, false );
......
......@@ -104,7 +104,6 @@
var renderScene = new THREE.RenderPass( scene, camera );
var bloomPass = new THREE.UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 );
bloomPass.renderToScreen = true;
bloomPass.threshold = params.bloomThreshold;
bloomPass.strength = params.bloomStrength;
bloomPass.radius = params.bloomRadius;
......
......@@ -183,8 +183,6 @@
var effectBloom = new THREE.BloomPass( 1.25 );
var effectFilm = new THREE.FilmPass( 0.35, 0.95, 2048, false );
effectFilm.renderToScreen = true;
composer = new THREE.EffectComposer( renderer );
composer.addPass( renderModel );
......
......@@ -368,7 +368,6 @@
hdrToneMappingPass = new THREE.AdaptiveToneMappingPass( false, 256 );
bloomPass = new THREE.BloomPass();
var gammaCorrectionPass = new THREE.ShaderPass( THREE.GammaCorrectionShader );
gammaCorrectionPass.renderToScreen = true;
dynamicHdrEffectComposer.addPass( skyboxPass );
dynamicHdrEffectComposer.addPass( scenePass );
......@@ -390,7 +389,6 @@
ldrEffectComposer.addPass( gammaCorrectionPass );
// var gammaPass = new THREE.ShaderPass( GammaShader );
// gammaPass.renderToScreen = true;
// ldrEffectComposer.addPass( gammaPass );
var gui = new dat.GUI();
......
......@@ -215,7 +215,6 @@
composer.addPass( renderScene );
var copyPass = new THREE.ShaderPass( THREE.CopyShader );
copyPass.renderToScreen = true;
composer.addPass( copyPass );
stats = new Stats();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册