summaryrefslogtreecommitdiff
path: root/apps/web/src/services/renderer/nodes/effect-layer-node.ts
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-03-25 16:47:22 +0100
committerMaze Winther <mazewinther@gmail.com>2026-03-29 15:48:22 +0200
commit8db3bead13441a5882d8689dfc6a9f09c82375d9 (patch)
treee9d0cafa93904ffcbec3188c37961bcc16c6422d /apps/web/src/services/renderer/nodes/effect-layer-node.ts
parent39ea298a9ccba3104c549c0ca079c231981811f5 (diff)
downloadopencut-8db3bead13441a5882d8689dfc6a9f09c82375d9.tar.gz
feat: masks, properties refactor, shaders, storage migrations, and more
Diffstat (limited to 'apps/web/src/services/renderer/nodes/effect-layer-node.ts')
-rw-r--r--apps/web/src/services/renderer/nodes/effect-layer-node.ts29
1 files changed, 14 insertions, 15 deletions
diff --git a/apps/web/src/services/renderer/nodes/effect-layer-node.ts b/apps/web/src/services/renderer/nodes/effect-layer-node.ts
index 3d84be2b..82aee1b3 100644
--- a/apps/web/src/services/renderer/nodes/effect-layer-node.ts
+++ b/apps/web/src/services/renderer/nodes/effect-layer-node.ts
@@ -1,14 +1,14 @@
import type { CanvasRenderer } from "../canvas-renderer";
-import { getEffect } from "@/lib/effects";
-import type { EffectParamValues } from "@/types/effects";
+import { effectsRegistry, resolveEffectPasses } from "@/lib/effects";
+import type { ParamValues } from "@/lib/params";
import { BaseNode } from "./base-node";
-import { webglEffectRenderer } from "../webgl-effect-renderer";
+import { webglEffectRenderer } from "../webgl/webgl-effect-renderer";
const TIME_EPSILON = 1e-6;
export type EffectLayerNodeParams = {
effectType: string;
- effectParams: EffectParamValues;
+ effectParams: ParamValues;
timeOffset: number;
duration: number;
};
@@ -49,18 +49,17 @@ export class EffectLayerNode extends BaseNode<EffectLayerNodeParams> {
const source = renderer.context.canvas as CanvasImageSource;
- const effectDefinition = getEffect({
- effectType: this.params.effectType,
- });
+ const effectDefinition = effectsRegistry.get(this.params.effectType);
- const passes = effectDefinition.renderer.passes.map((pass) => ({
- fragmentShader: pass.fragmentShader,
- uniforms: pass.uniforms({
- effectParams: this.params.effectParams,
- width: renderer.width,
- height: renderer.height,
- }),
- }));
+ const passes = resolveEffectPasses({
+ definition: effectDefinition,
+ effectParams: this.params.effectParams,
+ width: renderer.width,
+ height: renderer.height,
+ });
+ if (passes.length === 0) {
+ return;
+ }
const effectResult = webglEffectRenderer.applyEffect({
source,
width: renderer.width,