diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-04-20 11:31:17 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-04-20 11:31:17 +0200 |
| commit | 3e89d2998588f8e35c524e523ba2ee853f0f6475 (patch) | |
| tree | 57221f96c1259b3b07e3ddf8c1adefc502b9d8eb /apps/web/src/lib/effects/definitions | |
| parent | 729d10592f4e802f91c555c309ff3ba4b119f843 (diff) | |
| download | opencut-3e89d2998588f8e35c524e523ba2ee853f0f6475.tar.gz | |
refactor: restructure files to their domains, new preview overlay system, and dep graph
Diffstat (limited to 'apps/web/src/lib/effects/definitions')
| -rw-r--r-- | apps/web/src/lib/effects/definitions/blur.ts | 110 | ||||
| -rw-r--r-- | apps/web/src/lib/effects/definitions/index.ts | 13 |
2 files changed, 0 insertions, 123 deletions
diff --git a/apps/web/src/lib/effects/definitions/blur.ts b/apps/web/src/lib/effects/definitions/blur.ts deleted file mode 100644 index b464db3a..00000000 --- a/apps/web/src/lib/effects/definitions/blur.ts +++ /dev/null @@ -1,110 +0,0 @@ -import type { EffectDefinition, EffectPass } from "@/lib/effects/types"; - -export const GAUSSIAN_BLUR_SHADER = "gaussian-blur"; - -const MAX_SINGLE_PASS_SIGMA = 10; -const MAX_STEP = 4; -const MAX_EFFECTIVE_SIGMA = MAX_SINGLE_PASS_SIGMA * MAX_STEP; -const MAX_ITERATIONS = 8; - -export function buildGaussianBlurPasses({ - sigmaX, - sigmaY, -}: { - sigmaX: number; - sigmaY: number; -}): EffectPass[] { - const maxSigma = Math.max(sigmaX, sigmaY); - if (maxSigma < 0.001) return []; - - const iterations = Math.min( - MAX_ITERATIONS, - Math.max( - 1, - Math.ceil( - (maxSigma * maxSigma) / - (MAX_EFFECTIVE_SIGMA * MAX_EFFECTIVE_SIGMA), - ), - ), - ); - const perPassSigmaX = sigmaX / Math.sqrt(iterations); - const perPassSigmaY = sigmaY / Math.sqrt(iterations); - const stepX = Math.max(1, perPassSigmaX / MAX_SINGLE_PASS_SIGMA); - const stepY = Math.max(1, perPassSigmaY / MAX_SINGLE_PASS_SIGMA); - - const passes: EffectPass[] = []; - for (let i = 0; i < iterations; i++) { - passes.push({ - shader: GAUSSIAN_BLUR_SHADER, - uniforms: { - u_sigma: perPassSigmaX, - u_step: stepX, - u_direction: [1, 0], - }, - }); - passes.push({ - shader: GAUSSIAN_BLUR_SHADER, - uniforms: { - u_sigma: perPassSigmaY, - u_step: stepY, - u_direction: [0, 1], - }, - }); - } - return passes; -} - -export const INTENSITY_TO_SIGMA_DIVISOR = 5; - -export function intensityToSigma({ intensity, resolution, reference }: { intensity: number; resolution: number; reference: number }): number { - return (intensity / INTENSITY_TO_SIGMA_DIVISOR) * (resolution / reference); -} - -function parseIntensity(effectParams: Record<string, unknown>): number { - const raw = effectParams.intensity; - return typeof raw === "number" ? raw : Number.parseFloat(String(raw)); -} - -export const blurEffectDefinition: EffectDefinition = { - type: "blur", - name: "Blur", - keywords: ["blur", "soft", "defocus"], - params: [ - { - key: "intensity", - label: "Intensity", - type: "number", - default: 15, - min: 0, - max: 100, - step: 1, - }, - ], - renderer: { - passes: [ - { - shader: GAUSSIAN_BLUR_SHADER, - uniforms: ({ effectParams, width }) => ({ - u_sigma: Math.max(intensityToSigma({ intensity: parseIntensity(effectParams), resolution: width, reference: 1920 }), 0.001), - u_step: 1, - u_direction: [1, 0], - }), - }, - { - shader: GAUSSIAN_BLUR_SHADER, - uniforms: ({ effectParams, height }) => ({ - u_sigma: Math.max(intensityToSigma({ intensity: parseIntensity(effectParams), resolution: height, reference: 1080 }), 0.001), - u_step: 1, - u_direction: [0, 1], - }), - }, - ], - buildPasses: ({ effectParams, width, height }) => { - const intensity = parseIntensity(effectParams); - return buildGaussianBlurPasses({ - sigmaX: intensityToSigma({ intensity, resolution: width, reference: 1920 }), - sigmaY: intensityToSigma({ intensity, resolution: height, reference: 1080 }), - }); - }, - }, -}; diff --git a/apps/web/src/lib/effects/definitions/index.ts b/apps/web/src/lib/effects/definitions/index.ts deleted file mode 100644 index edc8c5e2..00000000 --- a/apps/web/src/lib/effects/definitions/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { effectsRegistry } from "../registry"; -import { blurEffectDefinition } from "./blur"; - -const defaultEffects = [blurEffectDefinition]; - -export function registerDefaultEffects(): void { - for (const definition of defaultEffects) { - if (effectsRegistry.has(definition.type)) { - continue; - } - effectsRegistry.register(definition.type, definition); - } -} |
