diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2023-09-04 15:06:44 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2023-09-04 20:53:41 -0700 |
commit | bab16b070f95687ec11d43e55f3dd6e69f96a576 (patch) | |
tree | 324246c6582cd74a7240b72f2f3b11a6618b9d40 /src/til.c | |
parent | 9170d08854796f8595c9f6cebe85827a71e86e19 (diff) |
til: support multi-pass rendering
Modules can now use the til_module_t.finish_frame() return value
to trigger re-rendering by returning 1, returning 0 finishes the
frame.
A smattering of til_module_t.finish_frame() implementations were
largely mechanically updated to match this change by returning 0,
since nothing actually uses multi-pass rendering yet.
The impetus for this is experimenting with the flow module doing
two passes of threaded rendering per frame. A first pass to
sample the flow field and update the elements, per-cpu, but
drawing nothing. Then a second pass to render the elements in a
tiled manner.
Diffstat (limited to 'src/til.c')
-rw-r--r-- | src/til.c | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -238,6 +238,7 @@ static void module_render_fragment(til_module_context_t *context, til_stream_t * module = context->module; +render_again: if (module->prepare_frame) { til_frame_plan_t frame_plan = {}; @@ -269,7 +270,8 @@ static void module_render_fragment(til_module_context_t *context, til_stream_t * } if (module->finish_frame) { - module->finish_frame(context, stream, ticks, fragment_ptr); + if (module->finish_frame(context, stream, ticks, fragment_ptr) > 0) + goto render_again; touched++; } |