diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2023-08-07 15:38:12 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2023-08-07 16:40:13 -0700 |
commit | f2c91ee49e2d4cc9711027cb404076ffba1bad6e (patch) | |
tree | 80022894753c67fe8ad0a0a9f5c397f5a2d008b7 /src/modules/sparkler/particle.c | |
parent | e550c9e8c6ffcdc902b56393609e76a8b191b279 (diff) |
modules/checkers: ensure all fill_module_contexts render
There's potential for some of the per-cpu fill_module_contexts to
go unused for an entire frame. When this occurs, depending on
the fill_module in use, it can lead to their context's state
diverging.
To mitigate this possibility, add a tidying up pass in
checkers_finish_frame() where such straggler contexts are
identified and forced to render once into a cell-sized waste_fb
of off-screen memory.
This ensures all contexts see all frames/ticks that any
participated in, preserving their clone status across the board.
Prior to this you could see jittering in something like
'--module=checkers,fill_module=roto' as the roto contexts
diverged on the r/rr variables when some didn't get in on the
action of some frames.
See large TODO comment for why this approach is used instead of
something less wasteful of cpu time.
If this approach is kept, it might make sense to do the waste
rendering in parallel. Systems with large numbers of cores could
end up with many stragglers, depending on how many cells there
are vs. cpus. I don't have any such systems so it's difficult to
test any efforts in that vein.
Diffstat (limited to 'src/modules/sparkler/particle.c')
0 files changed, 0 insertions, 0 deletions