48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
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 "@/model";
|
|
|
|
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,
|
|
};
|
|
}
|