Skip to content

feat(engine): 3D projection + compositor-effect risk gate#1918

Open
vanceingalls wants to merge 1 commit into
de2-02-drawelementservicefrom
de2-03-threed
Open

feat(engine): 3D projection + compositor-effect risk gate#1918
vanceingalls wants to merge 1 commit into
de2-02-drawelementservicefrom
de2-03-threed

Conversation

@vanceingalls

@vanceingalls vanceingalls commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator

3D projection + compositor-effect risk gate (stack 3/6)

packages/engine/src/services/threeDProjection.ts (+1026) — the routing intelligence that decides when a composition is safe for drawElementImage and when it must fall back to the screenshot path.

What this adds

  • detectCssEffectRisk — scans the composition for compositor-only effects drawElementImage cannot reproduce and routes them to the screenshot baseline: backdrop-filter (samples the compositor backdrop), filter: blur (paint-record vs compositor inconsistency), mix-blend-mode, and animated WebGL contexts. Implemented seek-free — computed styles at t0 + stylesheet-rule scan + tween-var scan + WebGL registry scan. (This is the rewrite that fixed the earlier bug where scrubbing __hf.seek for detection corrupted GSAP .from()/overlap start-value caches for every fast-capture comp.)
  • WebGL 3D projection — static-content 3D reprojection support under the fast path; animated 3D subtrees fall back.
  • Presence-gate helpers for compositor-incompatible tweens.

Notes

  • Pure detection/projection module; consumed by the capture core in 4/6.
  • Bias is conservative — any ambiguous effect routes to screenshot (correctness over speed).

Stack: #1916#1917#1918 (here)#1919#1920#1921. Rebased onto current main; supersedes #1295 + #1444. Intermediate PRs don't compile independently — feature green at the tip (#1921).

🤖 Generated with Claude Code

vanceingalls commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant