Skip to main content

celestialsim/chunk_nodes/
scatter_place.rs

1//! `celestial/chunk-scatter-place` — CEL-73 scatter placement dispatch. One
2//! thread per candidate of each realize-batch chunk, per layer. Runs only when
3//! chunks were (re)realized (`realize_count > 0`); the pool it writes is CACHED
4//! per slot, so camera moves and density/height edits never re-run it.
5
6use crate::chunk_nodes::ChunkNode;
7use crate::chunk_pipeline::ChunkCtx;
8
9pub struct ChunkScatterPlace;
10
11impl ChunkNode for ChunkScatterPlace {
12    fn name(&self) -> &'static str {
13        "celestial/chunk-scatter-place"
14    }
15
16    fn record(&mut self, ctx: &mut ChunkCtx<'_>) {
17        let count = ctx.realize_count;
18        if count == 0 || ctx.gpu.scatter_layer_count() == 0 {
19            return;
20        }
21        let list = ctx.list();
22        let mut rd = ctx.rd.clone();
23        for li in 0..ctx.gpu.scatter_layer_count() {
24            ctx.gpu.record_scatter_place(&mut rd, list, li, count);
25        }
26    }
27}