Export equirectangular JPEGs through paint renderer

This commit is contained in:
2026-06-05 21:22:06 +02:00
parent 875a0127d9
commit bd416f8473
11 changed files with 604 additions and 96 deletions

View File

@@ -296,12 +296,14 @@ powershell -ExecutionPolicy Bypass -File scripts\automation\apple-remote-build.p
document/paint-renderer equirectangular PNG before falling back to the
retained writer. Payload-complete layer and animation-frame PNG collections
write pure document/paint-renderer equirectangular PNG sequences through the
app-core collection write/publish executor before retained fallback; JPEG/XMP
equirectangular export, Web handoff, incomplete-readback collection cases,
and video export remain on retained writer paths. Depth export now plans the
retained image/depth output paths in `pp_app_core` and logs a tested
`pp_paint_renderer` depth render plan plus the shared document-frame
renderer-readiness report before retained `Canvas::export_depth` execution.
app-core collection write/publish executor before retained fallback. JPEG
equirectangular export writes a pure document/paint-renderer JPEG with GPano
XMP metadata before retained fallback; Web handoff, incomplete-readback
collection cases, and video export remain on retained writer paths. Depth
export now plans the retained image/depth output paths in `pp_app_core` and
logs a tested `pp_paint_renderer` depth render plan plus the shared
document-frame renderer-readiness report before retained
`Canvas::export_depth` execution.
- `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.
@@ -1149,8 +1151,10 @@ powershell -ExecutionPolicy Bypass -File scripts\automation\apple-remote-build.p
animation-frame collections write pure document/paint-renderer PNG sequences
through the app-core collection write/publish executor, depth export plans
image/depth targets and logs the paint-renderer render plan plus shared
renderer readiness before retained execution, and JPEG/XMP plus
Web/incomplete-readback collection cases remain on older retained paths. It
renderer readiness before retained execution, and JPEG equirectangular export
writes a pure document/paint-renderer JPEG with GPano XMP metadata before
retained fallback while Web/incomplete-readback collection cases 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, pure cube-face PNG writer, pure equirectangular PNG writer, pure layer/frame collection PNG writers, app-core collection write executor, 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, pure layer/frame equirectangular PNG collection export, JPEG/XMP retained until metadata parity is owned |
| 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/JPEG+XMP writers, pure layer/frame collection PNG writers, app-core collection write executor, retained fallback coverage |
| 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 and JPEG+XMP export with live writer fallback, pure layer/frame equirectangular PNG collection export, exact GPU/golden parity |
| 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`, `pp_app_core` | Depth target/write planning, document-snapshot renderer-readiness logging, depth render-plan draw/readback counts, retained render/readback parity, and format/golden validation |

File diff suppressed because one or more lines are too long

View File

@@ -699,9 +699,11 @@ PNG equirectangular export now uses the same document/composite payload to
generate an equirectangular PNG through `pp_paint_renderer` before the retained
fallback. Payload-complete layer and animation-frame PNG collections now use
pure `pp_paint_renderer` equirectangular PNG generation plus app-core
collection write/publish execution before retained fallback. JPEG/XMP
equirectangular export, Web handoff, video, and incomplete-readback collection
cases still delegate to retained `Canvas` writers after readiness reporting.
collection write/publish execution before retained fallback. Payload-complete
desktop JPEG equirectangular export now uses the same projection through
`pp_paint_renderer`, `pp_assets` JPEG encoding, and GPano XMP injection before
retained fallback. Web handoff, video, and incomplete-readback collection cases
still delegate to retained `Canvas` writers after readiness reporting.
Depth export now also plans the retained image/depth file targets in
`pp_app_core` and logs a `pp_paint_renderer` document depth render plan for the
legacy 1024x1024 perspective render plus per-layer depth pass before falling
@@ -2557,9 +2559,11 @@ Results:
collection write/publish executor before retained fallback. Depth export now
prepares the same document/canvas snapshot, logs the shared renderer-upload
readiness report, and records a tested paint-renderer depth render plan before
retained `Canvas` execution. JPEG/XMP, Web prepared-file handoff, video, and
incomplete-readback collection cases remain on their prior retained writer
paths. Actual broader writer replacement remains tracked under export debt.
retained `Canvas` execution. JPEG equirectangular export now writes a
pure `pp_paint_renderer`/`pp_assets` JPEG with GPano XMP metadata before
retained fallback. Web prepared-file handoff, video, and incomplete-readback
collection cases 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