Document optional codecs and raise MSRV to 1.96
Some checks failed
Native code generation / deterministic (ubuntu-latest) (push) Successful in 1m56s
Imaging and meshing gate / native (ubuntu-latest) (push) Failing after 2m49s
JPEG 2000 feature / linux (push) Failing after 1m0s
Skia feature / linux (push) Failing after 1m38s
Native code generation / deterministic (macos-latest) (push) Has been cancelled
Native code generation / deterministic (windows-latest) (push) Has been cancelled
Imaging and meshing gate / native (macos-latest) (push) Has been cancelled
Imaging and meshing gate / native (windows-latest) (push) Has been cancelled
JPEG 2000 feature / macos (push) Has been cancelled
JPEG 2000 feature / windows (push) Has been cancelled
Skia feature / macos (push) Has been cancelled
Skia feature / windows (push) Has been cancelled

This commit is contained in:
2026-08-09 06:53:05 +00:00
parent fb7d0c6836
commit b2a060d3c6
5 changed files with 48 additions and 4 deletions

View File

@@ -23,7 +23,7 @@ members = [
[workspace.package]
version = "0.0.1"
edition = "2024"
rust-version = "1.85"
rust-version = "1.96"
license = "BSD-3-Clause"
repository = "https://github.com/cinderblocks/libremetaverse"

View File

@@ -32,6 +32,8 @@ All API crates expose the same typed `Error` for fallible unimplemented members;
infallible shims use `libremetaverse_types::unimplemented_api!` so placeholders
cannot look like successful behavior.
Building MetaCrate requires Rust 1.96 or newer.
```sh
cargo build --workspace
cargo test --workspace --no-run
@@ -41,6 +43,37 @@ python3 tools/check_test_parity.py
python3 tools/audit_red_suite.py
```
### Optional codec features
The default build needs no system image-codec library. It includes the
project-owned TGA and DDS implementations; the default `dds-bc67` feature uses
the pure-Rust `bcdec_rs` dependency for BC6H and BC7. Build without BC6H/BC7
support with `cargo build -p libremetaverse --no-default-features`.
The currently available opt-in codec backends are:
| Capability | Feature | Build command | External prerequisite |
| --- | --- | --- | --- |
| Raw J2K and JP2 decoding/encoding through OpenJPEG | `libremetaverse/jpeg2000` | `cargo build -p libremetaverse --features jpeg2000` | OpenJPEG 2.5.4 or newer |
| BMP, GIF, ICO, JPEG, PNG, WBMP, and WebP decoding through Skia | `libremetaverse-imaging-skia/skia` | `cargo build -p libremetaverse-imaging-skia --features skia` | A matching rust-skia binary cache, or the documented native source-build tools |
Run their focused test suites with:
```sh
cargo test -p libremetaverse-imaging --features jpeg2000
cargo test -p libremetaverse-imaging-skia --features skia
```
`cargo build --workspace --all-features` enables both optional backends and
therefore requires both sets of native prerequisites. Platform installation,
offline-build, cache, and redistribution details are in the
[`OpenJPEG adapter guide`](crates/libremetaverse-openjpeg/README.md) and
[`Skia adapter guide`](crates/libremetaverse-imaging-skia/README.md).
An independent optional `rust-j2k` backend is planned but has not been
implemented yet. There is deliberately no enablement command for it today;
the existing `jpeg2000` feature always selects the OpenJPEG backend.
`tests/upstream-tests.json` is the machine-readable NUnit parity catalog.
Translated tests live in hand-written Rust files with the `parity-case` marker
documented in `tests/PARITY.md`; `python3 tools/generate_surface.py --check`
@@ -51,6 +84,8 @@ Running `cargo test --workspace` is intentionally red during the shim stage.
## Native implementation progress
### Milestone 04
Milestone 04 is complete. `libremetaverse-types` now provides
native UUID, incremental CRC-32, little-endian floating-point byte helpers,
Vector2/Vector3/Vector3d/Vector4 arithmetic and serialization, Color4 color
@@ -73,6 +108,9 @@ hierarchical token-bucket throttling are native Rust as well. Cache and bucket
tests use injected monotonic clocks, and concurrency invariants run without
sleep-based timing. All 45 Types and all 942 mapped members now resolve to
native implementations; no generated Types shims remain.
### Milestone 05
Milestone 05 now has a native, format-neutral OSD value model with structural
equality and hashing, permissive `LibreMetaverse` conversion defaults, explicit
integer/date byte order, synchronized snapshot-based arrays and maps, and
@@ -122,6 +160,9 @@ five parsers without an external fuzzing runtime. They cover truncation, tags,
lengths, payloads, delimiters, nesting, entity rejection, contextual errors,
and the parser resource limits. Every encoder sorts map keys where necessary,
so serialization is deterministic across platforms.
### Milestone 06
Milestone 06 starts with a native `ManagedImage`: top-left-origin,
byte-per-sample planar storage has an explicit width-byte row stride, with gray
stored in the red plane and optional color, alpha, and bump planes. Checked
@@ -178,6 +219,9 @@ baselines are documented in
[`docs/imaging-meshing.md`](docs/imaging-meshing.md).
The controlled audit aggregates every expected failure by standardized C#
member ID and rejects unrelated fixture, assertion, compile, or symbol errors.
### Milestone 07
The deterministic, Rust-only source-data generator framework and its complete
pinned input inventory are documented in
[`codegen/README.md`](codegen/README.md).

View File

@@ -165,7 +165,7 @@ crates under `types`, `structured_data`, and `imaging_abstractions`. Rendering,
voice, RLV, LSL tools, and native Skia remain separate so users do not pay for
large or platform-specific dependency trees unless requested.
The workspace uses Rust 2024 with MSRV 1.85. Generated code is committed so
The workspace uses Rust 2024 with MSRV 1.96. Generated code is committed so
ordinary consumers do not need Python, .NET, Roslyn, or the upstream checkout.
## 3. Public API translation policy

View File

@@ -2,7 +2,7 @@
name = "libremetaverse-openjpeg"
version = "0.0.1"
edition = "2024"
rust-version = "1.85"
rust-version = "1.96"
license = "BSD-3-Clause"
publish = false
description = "Safe, bounded OpenJPEG 2.5.4 adapter for MetaCrate"

View File

@@ -2,7 +2,7 @@
name = "metacrate-api-compile"
version = "0.0.0"
edition = "2024"
rust-version = "1.85"
rust-version = "1.96"
license = "BSD-3-Clause"
publish = false