extract_gamut and loadGamutMesh exist in the codebase, but nothing in Stage 5 or Stage 4 triggers them to display the printer's color volume. Furthermore, initGamutViewer never stores currentProfileMesh / sRgbMesh because loadGamutMesh is never invoked.
Acceptance Criteria
Trigger on Profile Generation & Verification:
After a successful colprof run and upon entering / running Stage 5 verification, execute iccgamut to extract <basename>.gam.
Call loadGamutMesh to load and render the printer gamut mesh in CIELAB space.
Load and display the bundled sRGB.gam reference overlay for comparative gamut evaluation.
Mesh State & Lifecycle Management:
Ensure gamut_viewer.js tracks currentProfileMesh and sRgbMesh, disposing and removing previous geometries/materials when re-extracting.
Viewport Responsiveness:
Ensure the Three.js WebGL canvas adapts dynamically via ResizeObserver when Stage 5 is made visible or the window is resized.
Known Limitation (v0.2):
Delaunay triangulation on (a*, b*) flattens L* rather than computing a full 3D convex hull in Lab. Good enough for v0.2; full 3D convex hull in Lab is noted for future milestones.
### Problem
`extract_gamut` and `loadGamutMesh` exist in the codebase, but nothing in Stage 5 or Stage 4 triggers them to display the printer's color volume. Furthermore, `initGamutViewer` never stores `currentProfileMesh` / `sRgbMesh` because `loadGamutMesh` is never invoked.
### Acceptance Criteria
1. **Trigger on Profile Generation & Verification**:
- After a successful `colprof` run and upon entering / running Stage 5 verification, execute `iccgamut` to extract `<basename>.gam`.
- Call `loadGamutMesh` to load and render the printer gamut mesh in CIELAB space.
- Load and display the bundled `sRGB.gam` reference overlay for comparative gamut evaluation.
2. **Mesh State & Lifecycle Management**:
- Ensure `gamut_viewer.js` tracks `currentProfileMesh` and `sRgbMesh`, disposing and removing previous geometries/materials when re-extracting.
3. **Viewport Responsiveness**:
- Ensure the Three.js WebGL canvas adapts dynamically via `ResizeObserver` when Stage 5 is made visible or the window is resized.
4. **Known Limitation (v0.2)**:
- Delaunay triangulation on `(a*, b*)` flattens `L*` rather than computing a full 3D convex hull in Lab. Good enough for v0.2; full 3D convex hull in Lab is noted for future milestones.
### Dependencies
- Blocked by: #56 (colprof fix), Profile extension handling (.icc vs .icm)
gronod
added the Kind/Bug label 2026-08-25 09:15:41 +01:00
gronod
added this to the Milestone 7: v0.2 ship milestone 2026-08-25 09:41:55 +01:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Problem
extract_gamutandloadGamutMeshexist in the codebase, but nothing in Stage 5 or Stage 4 triggers them to display the printer's color volume. Furthermore,initGamutViewernever storescurrentProfileMesh/sRgbMeshbecauseloadGamutMeshis never invoked.Acceptance Criteria
colprofrun and upon entering / running Stage 5 verification, executeiccgamutto extract<basename>.gam.loadGamutMeshto load and render the printer gamut mesh in CIELAB space.sRGB.gamreference overlay for comparative gamut evaluation.gamut_viewer.jstrackscurrentProfileMeshandsRgbMesh, disposing and removing previous geometries/materials when re-extracting.ResizeObserverwhen Stage 5 is made visible or the window is resized.(a*, b*)flattensL*rather than computing a full 3D convex hull in Lab. Good enough for v0.2; full 3D convex hull in Lab is noted for future milestones.Dependencies