diff options
Diffstat (limited to 'apps/web/src/effects/index.ts')
| -rw-r--r-- | apps/web/src/effects/index.ts | 47 |
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, + }; +} |
