feat(imaging): default to pure-Rust codecs
This commit is contained in:
@@ -8,12 +8,12 @@ repository.workspace = true
|
||||
description = "Optional Skia image decoder for the MetaCrate LibreMetaverse rewrite"
|
||||
|
||||
[features]
|
||||
default = []
|
||||
default = ["rust-skia"]
|
||||
skia = ["dep:skia-safe"]
|
||||
rust-skia = ["dep:image-webp", "dep:skia-rs-codec", "skia-rs-codec/gif", "skia-rs-codec/jpeg", "skia-rs-codec/png"]
|
||||
|
||||
[dependencies]
|
||||
libremetaverse-imaging = { version = "0.0.1", path = "../libremetaverse-imaging" }
|
||||
libremetaverse-imaging = { version = "0.0.1", path = "../libremetaverse-imaging", default-features = false }
|
||||
libremetaverse-types = { version = "0.0.1", path = "../libremetaverse-types" }
|
||||
image-webp = { version = "=0.2.4", optional = true }
|
||||
skia-rs-codec = { version = "=0.3.0", default-features = false, optional = true }
|
||||
|
||||
@@ -6,7 +6,8 @@ exposes a `skia-safe` type and never discovers or links Skia.
|
||||
|
||||
## Features and formats
|
||||
|
||||
The default feature set has no Skia dependency. `SkiaTextureCodec::decode` and
|
||||
The default feature set enables the pure-Rust `rust-skia` backend and has no
|
||||
native Google Skia dependency. `SkiaTextureCodec::decode` and
|
||||
`RustSkiaTextureCodec::decode` return a typed `InvalidOperation` error when
|
||||
their respective feature is disabled, while conversion from the checked
|
||||
project-owned `backend::SKBitmap` remains available for tests and callers that
|
||||
@@ -15,7 +16,7 @@ already own decoded pixels.
|
||||
For a fully Rust implementation, enable:
|
||||
|
||||
```sh
|
||||
cargo test -p libremetaverse-imaging-skia --no-default-features --features rust-skia
|
||||
cargo test -p libremetaverse-imaging-skia
|
||||
```
|
||||
|
||||
`rust-skia` pins [`skia-rs-codec` 0.3.0](https://github.com/rust-skia/skia-rs)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
//! Optional Skia imaging adapter corresponding to `LibreMetaverse.Imaging.Skia`.
|
||||
//!
|
||||
//! Enable `skia` or the fully native-Rust `rust-skia` alternative for bounded
|
||||
//! `BMP`, `GIF`, `ICO`, `JPEG`, `PNG`, `WBMP`, and `WebP` decoding.
|
||||
//! The default build remains inert. See the crate README for native cache,
|
||||
//! source-build, licensing, and cross-platform prerequisite details.
|
||||
//! The default `rust-skia` backend provides bounded pure-Rust `BMP`, `GIF`,
|
||||
//! `ICO`, `JPEG`, `PNG`, `WBMP`, and `WebP` decoding. Enable the optional
|
||||
//! `skia` feature when native Google Skia is specifically required. See the
|
||||
//! crate README for native cache, source-build, licensing, and deployment details.
|
||||
|
||||
extern crate self as libremetaverse_imaging_skia;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ repository.workspace = true
|
||||
description = "Texture codec abstractions for the MetaCrate LibreMetaverse rewrite"
|
||||
|
||||
[features]
|
||||
default = []
|
||||
default = ["rust-j2k"]
|
||||
jpeg2000 = ["dep:libremetaverse-openjpeg"]
|
||||
rust-j2k = ["dep:j2k"]
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
//! Image and texture abstractions corresponding to `LibreMetaverse.Imaging`.
|
||||
//!
|
||||
//! The default surface provides managed images plus native `TGA`/`DDS` handling.
|
||||
//! Enable `jpeg2000` for the audited system `OpenJPEG` adapter or `rust-j2k`
|
||||
//! for the independently selectable pure-Rust JPEG 2000 backend. Ordinary
|
||||
//! users can consume the traits without either codec dependency.
|
||||
//! The default surface provides managed images, native `TGA`/`DDS` handling,
|
||||
//! and the pure-Rust `rust-j2k` JPEG 2000 backend. Enable `jpeg2000` for the
|
||||
//! optional audited system `OpenJPEG` adapter. Consumers that only need the
|
||||
//! format-neutral image types can disable default features.
|
||||
|
||||
extern crate self as libremetaverse_imaging;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ repository.workspace = true
|
||||
description = "Primitive meshing shims for the MetaCrate LibreMetaverse rewrite"
|
||||
|
||||
[dependencies]
|
||||
libremetaverse-imaging = { version = "0.0.1", path = "../libremetaverse-imaging" }
|
||||
libremetaverse-imaging = { version = "0.0.1", path = "../libremetaverse-imaging", default-features = false }
|
||||
libremetaverse-types = { version = "0.0.1", path = "../libremetaverse-types" }
|
||||
|
||||
[dev-dependencies]
|
||||
|
||||
@@ -8,7 +8,7 @@ repository.workspace = true
|
||||
description = "Rust rewrite shell for the LibreMetaverse client library"
|
||||
|
||||
[features]
|
||||
default = ["dds-bc67"]
|
||||
default = ["dds-bc67", "rust-j2k"]
|
||||
dds-bc67 = ["dep:bcdec_rs"]
|
||||
jpeg2000 = ["libremetaverse-imaging/jpeg2000"]
|
||||
rust-j2k = ["libremetaverse-imaging/rust-j2k"]
|
||||
@@ -20,7 +20,7 @@ bcdec_rs = { version = "0.2.0", optional = true }
|
||||
flate2 = "1.1.2"
|
||||
futures-channel = "0.3.31"
|
||||
futures-util = "0.3.31"
|
||||
libremetaverse-imaging = { version = "0.0.1", path = "../libremetaverse-imaging" }
|
||||
libremetaverse-imaging = { version = "0.0.1", path = "../libremetaverse-imaging", default-features = false }
|
||||
libremetaverse-prim-mesher = { version = "0.0.1", path = "../libremetaverse-prim-mesher" }
|
||||
libremetaverse-structured-data = { version = "0.0.1", path = "../libremetaverse-structured-data" }
|
||||
libremetaverse-types = { version = "0.0.1", path = "../libremetaverse-types" }
|
||||
|
||||
@@ -15,11 +15,11 @@ they use those APIs directly.
|
||||
|
||||
| Crate | Choose it for | Features or system boundary |
|
||||
| --- | --- | --- |
|
||||
| `libremetaverse` | Grid client, login, network, agents, inventory, assets, appearance, world, and social APIs | Default pure-Rust BC6H/BC7; optional `jpeg2000`, `rust-j2k`, and `vorbis` |
|
||||
| `libremetaverse` | Grid client, login, network, agents, inventory, assets, appearance, world, and social APIs | Default pure-Rust BC6H/BC7 and J2K/JP2; optional native `jpeg2000` and `vorbis` |
|
||||
| `libremetaverse-types` | UUIDs, vectors, matrices, colors, cancellation, compatibility collections, and boundary types | Pure Rust |
|
||||
| `libremetaverse-structured-data` | LLSD/OSD XML, JSON, binary, and notation | Pure Rust |
|
||||
| `libremetaverse-imaging` | Managed images, TGA/DDS, codec traits | Optional `jpeg2000` or pure-Rust `rust-j2k` |
|
||||
| `libremetaverse-imaging-skia` | Common raster formats through native Skia or pure Rust | Optional `skia` native build/cache; optional `rust-skia` has no native prerequisites |
|
||||
| `libremetaverse-imaging` | Managed images, TGA/DDS, codec traits | Default pure-Rust `rust-j2k`; optional native `jpeg2000` |
|
||||
| `libremetaverse-imaging-skia` | Common raster formats through native Skia or pure Rust | Default pure-Rust `rust-skia`; optional `skia` native build/cache |
|
||||
| `libremetaverse-prim-mesher` | Legacy prim and sculpt geometry | Pure Rust |
|
||||
| `libremetaverse-rendering-simple` | Deterministic reference geometry | Pure Rust |
|
||||
| `libremetaverse-rendering-mesh-foundry` | Prim, terrain, sculpt, and mesh-asset rendering | Pure Rust |
|
||||
@@ -31,8 +31,8 @@ they use those APIs directly.
|
||||
| `libremetaverse-openjpeg` | Audited `OpenJPEG` adapter | System `OpenJPEG` 2.5.4 or newer |
|
||||
| `libremetaverse-opus` | Audited Opus encoder/decoder adapter | System libopus |
|
||||
|
||||
Features are additive. Keep defaults unless you need a codec, and enable one
|
||||
native adapter at a time while diagnosing installation problems. The
|
||||
Features are additive. Keep the pure-Rust defaults for normal applications,
|
||||
and enable a native adapter only when it is specifically needed. The
|
||||
[release CI matrix](https://git.rfc1437.de/hugo/MetaCrate/src/branch/main/docs/release-ci-matrix.md) records every validated combination.
|
||||
|
||||
## Naming and overload migration
|
||||
@@ -190,7 +190,7 @@ The default client build needs no image-codec system library. Optional native
|
||||
features require:
|
||||
|
||||
- `OpenJPEG` 2.5.4 or newer for `jpeg2000`;
|
||||
- no native prerequisite for the pure-Rust `rust-j2k` feature;
|
||||
- no native prerequisite for the default pure-Rust `rust-j2k` and `rust-skia` features;
|
||||
- the rust-skia prerequisites/cache for `skia`;
|
||||
- system libopus for WebRTC voice and the `libremetaverse-opus` adapter;
|
||||
- ALSA development headers on Linux, `CoreAudio` on macOS, or WASAPI on Windows
|
||||
|
||||
Reference in New Issue
Block a user