Export equirectangular PNGs through paint renderer

This commit is contained in:
2026-06-05 20:31:35 +02:00
parent ebc84373e6
commit 77268a28fb
8 changed files with 378 additions and 19 deletions

View File

@@ -255,7 +255,10 @@ powershell -ExecutionPolicy Bypass -File scripts\automation\apple-remote-build.p
recording backend. It also covers the shared
`prepare_document_frame_export_readiness` report consumed by CLI and live
export-readiness bridges, including the recorded upload command summary and
pure six-face PNG export bytes encoded through `pp_assets`.
pure six-face PNG export bytes encoded through `pp_assets`. The compositor
tests now also cover equirectangular PNG export from that same composited
document frame using the shader-equivalent cube sampling policy and
`pp_assets` PNG encoding.
- `pano_cli simulate-document-export` exposes the same pure document-to-PPI
export, asset-level decode, and document reimport path through JSON
automation and is covered by `pano_cli_simulate_document_export_smoke`.
@@ -284,8 +287,10 @@ powershell -ExecutionPolicy Bypass -File scripts\automation\apple-remote-build.p
Cube-face export writes the pure document/renderer PNG bytes through the
app-core write/publish executor to the planned retained face filename set and
falls back to `Canvas::export_cube_faces` if snapshot capture, PNG generation,
or file writing fails. Equirectangular, layer, animation-frame, depth, and
video export remain on retained writer paths.
or file writing fails. PNG equirectangular export writes a pure
document/paint-renderer equirectangular PNG before falling back to the
retained writer; JPEG/XMP equirectangular export, layer, animation-frame,
depth, and video export remain on retained writer paths.
- `pano_cli save-document-project` writes that pure document export to a PPI
file and is covered by `pano_cli_save_document_project_roundtrip_smoke`,
which inspects and loads the generated file.
@@ -1124,11 +1129,13 @@ powershell -ExecutionPolicy Bypass -File scripts\automation\apple-remote-build.p
exports, Web prepared-file handoff, and legacy `Canvas` export execution while
retained renderer/document/platform ownership is tracked by `DEBT-0043`.
Equirectangular, layer, animation-frame, and cube-face execution now prepare
the document snapshot plus shared paint-renderer export-readiness report before those
retained calls; cube-face export writes pure face-PNG bytes to the app-core
planned legacy work-directory face paths through the app-core write/publish
executor before falling back to the retained writer, and depth export remains
on the older retained path. It
the document snapshot plus shared paint-renderer export-readiness report
before retained calls; cube-face export writes pure face-PNG bytes to the
app-core planned legacy work-directory face paths through the app-core
write/publish executor before falling back to the retained writer, PNG
equirectangular export writes the pure document/paint-renderer
equirectangular PNG before retained fallback, and JPEG/XMP, collection, and
depth exports remain on older retained paths. It
also bridges timelapse and animation MP4 export picker-selected paths while
preserving desktop worker-thread timelapse behavior, mobile/Web save
callbacks, `App::rec_export`, animation `Canvas::export_anim_mp4`, and

View File

@@ -24,8 +24,8 @@ and validation command.
| Capability | Current Area | Target Owner | Required Tests |
| --- | --- | --- | --- |
| PNG/JPEG import | `Image`, `Canvas` import paths | `pp_assets`, `pp_document` | Fixture import, malformed file |
| PNG/JPEG export | `Canvas`, `Image`, export dialogs | `pp_assets`, `pp_paint_renderer`, `pp_app_core` | Golden output tolerance, export start/target planning tests, live export-adapter document snapshot readiness through the shared paint-renderer export report |
| Equirectangular import/export | `Canvas`, shaders, RTT, export dialogs | `pp_paint_renderer`, `pp_app_core` | Tiny cube/equirect golden, app-core file target tests, live export-adapter renderer-upload/face-PNG readiness report |
| PNG/JPEG export | `Canvas`, `Image`, export dialogs | `pp_assets`, `pp_paint_renderer`, `pp_app_core` | Golden output tolerance, export start/target planning tests, live export-adapter document snapshot readiness through the shared paint-renderer export report, pure cube-face PNG writer, pure equirectangular PNG writer, JPEG/XMP parity still retained |
| Equirectangular import/export | `Canvas`, shaders, RTT, export dialogs | `pp_paint_renderer`, `pp_app_core` | Tiny cube/equirect golden, app-core file target tests, live export-adapter renderer-upload/face-PNG readiness report, pure document-frame equirectangular PNG export and live PNG writer fallback, JPEG/XMP retained until metadata parity is owned |
| Cube face export | `Canvas` fallback | `pp_paint_renderer`, `pp_app_core` | Pure six-face document frame composite, renderer texture-upload bridge, shared export-readiness report, app-core face filename planning and write/publish service execution, payload-complete canvas-snapshot renderer-upload and face-PNG automation, live document/renderer face-PNG writer with retained Canvas fallback, OpenGL command-plan coverage, six-face golden set |
| Depth export | `Canvas`, grid tools | `pp_paint_renderer` | Float/readback validation |

File diff suppressed because one or more lines are too long

View File

@@ -689,8 +689,11 @@ prepare the same payload-bearing document snapshot and shared renderer export
readiness report. Cube-face export writes those
document/renderer-owned PNG bytes through a tested app-core write/publish
executor using the app-core-planned legacy face filenames when available and
falls back to retained `Canvas::export_cube_faces` on snapshot/write failure;
the other export workflows still delegate to retained `Canvas` writers after
falls back to retained `Canvas::export_cube_faces` on snapshot/write failure.
PNG equirectangular export now uses the same document/composite payload to
generate an equirectangular PNG through `pp_paint_renderer` before the retained
fallback. JPEG/XMP equirectangular export, layer collections, animation-frame
collections, depth, and video still delegate to retained `Canvas` writers after
readiness reporting.
`pano_cli plan-image-import` exposes app-core planning for File > Import image
route decisions, including wide equirectangular images, legacy vertical cube
@@ -2531,9 +2534,12 @@ Results:
reports. Cube-face export now writes the pure document/renderer PNG bytes to
the `pp_app_core` planned legacy face filenames through a tested
write/publish service executor before falling back to retained `Canvas`
execution on failure. Equirectangular, layer, animation-frame, depth, and
video export remain on their prior retained writer paths; actual broader
writer replacement remains tracked under export debt.
execution on failure. PNG equirectangular export now writes a
`pp_paint_renderer` equirectangular PNG from the same composited document
frame before falling back to retained `Canvas` execution; JPEG/XMP,
layer, animation-frame, depth, and video export remain on their prior
retained writer paths. Actual broader writer replacement remains tracked
under export debt.
- Snapshot creation now rejects invalid embedded RGBA8 face payloads before
document export or history can persist malformed state.
- Package-smoke wrappers validate the Windows CMake app executable/runtime