diff --git a/src/effects/BokehPass.js b/src/effects/BokehPass.js index 61481ff..bb38876 100644 --- a/src/effects/BokehPass.js +++ b/src/effects/BokehPass.js @@ -37,8 +37,7 @@ export default { height: this.three.size.height, }; const pass = new BokehPass(this.three.scene, this.three.camera, params); - this.passes.push(pass); - this.pass = pass; + this.completePass(pass); }, __hmrId: 'BokehPass', }; diff --git a/src/effects/EffectPass.js b/src/effects/EffectPass.js index e892fb0..a93d5a1 100644 --- a/src/effects/EffectPass.js +++ b/src/effects/EffectPass.js @@ -1,5 +1,6 @@ export default { inject: ['three', 'passes'], + events: ['ready'], beforeMount() { if (!this.passes) { console.error('Missing parent EffectComposer'); @@ -8,6 +9,13 @@ export default { unmounted() { if (this.pass.dispose) this.pass.dispose(); }, + methods: { + completePass(pass) { + this.passes.push(pass); + this.pass = pass; + this.$emit('ready', pass); + } + }, render() { return []; }, diff --git a/src/effects/FXAAPass.js b/src/effects/FXAAPass.js index 3442acf..3a69ffe 100644 --- a/src/effects/FXAAPass.js +++ b/src/effects/FXAAPass.js @@ -6,8 +6,7 @@ export default { extends: EffectPass, mounted() { const pass = new ShaderPass(FXAAShader); - this.passes.push(pass); - this.pass = pass; + this.completePass(pass); // resize will be called in three init this.three.onAfterResize(this.resize); diff --git a/src/effects/FilmPass.js b/src/effects/FilmPass.js index c199532..2c49018 100644 --- a/src/effects/FilmPass.js +++ b/src/effects/FilmPass.js @@ -29,8 +29,7 @@ export default { }, mounted() { const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale); - this.passes.push(pass); - this.pass = pass; + this.completePass(pass); }, __hmrId: 'FilmPass', }; diff --git a/src/effects/HalftonePass.js b/src/effects/HalftonePass.js index 8be4ff6..3da12e8 100644 --- a/src/effects/HalftonePass.js +++ b/src/effects/HalftonePass.js @@ -22,8 +22,7 @@ export default { }); }); - this.passes.push(pass); - this.pass = pass; + this.completePass(pass); }, __hmrId: 'HalftonePass', }; diff --git a/src/effects/RenderPass.js b/src/effects/RenderPass.js index 9caab8f..c82875f 100644 --- a/src/effects/RenderPass.js +++ b/src/effects/RenderPass.js @@ -11,8 +11,7 @@ export default { console.error('Missing Camera'); } const pass = new RenderPass(this.three.scene, this.three.camera); - this.passes.push(pass); - this.pass = pass; + this.completePass(pass); }, __hmrId: 'RenderPass', }; diff --git a/src/effects/SMAAPass.js b/src/effects/SMAAPass.js index b762eb1..06a70fd 100644 --- a/src/effects/SMAAPass.js +++ b/src/effects/SMAAPass.js @@ -6,8 +6,7 @@ export default { mounted() { // three size is not set yet, but this pass will be resized by effect composer const pass = new SMAAPass(this.three.size.width, this.three.size.height); - this.passes.push(pass); - this.pass = pass; + this.completePass(pass); }, __hmrId: 'SMAAPass', }; diff --git a/src/effects/SSAOPass.js b/src/effects/SSAOPass.js index 949e089..0c501f0 100644 --- a/src/effects/SSAOPass.js +++ b/src/effects/SSAOPass.js @@ -18,8 +18,7 @@ export default { this.three.size.width, this.three.size.height ); - this.passes.push(pass); - this.pass = pass; + this.completePass(pass); for (let key of Object.keys(this.options)) { this.pass[key] = this.options[key]; diff --git a/src/effects/TiltShiftPass.js b/src/effects/TiltShiftPass.js index 7046969..1293a62 100644 --- a/src/effects/TiltShiftPass.js +++ b/src/effects/TiltShiftPass.js @@ -39,6 +39,9 @@ export default { this.pass.setSize = (width, height) => { uniforms.texSize.value.set(width, height); }; + + this.completePass(pass); + this.completePass(pass1); }, methods: { updateFocusLine() { diff --git a/src/effects/UnrealBloomPass.js b/src/effects/UnrealBloomPass.js index 039597c..83a4006 100644 --- a/src/effects/UnrealBloomPass.js +++ b/src/effects/UnrealBloomPass.js @@ -17,8 +17,7 @@ export default { mounted() { const size = new Vector2(this.three.size.width, this.three.size.height); const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold); - this.passes.push(pass); - this.pass = pass; + this.completePass(pass); }, __hmrId: 'UnrealBloomPass', }; diff --git a/src/effects/ZoomBlurPass.js b/src/effects/ZoomBlurPass.js index b492af5..910aa84 100644 --- a/src/effects/ZoomBlurPass.js +++ b/src/effects/ZoomBlurPass.js @@ -10,12 +10,13 @@ export default { strength: { type: Number, default: 0.5 }, }, mounted() { - this.pass = new ShaderPass(ZoomBlur); - this.passes.push(this.pass); + const pass = new ShaderPass(ZoomBlur); - const uniforms = this.uniforms = this.pass.uniforms; + const uniforms = this.uniforms = pass.uniforms; bindProp(this, 'center', uniforms.center, 'value'); bindProp(this, 'strength', uniforms.strength, 'value'); + + this.completePass(pass); }, __hmrId: 'ZoomBlurPass', };