🎉 Update skia binaries to 0.97.0

This commit is contained in:
Alejandro Alonso 2026-05-20 11:00:08 +02:00
parent a157ecdc5b
commit 88b5d68fec
9 changed files with 103 additions and 30 deletions

31
render-wasm/Cargo.lock generated
View File

@ -66,10 +66,11 @@ checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
[[package]]
name = "cc"
version = "1.1.31"
version = "1.2.62"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f"
checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98"
dependencies = [
"find-msvc-tools",
"shlex",
]
@ -142,6 +143,12 @@ dependencies = [
"windows-sys 0.59.0",
]
[[package]]
name = "find-msvc-tools"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
[[package]]
name = "flate2"
version = "1.0.34"
@ -390,9 +397,9 @@ dependencies = [
[[package]]
name = "regex"
version = "1.11.0"
version = "1.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8"
checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
dependencies = [
"aho-corasick",
"memchr",
@ -402,9 +409,9 @@ dependencies = [
[[package]]
name = "regex-automata"
version = "0.4.8"
version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3"
checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
dependencies = [
"aho-corasick",
"memchr",
@ -521,9 +528,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]]
name = "skia-bindings"
version = "0.93.1"
version = "0.97.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2359f7e30c9da3f322f8ca3d4ec0abbc12a40035ce758309db0cdab07b5d4476"
checksum = "d6e3bcf8f25bf047e83110838463e8d06696c12fccc3d3794adf448b4d81f34b"
dependencies = [
"bindgen",
"cc",
@ -538,9 +545,9 @@ dependencies = [
[[package]]
name = "skia-safe"
version = "0.93.1"
version = "0.97.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f9e837ea9d531c9efee8f980bfcdb7226b21db0285b0c3171d8be745829f940"
checksum = "935d4d174fb749bac9265eb41cad75039d32fda2d9c1a1e81b430df0e210a409"
dependencies = [
"base64",
"bitflags",
@ -573,9 +580,9 @@ dependencies = [
[[package]]
name = "tar"
version = "0.4.42"
version = "0.4.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ff6c40d3aedb5e06b57c6f669ad17ab063dd1e63d977c6a88e7f4dfa4f04020"
checksum = "3f6221d9a6003c78398e3b239969f352578258df48c8eb051caadae0015bc840"
dependencies = [
"filetime",
"libc",

View File

@ -26,7 +26,7 @@ gl = "0.14.0"
glam = "0.24.2"
indexmap = "2.7.1"
macros = { path = "macros" }
skia-safe = { version = "0.93.1", default-features = false, features = [
skia-safe = { version = "0.97.0", default-features = false, features = [
"gl",
"svg",
"textlayout",

View File

@ -10,7 +10,7 @@ fi
export BUILD_NAME="${BUILD_NAME:-render-wasm}"
export CARGO_BUILD_TARGET=${CARGO_BUILD_TARGET:-"wasm32-unknown-emscripten"};
export SKIA_BINARIES_URL=${SKIA_BINARIES_URL:-"https://github.com/penpot/skia-binaries/releases/download/0.93.1/skia-binaries-319323662b1685a112f5-wasm32-unknown-emscripten-gl-svg-textlayout-binary-cache-webp.tar.gz"}
export SKIA_BINARIES_URL=${SKIA_BINARIES_URL:-"https://github.com/penpot/skia-binaries/releases/download/0.97.0/skia-binaries-fdd89c91b34b4e26dd64-wasm32-unknown-emscripten-gl-svg-textlayout-binary-cache-webp.tar.gz"}
# 256 MB of initial heap to perform less
# initial calls to memory grow.
@ -29,6 +29,10 @@ export EM_MEMORY_GROWTH_GEOMETRIC_STEP="0.8"
# Default: dlmalloc
export EM_MALLOC="dlmalloc"
RENDER_WASM_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Link Skia's std::__hash_memory at final emcc link (must use em++, not host g++ via build.rs).
export EMCC_HASH_MEMORY_SHIM="${RENDER_WASM_ROOT}/src/shim/hash_memory.cpp"
export EMCC_CFLAGS="--no-entry \
--js-library src/js/wapi.js \
-sMALLOC=$EM_MALLOC \
@ -44,7 +48,8 @@ export EMCC_CFLAGS="--no-entry \
-sMODULARIZE=1 \
-sDISABLE_EXCEPTION_CATCHING=1 \
-sFILESYSTEM=0 \
-sEXPORT_ES6=1";
-sEXPORT_ES6=1 \
${EMCC_HASH_MEMORY_SHIM}";
export EM_CACHE="/tmp/emsdk_cache";

View File

@ -11,7 +11,7 @@ fi
. ./_build_env
export CARGO_BUILD_TARGET=${CARGO_BUILD_TARGET:-"wasm32-unknown-emscripten"};
export SKIA_BINARIES_URL=${SKIA_BINARIES_URL:-"https://github.com/penpot/skia-binaries/releases/download/0.93.1/skia-binaries-319323662b1685a112f5-wasm32-unknown-emscripten-gl-svg-textlayout-binary-cache-webp.tar.gz"}
export SKIA_BINARIES_URL=${SKIA_BINARIES_URL:-"https://github.com/penpot/skia-binaries/releases/download/0.97.0/skia-binaries-fdd89c91b34b4e26dd64-wasm32-unknown-emscripten-gl-svg-textlayout-binary-cache-webp.tar.gz"}
ALLOWED_RULES="-D static_mut_refs"

View File

@ -51,12 +51,21 @@ impl Gradient {
rect.left + self.end.0 * rect.width(),
rect.top + self.end.1 * rect.height(),
);
skia::gradient_shader::linear(
(start, end),
self.colors.as_slice(),
let colors4f: Vec<skia::Color4f> = self.colors.iter().copied().map(Into::into).collect();
let colors = skia::gradient::Colors::new(
colors4f.as_slice(),
Some(self.offsets.as_slice()),
skia::TileMode::Clamp,
None,
None::<skia::ColorSpace>,
);
let gradient =
skia::gradient::Gradient::new(colors, skia::gradient::Interpolation::default());
skia::gradient::shaders::linear_gradient(
(
skia::Point::new(start.0, start.1),
skia::Point::new(end.0, end.1),
),
&gradient,
None,
)
}
@ -83,15 +92,16 @@ impl Gradient {
transform.pre_scale((self.width * rect.width() / rect.height(), 1.), None);
transform.pre_translate((-center.x, -center.y));
skia::gradient_shader::radial(
center,
distance,
self.colors.as_slice(),
let colors4f: Vec<skia::Color4f> = self.colors.iter().copied().map(Into::into).collect();
let colors = skia::gradient::Colors::new(
colors4f.as_slice(),
Some(self.offsets.as_slice()),
skia::TileMode::Clamp,
None,
Some(&transform),
)
None::<skia::ColorSpace>,
);
let gradient =
skia::gradient::Gradient::new(colors, skia::gradient::Interpolation::default());
skia::gradient::shaders::radial_gradient((center, distance), &gradient, Some(&transform))
}
}

View File

@ -33,7 +33,7 @@ pub fn stroke_to_path(
paint.set_stroke_width(stroke.width * 2.0);
}
let mut stroke_outline = skia::Path::default();
let mut stroke_outline = skia::PathBuilder::new();
let success = skia::path_utils::fill_path_with_paint(
&transformed_shape_path,
&paint,
@ -46,6 +46,8 @@ pub fn stroke_to_path(
return None;
}
let mut stroke_outline = stroke_outline.detach();
// For inner/outer strokes, use boolean ops to clip
// the 2×-width stroke outline to the correct region.
// Set EvenOdd to preserve the annular ring's inner hole,

View File

@ -0,0 +1,49 @@
// Skia 0.97 WASM references std::__hash_memory. Compiled via EMCC_CFLAGS at the
// final emcc link (see _build_env). murmur2 matches libc++ on 32-bit wasm.
#include <cstddef>
#include <cstring>
namespace std {
inline namespace __2 {
static size_t loadword(const void* p) {
size_t r;
std::memcpy(&r, p, sizeof(r));
return r;
}
__attribute__((used)) size_t __hash_memory(const void* key, size_t len) noexcept {
const size_t m = 0x5bd1e995;
const size_t r = 24;
size_t h = len;
const auto* data = static_cast<const unsigned char*>(key);
for (; len >= 4; data += 4, len -= 4) {
size_t k = loadword(data);
k *= m;
k ^= k >> r;
k *= m;
h *= m;
h ^= k;
}
switch (len) {
case 3:
h ^= static_cast<size_t>(data[2] << 16);
[[fallthrough]];
case 2:
h ^= static_cast<size_t>(data[1] << 8);
[[fallthrough]];
case 1:
h ^= data[0];
h *= m;
break;
default:
break;
}
h ^= h >> 13;
h *= m;
h ^= h >> 15;
return h;
}
} // namespace __2
} // namespace std

View File

@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -x
export SKIA_BINARIES_URL=${SKIA_BINARIES_URL:-"https://github.com/penpot/skia-binaries/releases/download/0.93.1/skia-binaries-319323662b1685a112f5-x86_64-unknown-linux-gnu-gl-svg-textlayout-binary-cache-webp.tar.gz"}
export SKIA_BINARIES_URL=${SKIA_BINARIES_URL:-"https://github.com/penpot/skia-binaries/releases/download/0.97.0/skia-binaries-fdd89c91b34b4e26dd64-x86_64-unknown-linux-gnu-gl-svg-textlayout-binary-cache-webp.tar.gz"}
export CARGO_BUILD_TARGET=${CARGO_BUILD_TARGET:-"x86_64-unknown-linux-gnu"};
_SCRIPT_DIR=$(dirname $0);

View File

@ -1,7 +1,7 @@
#!/usr/bin/env bash
_SCRIPT_DIR=$(dirname $0);
export SKIA_BINARIES_URL="https://github.com/penpot/skia-binaries/releases/download/0.93.1/skia-binaries-319323662b1685a112f5-x86_64-unknown-linux-gnu-gl-svg-textlayout-binary-cache-webp.tar.gz"
export SKIA_BINARIES_URL="https://github.com/penpot/skia-binaries/releases/download/0.97.0/skia-binaries-fdd89c91b34b4e26dd64-x86_64-unknown-linux-gnu-gl-svg-textlayout-binary-cache-webp.tar.gz"
pushd $_SCRIPT_DIR;
cargo watch -x "test --bin render_wasm -- --show-output"