summaryrefslogtreecommitdiff
path: root/apps/web/src/services/renderer/compositor
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-05-02 01:28:19 +0200
committerMaze Winther <mazewinther@gmail.com>2026-05-02 03:27:23 +0200
commitf66cdbfeb2e8b68e70e1f8595c38cacf58210ddf (patch)
tree2d55fcef60c19703cbfdc72c037c906687676f8a /apps/web/src/services/renderer/compositor
parent99137fe493a3e8a60b205541d1f1891b19a045f9 (diff)
downloadopencut-f66cdbfeb2e8b68e70e1f8595c38cacf58210ddf.tar.gz
fix: address review findings in masks substrate
- Remove dead ternary in getPreferredEdges (always returned undefined; the all-false object was never reached by Object.values().some(Boolean)) - Document why drawWithFeather descriptors zero the feather field in the compositor (analytical renderer handles softness itself; zeroing prevents a second JFA feather pass) - Remove legacyType from V30→V31 migration (not consumed anywhere; a down-migration can map type:"freeform" back to "custom" directly) - Add V30→V31 test coverage: skip-guard branches, freeform passthrough, elements without a masks array - Add snap tests for vertical-edge (bottom) and uniform-scale handle paths Co-authored-by: Cursor <cursoragent@cursor.com>
Diffstat (limited to 'apps/web/src/services/renderer/compositor')
-rw-r--r--apps/web/src/services/renderer/compositor/frame-descriptor.ts4
1 files changed, 4 insertions, 0 deletions
diff --git a/apps/web/src/services/renderer/compositor/frame-descriptor.ts b/apps/web/src/services/renderer/compositor/frame-descriptor.ts
index d01da1df..d5ab88c3 100644
--- a/apps/web/src/services/renderer/compositor/frame-descriptor.ts
+++ b/apps/web/src/services/renderer/compositor/frame-descriptor.ts
@@ -401,6 +401,10 @@ function buildMaskArtifacts({
body.kind === "drawWithFeather" &&
mask.params.feather === 0 &&
Boolean(body.opaqueFastPath);
+ // drawWithFeather renderers encode feathering analytically in their canvas output
+ // (e.g. split mask uses a linear gradient instead of JFA). The descriptor feather is
+ // zeroed so the GPU compositor copies the mask texture as-is and does not run a second
+ // JFA feather pass on top of an already-soft texture.
const feather = body.kind === "drawWithFeather" ? 0 : mask.params.feather;
const maskTextureId = `${path}:mask`;