Ampandheaust 239b1d25b0 Build Rust render graph core
Keep hot render state in a generic shared SOA arena and use worker messages only for allocation, graph compilation, loadout changes, and render pacing. Compile external S-expression graphs into upfront WebGPU resources, transient aliases, and reusable render bundles.

Amp-Thread-ID: https://ampcode.com/threads/T-01a01380-b478-77d0-84a0-102880a5c5ae
Co-authored-by: Heaust Azure <heaust.azure@gmail.com>
2026-08-20 05:35:24 +00:00
2026-08-20 05:35:24 +00:00
2026-08-20 05:35:24 +00:00
2026-08-20 05:35:24 +00:00
2026-08-20 05:35:24 +00:00

Yawn

Yawn Core is two things: a generic structure-of-arrays arena in a SharedArrayBuffer, and a Rust render graph that turns externally supplied WGSL into an up-front WebGPU loadout.

JSO or FXNode → AST → S-expression → worker messages → Rust/WebGPU
                                                   ↑
any thread → direct shared row writes ─────────────┘

The arena starts with only one eight-float info row for frame timing and direct SAB render skipping. Messages create or delete other { name, rows, stride, format } arrays, allocate named slots, compile graphs, switch loadouts, and control render pacing. Existing render data is changed by writing f32, u32, or i32 rows directly. Allocations are 64-byte aligned, row strides are multiples of 16 bytes, and compatible non-overlapping transient textures share physical allocations.

WGSL, pipelines, glTF import, and conventional mesh/camera/material handles live in addons/; core contains no shader or scene model.

npm start

This opens the docs. The complete runnable example is at /playground.

S
Description
a blazing fast gpu rendering core for high performance or resource constrained web applications
Readme
528 MiB
Languages
TypeScript 53.9%
Rust 41%
JavaScript 4.7%
Shell 0.4%