Files
MetaCrate/docs/imaging-meshing.md
Chili Palmer e5cb3c6803
Some checks failed
API and SemVer surface / api-surface (push) Failing after 1m30s
Native code generation / deterministic (push) Has been cancelled
First release candidate / non-fuzz-release-gate (push) Has been cancelled
Native Rust workspace compile / compile (push) Has been cancelled
Dependency and supply-chain audit / audit (push) Has been cancelled
Native release artifact audit / audit (push) Successful in 1h14m10s
Concurrency and resource soak audit / soak (push) Successful in 12m54s
Documentation / documentation (push) Failing after 45m9s
Imaging and meshing gate / native (push) Failing after 2m48s
JPEG 2000 feature / linux (push) Successful in 2m43s
performance evidence / audit (push) Failing after 7m22s
Release platform and feature matrix / audit (push) Successful in 59s
Skia feature / linux (push) Has been cancelled
Release platform and feature matrix / matrix (false, linux-stable-minimal, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (false, macos-stable-portable, x86_64-apple-darwin, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (false, windows-stable-portable, x86_64-pc-windows-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-msrv-portable, x86_64-unknown-linux-gnu, 1.96.0) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-default, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-features, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-release-surface, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Restore the non-default OpenJPEG boundary (#107)
2026-08-12 15:03:41 +00:00

71 lines
3.3 KiB
Markdown

# Imaging and meshing integration
Milestone 06 owns the native implementations in `libremetaverse-imaging`,
`libremetaverse-imaging-skia`, and `libremetaverse-prim-mesher`. The core
imaging and meshing crates contain no CLR bridge, subprocess adapter, foreign
RPC, or generated failure-only shim. The rendering crates consume the checked
mesh data but remain a separate milestone: `SimpleRenderer` now provides the
reference prim/sculpt conversion pipeline. `MeshFoundry` now adds bounded mesh
asset, rigging, tangent, secondary-UV, terrain, and convex-hull handling without
changing the milestone 06 ownership boundary. See the
[`SimpleRenderer` guide](../crates/libremetaverse-rendering-simple/README.md)
and [`MeshFoundry` guide](../crates/libremetaverse-rendering-mesh-foundry/README.md).
## Feature boundary
| Surface | Default build | Opt-in build | Native dependency |
| --- | --- | --- | --- |
| Managed images and TGA | enabled | n/a | none |
| JPEG 2000 | disabled | `libremetaverse-imaging/jpeg2000` | OpenJPEG 2.5.x |
| BMP/GIF/ICO/JPEG/PNG/WBMP/WebP | disabled | `libremetaverse-imaging-skia/skia` | Skia |
| Prim and sculpt meshing, OBJ ingestion | enabled | n/a | none |
OpenJPEG is a non-default workspace member so release tooling can package the
adapter explicitly, and imaging reaches it only through the optional
dependency. Skia is likewise an optional, target-specific dependency. The
dedicated Gitea workflows exercise both optional features on `ubuntu-latest`;
the default `imaging-meshing` workflow proves that no native codec is needed
for the owned Rust and translated compatibility tests.
## Bounds and rendering contract
Decoded images are limited to 4,096 by 4,096 pixels and encoded inputs to 64
MiB. Channel sizes, resize products, codec buffers, sculpt-map dimensions,
profile/path sizes, mesh vertex counts, face indices, viewer groups, and OBJ
indices use checked arithmetic before allocation or indexing. Malformed input
returns a typed error.
The rendering-facing integration tests verify that PrimMesh and SculptMesh
produce finite positions, normals, and UVs; aligned face and viewer-face data;
preserved prim-face grouping; in-range indices; and the 16-bit index range used
by the pinned MeshFoundry reference at every supported sculpt topology and LOD.
## Reproducible gates
Run the fixed ownership and feature audit with:
```console
python3 tools/check_milestone_06.py
```
The audit rejects owned Rust stubs, feature leakage, missing platform jobs,
missing performance targets, or drift in the 48 reviewed ManagedImage,
Coord/Quat, and PrimMesh compatibility cases. The cross-platform workflow also
runs each reviewed group explicitly, native crate tests, workspace test
compilation, Clippy with warnings denied, rustdoc with warnings denied, and
benchmark compilation.
The focused performance baselines are executable Rust programs rather than
wall-clock assertions, so slower shared runners do not weaken or destabilize
correctness tests:
```console
cargo bench -p libremetaverse-imaging --bench image_pipeline
cargo bench -p libremetaverse-prim-mesher --bench meshing
```
The image baseline clones, bilinearly resizes, and exports a 2,048-square RGBA
image. The meshing baseline builds and indexes a high-detail cut, hollow,
twisted circular extrusion. Both report elapsed time and allocation counts so
regressions can be compared using the same inputs.