spine2d-wgpu

Crates.iospine2d-wgpu
lib.rsspine2d-wgpu
version0.2.0
created_at2025-12-21 04:44:14.440299+00
updated_at2025-12-21 15:22:10.992744+00
descriptionwgpu renderer integration for the spine2d runtime
homepagehttps://github.com/Latias94/spine2d
repositoryhttps://github.com/Latias94/spine2d
max_upload_size
id1997390
size166,400
Latias94 (Latias94)

documentation

https://docs.rs/spine2d-wgpu

README

spine2d

Experimental, pure Rust runtime for Spine 4.3 (unofficial).

Important notice

  • This project is unofficial and is not affiliated with Esoteric Software.
  • This is a pure Rust runtime, not an FFI binding to the official spine-c / spine-cpp runtimes. Compatibility and behavioural parity are an explicit goal, but you should treat this as an experimental implementation and manage the integration risk accordingly.
  • If you need “official runtime parity + support” today, use the official runtimes (or a binding to them).

Goals

  • Pure Rust implementation (no C/C++ toolchain).
  • Works on wasm32-unknown-unknown (web) and native targets.
  • Core crate is renderer-agnostic; rendering integrations live in separate crates.
  • Drive parity via oracles and upstream tests (not “approximate compatibility”).

Non-goals (for now)

  • FFI bindings to the official runtimes (spine-c, spine-cpp).
  • Guaranteeing perfect behavioural parity with official runtimes from day one (we are iterating toward it, with an oracle-based workflow).

Project layout

  • spine2d: core runtime + parsing + renderer-agnostic render output.

  • spine2d-wgpu: wgpu renderer integration built on top of spine2d.

  • spine2d-web: Trunk + wgpu web demo/viewer (wasm32-unknown-unknown).

Assets / redistribution

  • This repository does not ship official Spine example exports by default.
  • Local dev scripts can download spine-runtimes and import example exports into assets/ for testing/demos. Make sure you comply with the Spine license terms for your usage and redistribution.
    • Import examples locally: python3 ./scripts/prepare_spine_runtimes_web_assets.py --scope tests

Optional upstream smoke tests (local data)

Some smoke tests can parse official exported example JSON files from the upstream spine-runtimes repository. These files are not committed here by default.

  • Fetch + import: python3 ./scripts/fetch_spine_runtimes_examples.py --mode json --scope tests
  • Import from an existing checkout: ./scripts/import_spine_runtimes_examples.zsh --mode json --scope tests
  • Run tests: cargo test -p spine2d --features json,upstream-smoke
  • Run tests (including .skel parsing): cargo test -p spine2d --features json,binary,upstream-smoke

Demo

wgpu demo (native)

  • Minimal UV test window: cargo run -p spine2d-wgpu --example basic --features json
  • Render upstream example skeletons (requires importing --mode export):
    python3 ./scripts/fetch_spine_runtimes_examples.py --mode export --scope tests
    cargo run -p spine2d-wgpu --example spine_runtimes --features json -- spineboy run --speed 1.0
    • Note: the demo resets the skeleton to setup pose each frame before AnimationState::apply to avoid accumulated constraint drift.
    • Tip: the demo has an egui top bar to switch example/animation/skin and adjust speed/margin.

Web demo (wasm + Trunk)

  • Install target: rustup target add wasm32-unknown-unknown
  • Install Trunk: cargo install trunk --locked
  • Run dev server: cd spine2d-web && trunk serve
    • Note: the viewer can load local official exports if assets/spine-runtimes/web_manifest.json exists (generated by script; not committed).
    • Note: the web demo tracks devicePixelRatio and reconfigures the surface on resize.
    • Note: the demo auto-fits the initial bounds to the viewport (camera fit is computed once from the first frame).
    • Controls: Play/Pause, Restart, Fit, Speed, Animation, Skin.

Using official example exports locally

  • Prepare assets + web manifest: python3 ./scripts/prepare_spine_runtimes_web_assets.py --scope tests
  • Then run: cd spine2d-web && trunk serve
    • The demo will auto-detect assets/spine-runtimes/web_manifest.json and populate the Example dropdown.
    • Optional URL params: ?example=spineboy&anim=run

License

Dual-licensed under MIT OR Apache-2.0. See LICENSE-MIT and LICENSE-APACHE.

Spine license notice

Spine is developed by Esoteric Software. This project is not affiliated with them. Using Spine runtimes and Spine data generally requires a Spine Editor license. See the official license terms: https://esotericsoftware.com/spine-editor-license

Commit count: 0

cargo fmt