shared/rast: pure-C cross-platform triangle rasterizer + self-tests master
Foundation for the arena parity + WASM-speedup plan. One C99 file (raster.c ~180 lines) implementing perspective-correct, depth-buffered, textured / per-vertex-color / solid-fill triangles. No libc allocs in the hot path, no mutable globals — every call is re-entrant so workers can rasterize independent tiles against shared framebuffers. Also ships raster_test.c with four self-tests (solid fill, color interpolation dominance, depth occlusion with late-draw rejection, scissor clipping). Builds with plain gcc today; emscripten build comes next. The same test binary will run against the .wasm output via wasmtime/node once that's wired. Next steps: 1. Wire raster.c into fedac/native/src/graph3d.c so ac-native switches to the shared implementation (zero behavior change — current graph3d.c code was the source). 2. Emscripten build producing raster.wasm + raster.js loader. 3. Replace bios.mjs's JS triangle path with a WASM call. 4. Tile binning + WebWorker pool (SAB + Atomics) for the parallel path; native gets pthread pool with same tile data structures. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>