2D drawing abstraction that allows applications/frameworks to support many rendering backends through a unified API.
Painting a scene
The core abstraction in AnyRender is the [PaintScene] trait.
[PaintScene] is a "sink" which accepts drawing commands:
- Applications and libraries draw by pushing commands into a [
PaintScene] - Backends execute those commands to produce an output
Rendering to surface or buffer
In addition to PaintScene, there is:
- The [
ImageRenderer] trait which provides an abstraction for rendering to aVec<u8>RGBA8 buffer. - The [
WindowRenderer] trait which provides an abstraction for rendering to a surface/window
SVG
The anyrender_svg crate allows SVGs to be rendered using AnyRender
WASM support
Wgpu adapter/device/surface initialization is fundamentally async on the web. To avoid
deadlocking the JS event loop, [WindowRenderer::resume] takes an on_ready callback:
GPU backends spawn the init on wasm_bindgen_futures::spawn_local and invoke the callback
once the surface is live. The embedder then calls [WindowRenderer::complete_resume] to
transition the renderer to the active state. On native targets the same code path runs
inline (pollster::block_on on the GPU backends), so callers see no behavioural difference.
Backends
Currently existing backends are: