Skip to content

Commit 0a5b05c

Browse files
committed
refactor: use an array of passes instead of an object in CompositeEffectPass
1 parent 6af2036 commit 0a5b05c

File tree

4 files changed

+11
-16
lines changed

4 files changed

+11
-16
lines changed

lib/src/effects/bloom.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ const targetConfig = {
2121
export function bloom(params: BloomParams = {}) {
2222
const { levels = 8, radius = 0.65, mix = 0.5 } = params;
2323

24-
const passes: Record<string, EffectPass<any>> = {};
2524
const downsamplePasses: EffectPass<any>[] = [];
2625

2726
// --- Downsample pyramid (progressively half resolution) ---
@@ -36,7 +35,6 @@ export function bloom(params: BloomParams = {}) {
3635
},
3736
});
3837
downsamplePasses.push(pass);
39-
passes[`downsample${level}`] = pass;
4038
}
4139

4240
// --- Upsample & accumulate ---
@@ -59,7 +57,6 @@ export function bloom(params: BloomParams = {}) {
5957
},
6058
});
6159
upsamplePasses.push(pass);
62-
passes[`upsample${level}`] = pass;
6360
}
6461

6562
// --- Combine original + bloom ---
@@ -71,9 +68,8 @@ export function bloom(params: BloomParams = {}) {
7168
uMix: mix,
7269
},
7370
});
74-
passes["combine"] = combine;
7571

76-
const compositePass = useCompositeEffectPass(passes);
72+
const compositePass = useCompositeEffectPass([...downsamplePasses, ...upsamplePasses, combine]);
7773

7874
return {
7975
...compositePass,

lib/src/hooks/useCompositeEffectPass.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,26 @@ import type {
88
UpdatedCallback,
99
} from "../types";
1010

11-
export function useCompositeEffectPass<P extends Record<string, EffectPass<any>>>(
11+
export function useCompositeEffectPass<P extends EffectPass<any>[]>(
1212
passes: P,
1313
): CompositeEffectPass<P> {
14-
const effectPasses = Object.values(passes);
15-
const outputPass = effectPasses.at(-1)!;
14+
const outputPass = passes.at(-1)!;
1615

1716
const [beforeRenderCallbacks, onBeforeRender] = useLifeCycleCallback<RenderCallback<any>>();
1817
const [afterRenderCallbacks, onAfterRender] = useLifeCycleCallback<RenderCallback<any>>();
1918
const [onUpdatedCallbacks, onUpdated] = useLifeCycleCallback<UpdatedCallback<any>>();
2019

2120
function render() {
2221
for (const callback of beforeRenderCallbacks) callback({ uniforms: {} });
23-
for (const pass of effectPasses) pass.render();
22+
for (const pass of passes) pass.render();
2423
for (const callback of afterRenderCallbacks) callback({ uniforms: {} });
2524
}
2625

2726
function initialize(gl: WebGL2RenderingContext) {
28-
for (const [index, pass] of effectPasses.entries()) {
27+
for (const [index, pass] of passes.entries()) {
2928
pass.initialize(gl);
3029

31-
if (index < effectPasses.length - 1 && pass.target == undefined) {
30+
if (index < passes.length - 1 && pass.target == undefined) {
3231
pass.setTarget(createRenderTarget(gl));
3332
}
3433

@@ -41,7 +40,7 @@ export function useCompositeEffectPass<P extends Record<string, EffectPass<any>>
4140
}
4241

4342
function setSize(size: { width: number; height: number }) {
44-
for (const pass of effectPasses) {
43+
for (const pass of passes) {
4544
pass.setSize(size);
4645
}
4746
}

lib/src/hooks/useCompositor.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import type { CompositeEffectPass, EffectPass, RenderPass } from "../types";
1212
export function useCompositor(
1313
gl: WebGL2RenderingContext,
1414
renderPass: RenderPass<any>,
15-
effects: Array<EffectPass<any> | CompositeEffectPass<Record<string, EffectPass<any>>>>,
15+
effects: Array<EffectPass<any> | CompositeEffectPass<EffectPass<any>[]>>,
1616
) {
1717
if (effects.length > 0 && renderPass.target === null) {
1818
renderPass.setTarget(createRenderTarget(gl));
@@ -29,7 +29,7 @@ export function useCompositor(
2929

3030
if (isCompositeEffectPass(effect)) {
3131
const inputPass = previousPass;
32-
for (const effectPass of Object.values(effect.passes)) {
32+
for (const effectPass of effect.passes) {
3333
const previousPassRef = previousPass;
3434
setupEffectPass(effectPass, previousPassRef, inputPass);
3535
previousPass = effectPass;
@@ -60,7 +60,7 @@ export function useCompositor(
6060
function isCompositeEffectPass(
6161
effect: EffectPass | CompositeEffectPass<any>,
6262
): effect is CompositeEffectPass<any> {
63-
return typeof (effect as CompositeEffectPass).passes === "object";
63+
return Array.isArray((effect as CompositeEffectPass).passes);
6464
}
6565

6666
function setupEffectPass(

lib/src/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export interface RenderPass<U extends Uniforms = Record<string, never>> extends
5858
export type EffectPass<U extends Uniforms = Record<string, never>> = RenderPass<U>;
5959

6060
export interface CompositeEffectPass<
61-
P extends Record<string, EffectPass<any>> = Record<string, EffectPass<never>>,
61+
P extends EffectPass<any>[] = EffectPass<never>[],
6262
> extends Omit<EffectPass, "fragment" | "vertex" | "uniforms"> {
6363
passes: P;
6464
}

0 commit comments

Comments
 (0)