diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-04-19 07:42:52 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-04-19 07:42:52 +0200 |
| commit | 729d10592f4e802f91c555c309ff3ba4b119f843 (patch) | |
| tree | a547a6d1ba90ca9cc03f406e0160df0af987644d /apps/web/src/services | |
| parent | 9da365bc01fc54f6d3f0ca9c3212eee4c0cee7cd (diff) | |
| download | opencut-729d10592f4e802f91c555c309ff3ba4b119f843.tar.gz | |
fix: WebGL frame rendering and opencut-wasm 0.2.8
Diffstat (limited to 'apps/web/src/services')
| -rw-r--r-- | apps/web/src/services/renderer/effect-preview.ts | 66 |
1 files changed, 37 insertions, 29 deletions
diff --git a/apps/web/src/services/renderer/effect-preview.ts b/apps/web/src/services/renderer/effect-preview.ts index 8e081039..06e64d0e 100644 --- a/apps/web/src/services/renderer/effect-preview.ts +++ b/apps/web/src/services/renderer/effect-preview.ts @@ -18,11 +18,7 @@ class EffectPreviewService { this.loadPreviewImage(); } - onPreviewImageReady({ - callback, - }: { - callback: () => void; - }): () => void { + onPreviewImageReady({ callback }: { callback: () => void }): () => void { this.onReadyCallbacks.add(callback); return () => this.onReadyCallbacks.delete(callback); } @@ -39,35 +35,47 @@ class EffectPreviewService { uniformDimensions?: { width: number; height: number }; }): void { const size = PREVIEW_SIZE; + const targetCtx = targetCanvas.getContext( + "2d", + ) as CanvasRenderingContext2D | null; + if (!targetCtx) { + return; + } + + targetCanvas.width = size; + targetCanvas.height = size; + const source = this.getTestSource({ width: size, height: size }); - if (!source) return; + if (!source) { + targetCtx.clearRect(0, 0, size, size); + return; + } - const definition = effectsRegistry.get(effectType); - const resolvedParams = - Object.keys(params).length > 0 - ? params - : buildDefaultParamValues(definition.params); + try { + const definition = effectsRegistry.get(effectType); + const resolvedParams = + Object.keys(params).length > 0 + ? params + : buildDefaultParamValues(definition.params); - const passes = resolveEffectPasses({ - definition, - effectParams: resolvedParams, - width: uniformDimensions?.width ?? size, - height: uniformDimensions?.height ?? size, - }); - const result = this.applyGpuEffect({ - source, - width: size, - height: size, - passes, - }); + const passes = resolveEffectPasses({ + definition, + effectParams: resolvedParams, + width: uniformDimensions?.width ?? size, + height: uniformDimensions?.height ?? size, + }); + const result = this.applyGpuEffect({ + source, + width: size, + height: size, + passes, + }); - const targetCtx = targetCanvas.getContext( - "2d", - ) as CanvasRenderingContext2D | null; - if (targetCtx) { - targetCanvas.width = size; - targetCanvas.height = size; targetCtx.drawImage(result, 0, 0, size, size); + } catch (error) { + console.warn("Failed to render effect preview", { effectType, error }); + targetCtx.clearRect(0, 0, size, size); + targetCtx.drawImage(source, 0, 0, size, size); } } |
