Monorepo for Aesthetic.Computer
aesthetic.computer
1# WebGL Migration (Aesthetic Computer)
2
3## Goal
4Move the rendering pipeline from Canvas2D compositing to a WebGL-based composite path.
5
6## Status
7- [x] Add WebGL blitter module (full-screen quad + texture upload)
8- [x] Wire WebGL composite canvas into BIOS render path
9- [x] Move overlay compositing off the main canvas
10- [x] Preserve recording outputs with WebGL composite
11- [x] Preserve screenshot outputs with WebGL composite
12- [ ] Verify underlay/tape playback behavior
13- [ ] Validate WebGPU path still works (no conflicts)
14- [x] Add runtime flag/toggle and telemetry
15- [ ] Performance profiling in sandboxed iframes
16
17## Subtasks
18
19### 1) WebGL Blitter (Base Frame)
20- [x] Create module to upload `ImageData` as a texture and draw full-screen quad
21- [x] Add canvas sizing + visibility toggles in `bios.mjs`
22- [x] Replace `ctx.putImageData` with WebGL blit when enabled
23
24### 2) Overlay Compositing
25- [x] Add dedicated overlay canvas layer
26- [x] Route overlay painters to overlay canvas when WebGL composite enabled
27- [x] Ensure overlay canvas clears each frame to avoid accumulation
28
29### 3) Recording / Screenshot Capture
30- [x] Composite WebGL canvas + overlay canvas into offscreen capture canvas
31- [x] Preserve existing ordering (HUD before tape progress)
32- [x] Ensure clean screenshots exclude overlays
33
34### 4) Runtime Flags + Fallbacks
35- [x] Add `content.webglCompositeEnabled` flag path
36- [x] Add `globalThis.acUseWebGLComposite` override
37- [x] Fallback to Canvas2D if WebGL init fails
38
39### 5) Validation
40- [ ] objkt sandbox: compare FPS vs Canvas2D path
41- [ ] Regular browser: confirm no regressions
42- [ ] Recording output: verify overlays + tape progress timing
43- [ ] Glaze path: ensure compatibility with composite pipeline
44
45## Notes
46- WebGL composite should coexist with existing WebGPU path; if `content.webgpuEnabled` is true, WebGL composite should stay off.
47- Keep UI canvas (cursor/spinner) above overlays to avoid GPU text rendering complexity.