Cargo.lock | 3 + arc/platforms.md | 20 +- arc/ui.md | 6 +- crates/canvas/examples/reading_inventory.rs | 2 +- crates/canvas/examples/render_page.rs | 2 +- crates/canvas/src/gpu/mod.rs | 2 +- crates/canvas/src/gpu/page/background.rs | 2 +- crates/canvas/src/gpu/profile.rs | 4 +- crates/draw/Cargo.toml | 25 +- crates/draw/src/render.rs | 66 +- crates/draw/src/render/canvas2d.rs | 1178 ++++++++++++++++++++++++++++++++ crates/draw/src/render/d3d11.rs | 9 +- crates/draw/src/render/dual.rs | 138 +++- crates/draw/src/render/gl.rs | 9 +- crates/draw/src/render/webgpu.rs | 34 +- crates/mobile/src/lib.rs | 2 +- crates/snowbound/Cargo.toml | 2 +- crates/snowbound/src/conflict_render.rs | 2 +- crates/snowbound/src/macos.rs | 27 + crates/snowbound/src/main.rs | 178 ++++- crates/snowbound/src/options.rs | 92 ++- crates/snowbound/src/settings.rs | 99 +++ crates/snowbound/src/surface.rs | 98 ++- crates/snowbound/src/surface_gl.rs | 46 +- crates/snowbound/src/surface_macos.rs | 166 +++++ crates/snowbound/src/surface_web.rs | 166 +++++ crates/snowbound/src/surface_windows.rs | 95 +-- crates/snowbound/src/sync.rs | 2 +- crates/snowbound/src/web.rs | 81 ++- crates/snowbound/tests/replay.rs | 38 ++ crates/snowbound/web/glue.js | 41 +- crates/snowbound/web/index.html | 21 +- crates/ui/examples/popups.rs | 2 +- tools/canvas/README.md | 4 +- 34 files changed, 2476 insertions(+), 186 deletions(-)