Skip to content

Presentation

The decision: does anything observe the world on a different cadence, thread, or process than the simulation tick? If yes, publish versioned DeltaFrames; if no, omit the render bridge — it is optional, and nothing else depends on it.

Branches

Branch Pick when
Headless servers, batch experiments, tests: no observer exists, so skip DeltaCollector entirely
DeltaFrame consumer any renderer, UI, or network mirror: the consumer owns shadow state, applies immutable versioned frames, and resynchronizes on gaps

Consumers never rescan the world: frame records carry either individual changed tiles or box-granular dirty bounds, and the consumer re-reads the named tiles — or repaints the recorded box — from the authoritative world (or receives values over its own channel). Frame versions make missed frames detectable and recovery explicit rather than silent.

What it looks like

tess::collect_tile_deltas(deltas, world, kTerrainDirty);
const auto frame = deltas.publish();

Learn and specify

  • Teach: getting-started §8, rung 8; examples/render_delta_consumer.cc rebuilds a shadow grid from frames alone, and examples/colony_2d.cc shows the bridge inside a full schedule loop.
  • Specify: simulation note — collection, publication, versioning, resync.