@@ -5,8 +5,7 @@ import { DepthDownsamplingPass, EffectComposer as EffectComposerImpl, NormalPass
5
5
6
6
import { isWebGL2Available } from ' three-stdlib'
7
7
import { effectComposerInjectionKey } from ' ./injectionKeys'
8
- import { ShallowRef , computed , provide , shallowRef , watchEffect } from ' vue'
9
- import { onUnmounted } from ' vue'
8
+ import { ShallowRef , computed , provide , shallowRef , watch , onUnmounted , watchEffect } from ' vue'
10
9
11
10
export type EffectComposerProps = {
12
11
enabled? : boolean
@@ -78,13 +77,21 @@ const effectComposerParams = computed(() => {
78
77
return params
79
78
})
80
79
81
- watchEffect (() => {
82
- if (renderer .value && scene .value && camera .value ) {
83
- effectComposer .value = new EffectComposerImpl (renderer .value , effectComposerParams .value )
84
- effectComposer .value .addPass (new RenderPass (scene .value , camera .value ))
80
+ const initEffectComposer = () => {
81
+ if (! renderer .value && ! scene .value && ! camera .value ) return
85
82
86
- if (! props .disableNormalPass ) setNormalPass ()
87
- }
83
+ effectComposer .value = new EffectComposerImpl (renderer .value , effectComposerParams .value )
84
+ effectComposer .value .addPass (new RenderPass (scene .value , camera .value ))
85
+
86
+ if (! props .disableNormalPass ) setNormalPass ()
87
+ }
88
+
89
+ const stop = watch ([sizes .height , sizes .width ], () => {
90
+ // effect composer should only live once the canvas has a size > 0
91
+ if (! sizes .height .value && ! sizes .width .value ) return
92
+
93
+ watchEffect (initEffectComposer )
94
+ stop ?.()
88
95
})
89
96
90
97
const { onLoop } = useRenderLoop ()
0 commit comments