diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-03-25 16:47:22 +0100 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-03-29 15:48:22 +0200 |
| commit | 8db3bead13441a5882d8689dfc6a9f09c82375d9 (patch) | |
| tree | e9d0cafa93904ffcbec3188c37961bcc16c6422d /apps/web/src/lib/effects/index.ts | |
| parent | 39ea298a9ccba3104c549c0ca079c231981811f5 (diff) | |
| download | opencut-8db3bead13441a5882d8689dfc6a9f09c82375d9.tar.gz | |
feat: masks, properties refactor, shaders, storage migrations, and more
Diffstat (limited to 'apps/web/src/lib/effects/index.ts')
| -rw-r--r-- | apps/web/src/lib/effects/index.ts | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/apps/web/src/lib/effects/index.ts b/apps/web/src/lib/effects/index.ts index 14d06d84..549811f5 100644 --- a/apps/web/src/lib/effects/index.ts +++ b/apps/web/src/lib/effects/index.ts @@ -1,29 +1,42 @@ import { generateUUID } from "@/utils/id"; -import { getEffect } from "./registry"; -import type { Effect, EffectParamValues } from "@/types/effects"; -import type { VisualElement } from "@/types/timeline"; +import { buildDefaultParamValues } from "@/lib/registry"; +import { effectsRegistry } from "./registry"; +import type { ParamValues } from "@/lib/params"; +import type { Effect, EffectDefinition, ResolvedEffectPass } from "@/lib/effects/types"; +import { VISUAL_ELEMENT_TYPES } from "@/lib/timeline"; -export { getEffect, getAllEffects, hasEffect, registerEffect } from "./registry"; +export { effectsRegistry } from "./registry"; export { registerDefaultEffects } from "./definitions"; -export const EFFECT_TARGET_ELEMENT_TYPES: VisualElement["type"][] = [ - "video", - "image", - "text", - "sticker", -]; +export function resolveEffectPasses({ + definition, + effectParams, + width, + height, +}: { + definition: EffectDefinition; + effectParams: ParamValues; + width: number; + height: number; +}): ResolvedEffectPass[] { + if (definition.renderer.buildPasses) { + return definition.renderer.buildPasses({ effectParams, width, height }); + } + return definition.renderer.passes.map((pass) => ({ + fragmentShader: pass.fragmentShader, + uniforms: pass.uniforms({ effectParams, width, height }), + })); +} + +export const EFFECT_TARGET_ELEMENT_TYPES = VISUAL_ELEMENT_TYPES; export function buildDefaultEffectInstance({ effectType, }: { effectType: string; }): Effect { - const definition = getEffect({ effectType }); - - const params: EffectParamValues = {}; - for (const paramDef of definition.params) { - params[paramDef.key] = paramDef.default; - } + const definition = effectsRegistry.get(effectType); + const params: ParamValues = buildDefaultParamValues(definition.params); return { id: generateUUID(), |
