summaryrefslogtreecommitdiff
path: root/src/modules/rtv
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2020-01-25 17:26:54 -0800
committerVito Caputo <vcaputo@pengaru.com>2020-01-25 17:38:27 -0800
commit6385931985fa6fa8dd7ed69c20785d6b8d9cf37a (patch)
tree8fd19a7f72e60202367b417827112f7a57c0f24e /src/modules/rtv
parent792d0a60dd05035435574633c4a13a666fe6ce5d (diff)
rototiller: introduce ticks and wire up to modules
Most modules find themselves wanting some kind of "t" value increasing with time or frames rendered. It's common for them to create and maintain this variable locally, incrementing it with every frame rendered. It may be interesting to introduce a global notion of ticks since rototiller started, and have all modules derive their "t" value from this instead of having their own private versions of it. In future modules and general innovations it seems likely that playing with time, like jumping it forwards and backwards to achieve some visual effects, will be desirable. This isn't applicable to all modules, but for many their entire visible state is derived from their "t" value, making them entirely reversible. This commit doesn't change any modules functionally, it only adds the plumbing to pull a ticks value down to the modules from the core. A ticks offset has also been introduced in preparation for supporting dynamic shifting of the ticks value, though no API is added for doing so yet. It also seems likely an API will be needed for disabling the time-based ticks advancement, with functions for explicitly setting its value. If modules are created for incorporating external sequencers and music coordination, they will almost certainly need to manage the ticks value explicitly. When a sequencer jumps forwards/backwards in the creative process, the module glue responsible will need to keep ticks synchronized with the sequencer/editor tool. Before any of this can happen, we need ticks as a first-class core thing shared by all modules. Future commits will have to modify existing modules to use the ticks appropriately, replacing their bespoke variants.
Diffstat (limited to 'src/modules/rtv')
-rw-r--r--src/modules/rtv/rtv.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/modules/rtv/rtv.c b/src/modules/rtv/rtv.c
index 196bbfb..6961a4f 100644
--- a/src/modules/rtv/rtv.c
+++ b/src/modules/rtv/rtv.c
@@ -42,11 +42,11 @@ typedef struct rtv_context_t {
rtv_module_t modules[];
} rtv_context_t;
-static void setup_next_module(rtv_context_t *ctxt);
-static void * rtv_create_context(unsigned num_cpus);
+static void setup_next_module(rtv_context_t *ctxt, unsigned ticks);
+static void * rtv_create_context(unsigned ticks, unsigned num_cpus);
static void rtv_destroy_context(void *context);
-static void rtv_prepare_frame(void *context, unsigned n_cpus, fb_fragment_t *fragment, rototiller_fragmenter_t *res_fragmenter);
-static void rtv_finish_frame(void *context, fb_fragment_t *fragment);
+static void rtv_prepare_frame(void *context, unsigned ticks, unsigned n_cpus, fb_fragment_t *fragment, rototiller_fragmenter_t *res_fragmenter);
+static void rtv_finish_frame(void *context, unsigned ticks, fb_fragment_t *fragment);
rototiller_module_t rtv_module = {
@@ -126,7 +126,7 @@ static char * randomize_module_setup(const rototiller_module_t *module)
}
-static void setup_next_module(rtv_context_t *ctxt)
+static void setup_next_module(rtv_context_t *ctxt, unsigned ticks)
{
time_t now = time(NULL);
@@ -181,11 +181,11 @@ static void setup_next_module(rtv_context_t *ctxt)
}
if (ctxt->module->create_context)
- ctxt->module_ctxt = ctxt->module->create_context(ctxt->n_cpus);
+ ctxt->module_ctxt = ctxt->module->create_context(ticks, ctxt->n_cpus);
}
-static void * rtv_create_context(unsigned num_cpus)
+static void * rtv_create_context(unsigned ticks, unsigned num_cpus)
{
rtv_context_t *ctxt;
const rototiller_module_t **modules;
@@ -208,7 +208,7 @@ static void * rtv_create_context(unsigned num_cpus)
ctxt->modules[ctxt->n_modules++].module = modules[i];
}
- setup_next_module(ctxt);
+ setup_next_module(ctxt, ticks);
return ctxt;
}
@@ -220,22 +220,22 @@ static void rtv_destroy_context(void *context)
}
-static void rtv_prepare_frame(void *context, unsigned n_cpus, fb_fragment_t *fragment, rototiller_fragmenter_t *res_fragmenter)
+static void rtv_prepare_frame(void *context, unsigned ticks, unsigned n_cpus, fb_fragment_t *fragment, rototiller_fragmenter_t *res_fragmenter)
{
rtv_context_t *ctxt = context;
time_t now = time(NULL);
if (now >= ctxt->next_switch)
- setup_next_module(ctxt);
+ setup_next_module(ctxt, ticks);
if (now >= ctxt->next_hide_caption)
ctxt->caption = txt_free(ctxt->caption);
- rototiller_module_render(ctxt->module, ctxt->module_ctxt, fragment);
+ rototiller_module_render(ctxt->module, ctxt->module_ctxt, ticks, fragment);
}
-static void rtv_finish_frame(void *context, fb_fragment_t *fragment)
+static void rtv_finish_frame(void *context, unsigned ticks, fb_fragment_t *fragment)
{
rtv_context_t *ctxt = context;
© All Rights Reserved