diff options
Diffstat (limited to 'src/modules/sparkler')
-rw-r--r-- | src/modules/sparkler/sparkler.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/modules/sparkler/sparkler.c b/src/modules/sparkler/sparkler.c index 6d8d354..a2210dc 100644 --- a/src/modules/sparkler/sparkler.c +++ b/src/modules/sparkler/sparkler.c @@ -58,28 +58,36 @@ static void sparkler_destroy_context(void *context) } +static void sparkler_prepare_frame(void *context, unsigned ncpus, fb_fragment_t *fragment, rototiller_frame_t *res_frame) +{ + sparkler_context_t *ctxt = context; + + fb_fragment_divide(fragment, ncpus, res_frame->fragments); + res_frame->n_fragments = ncpus; + + particles_sim(ctxt->particles); + particles_add_particles(ctxt->particles, NULL, &simple_ops, INIT_PARTS / 4); + particles_age(ctxt->particles); +} + + /* Render a 3D particle system */ static void sparkler_render_fragment(void *context, fb_fragment_t *fragment) { sparkler_context_t *ctxt = context; - uint32_t *buf = fragment->buf; - fb_fragment_zero(fragment); - - particles_age(ctxt->particles); particles_draw(ctxt->particles, fragment); - particles_sim(ctxt->particles); - particles_add_particles(ctxt->particles, NULL, &simple_ops, INIT_PARTS / 4); } rototiller_module_t sparkler_module = { .create_context = sparkler_create_context, .destroy_context = sparkler_destroy_context, + .prepare_frame = sparkler_prepare_frame, .render_fragment = sparkler_render_fragment, .name = "sparkler", - .description = "Particle system with spatial interactions", + .description = "Particle system with spatial interactions (threaded (poorly))", .author = "Vito Caputo <vcaputo@pengaru.com>", .license = "GPLv2", }; |