mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-18 09:45:20 +02:00
* raster: a shifted surface copies in one pass per row without pre-filled tiles Surface::translated's misaligned path allocated every target tile through Tile::filled (a per-pixel default fill when the default is nonzero) before overwriting nearly all of it, and addressed spans through per-row closures. The path now writes each stored row directly: content spans copy as single memcpys crossing source tiles as needed, vacated edges fill from one prebuilt default row, and filled() builds its default rows in bulk. Same output (the read-back oracle covers every depth, sign and tile crossing), cheaper for nonzero defaults and one less pass over each tile. * raster: a missing source tile in the shifted content reads the default pixel The misaligned path skipped absent tiles inside the content rect, leaving zeros where the surface's default pixel belongs (a white mask with sparse tiles turned black after a move). The span now fills from the prebuilt default row. echelon's snippet is a regression test, and a randomized oracle compares the whole path against a per-pixel reference gather across formats, default pixels, sparse tiles and tile-boundary crossing shifts. * ci: retrigger wasm32 (the full workspace wasm check is clean locally; the job failed before writing a log and the run is stuck queued)