summaryrefslogtreecommitdiff
path: root/apps/web/src/effects/index.ts
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-04-20 11:31:17 +0200
committerMaze Winther <mazewinther@gmail.com>2026-04-20 11:31:17 +0200
commit3e89d2998588f8e35c524e523ba2ee853f0f6475 (patch)
tree57221f96c1259b3b07e3ddf8c1adefc502b9d8eb /apps/web/src/effects/index.ts
parent729d10592f4e802f91c555c309ff3ba4b119f843 (diff)
downloadopencut-3e89d2998588f8e35c524e523ba2ee853f0f6475.tar.gz
refactor: restructure files to their domains, new preview overlay system, and dep graph
Diffstat (limited to 'apps/web/src/effects/index.ts')
-rw-r--r--apps/web/src/effects/index.ts47
1 files changed, 47 insertions, 0 deletions
diff --git a/apps/web/src/effects/index.ts b/apps/web/src/effects/index.ts
new file mode 100644
index 00000000..eebb8cbc
--- /dev/null
+++ b/apps/web/src/effects/index.ts
@@ -0,0 +1,47 @@
+import { generateUUID } from "@/utils/id";
+import { buildDefaultParamValues } from "@/params/registry";
+import { effectsRegistry } from "./registry";
+import type { ParamValues } from "@/params";
+import type { Effect, EffectDefinition, EffectPass } from "@/effects/types";
+import { VISUAL_ELEMENT_TYPES } from "@/timeline";
+
+export { effectsRegistry } from "./registry";
+export { registerDefaultEffects } from "./definitions";
+
+export function resolveEffectPasses({
+ definition,
+ effectParams,
+ width,
+ height,
+}: {
+ definition: EffectDefinition;
+ effectParams: ParamValues;
+ width: number;
+ height: number;
+}): EffectPass[] {
+ if (definition.renderer.buildPasses) {
+ return definition.renderer.buildPasses({ effectParams, width, height });
+ }
+ return definition.renderer.passes.map((pass) => ({
+ shader: pass.shader,
+ uniforms: pass.uniforms({ effectParams, width, height }),
+ }));
+}
+
+export const EFFECT_TARGET_ELEMENT_TYPES = VISUAL_ELEMENT_TYPES;
+
+export function buildDefaultEffectInstance({
+ effectType,
+}: {
+ effectType: string;
+}): Effect {
+ const definition = effectsRegistry.get(effectType);
+ const params: ParamValues = buildDefaultParamValues(definition.params);
+
+ return {
+ id: generateUUID(),
+ type: effectType,
+ params,
+ enabled: true,
+ };
+}