Skip to content

Commit 5fa5d60

Browse files
authored
Merge pull request #210 from CodyJasonBennett/fix/split-effects-passes
fix(EffectComposer): split effects and passes
2 parents d034be0 + 69e0001 commit 5fa5d60

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

src/EffectComposer.tsx

+24-5
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
// @ts-ignore
1919
DepthDownsamplingPass,
2020
Effect,
21+
Pass,
2122
} from 'postprocessing'
2223
import { isWebGL2Available } from 'three-stdlib'
2324

@@ -122,16 +123,34 @@ export const EffectComposer = React.memo(
122123
const group = useRef(null)
123124
const instance = useInstanceHandle(group)
124125
useLayoutEffect(() => {
125-
let effectPass: EffectPass
126+
const passes: Pass[] = []
127+
126128
if (group.current && instance.current && composer) {
127-
effectPass = new EffectPass(camera, ...(instance.current.objects as unknown as Effect[]))
128-
effectPass.renderToScreen = true
129-
composer.addPass(effectPass)
129+
const children = instance.current.objects as unknown[]
130+
131+
for (let i = 0; i < children.length; i++) {
132+
const child = children[i]
133+
134+
if (child instanceof Effect) {
135+
const effects: Effect[] = []
136+
while (children[i] instanceof Effect) effects.push(children[i++] as Effect)
137+
i--
138+
139+
const pass = new EffectPass(camera, ...effects)
140+
passes.push(pass)
141+
} else if (child instanceof Pass) {
142+
passes.push(child)
143+
}
144+
}
145+
146+
for (const pass of passes) composer?.addPass(pass)
147+
130148
if (normalPass) normalPass.enabled = true
131149
if (downSamplingPass) downSamplingPass.enabled = true
132150
}
151+
133152
return () => {
134-
if (effectPass) composer?.removePass(effectPass)
153+
for (const pass of passes) composer?.removePass(pass)
135154
if (normalPass) normalPass.enabled = false
136155
if (downSamplingPass) downSamplingPass.enabled = false
137156
}

0 commit comments

Comments
 (0)