feat(imaging): add pure-Rust Skia backend (#112)
Some checks failed
CI / rust-skia (Rust only) (push) Successful in 2m48s
CI / required (push) Failing after 3m25s

This commit is contained in:
2026-08-13 07:49:37 +00:00
parent e1744f44bb
commit 8c18b2ac8c
46 changed files with 4301 additions and 148 deletions

View File

@@ -932,6 +932,16 @@ fn validate_features(name: &str, actual: &BTreeMap<String, Vec<String>>) -> Resu
]),
"libremetaverse-imaging-skia" => BTreeMap::from([
("default".to_owned(), Vec::new()),
(
"rust-skia".to_owned(),
vec![
"dep:image-webp".to_owned(),
"dep:skia-rs-codec".to_owned(),
"skia-rs-codec/gif".to_owned(),
"skia-rs-codec/jpeg".to_owned(),
"skia-rs-codec/png".to_owned(),
],
),
("skia".to_owned(), vec!["dep:skia-safe".to_owned()]),
]),
"libremetaverse-voice-webrtc" => BTreeMap::from([
@@ -1232,7 +1242,7 @@ The exact mapping, exported-marker, feature, and normalized Rust declaration has
- .NET events become `subscribe_*` calls returning an owned `Subscription`; callbacks are `Send + Sync` and dispatch outside internal locks.\n\
- `IDisposable` becomes explicit idempotent shutdown plus `Drop`; cancellation remains a typed `Error::Cancelled`.\n\
- Closed C# enums retain fixed discriminants and are SemVer-breaking to extend; flags retain unknown bits, while public Rust error enums are `non_exhaustive`.\n\
- Optional native backends remain feature-gated (`jpeg2000`, `skia`, `vorbis`, `real-audio`); default and empty-default sets are part of the baseline.\n\
- Optional native and pure-Rust backends remain feature-gated (`jpeg2000`, `rust-j2k`, `skia`, `rust-skia`, `vorbis`, `real-audio`); default and empty-default sets are part of the baseline.\n\
- Capability HTTP injection uses project-owned `HttpMessageHandler`, `CapsHttpLimits`, and `with_native_transport`; the internal `reqwest` client is not part of the public surface.\n\
- External C# signature types map to core/std, adopted cross-platform crates, or project-owned boundary types; no third-party crate path leaks through mapped signatures or public Rust declarations.\n\n\
## Compile consumers\n\n\

View File

@@ -38,7 +38,7 @@ const REQUIRED_PROFILES: [&str; 7] = [
"windows-stable-portable",
"macos-stable-portable",
];
const REQUIRED_FEATURE_SETS: [&str; 12] = [
const REQUIRED_FEATURE_SETS: [&str; 13] = [
"all-features",
"dds-bc67",
"default",
@@ -48,11 +48,12 @@ const REQUIRED_FEATURE_SETS: [&str; 12] = [
"no-default-features",
"real-audio",
"rust-j2k",
"rust-skia",
"skia",
"tests",
"vorbis",
];
const REQUIRED_FEATURES: [(&str, &str); 8] = [
const REQUIRED_FEATURES: [(&str, &str); 9] = [
("libremetaverse", "dds-bc67"),
("libremetaverse", "jpeg2000"),
("libremetaverse", "rust-j2k"),
@@ -60,6 +61,7 @@ const REQUIRED_FEATURES: [(&str, &str); 8] = [
("libremetaverse-imaging", "jpeg2000"),
("libremetaverse-imaging", "rust-j2k"),
("libremetaverse-imaging-skia", "skia"),
("libremetaverse-imaging-skia", "rust-skia"),
("libremetaverse-voice-webrtc", "real-audio"),
];