Skip to content

Commit 7238cb3

Browse files
TinooooTino Koch
andauthored
fix: made effect composer live only when canvas has an area (#46)
Co-authored-by: Tino Koch <[email protected]>
1 parent 9f920f1 commit 7238cb3

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

src/core/EffectComposer.vue

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import { DepthDownsamplingPass, EffectComposer as EffectComposerImpl, NormalPass
55
66
import { isWebGL2Available } from 'three-stdlib'
77
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'
109
1110
export type EffectComposerProps = {
1211
enabled?: boolean
@@ -78,13 +77,21 @@ const effectComposerParams = computed(() => {
7877
return params
7978
})
8079
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
8582
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?.()
8895
})
8996
9097
const { onLoop } = useRenderLoop()

0 commit comments

Comments
 (0)