From eb19473f1a5dd412f945a4526cb7834113defa44 Mon Sep 17 00:00:00 2001 From: Vito Caputo Date: Sun, 15 Jan 2023 17:10:04 -0800 Subject: til_stream: add a second void* to til_stream_pipe_t It seems likely that pipe owners will need not only a way to differentiate themselves via the owner pointer, but also somewhere to register a pipe-specific reference. There probably needs to be a result pointer added for storing the owner_foo when the owner taps, so the owner can make use of it. --- src/modules/plato/plato.c | 4 ++-- src/modules/stars/stars.c | 10 +++++----- src/til_stream.c | 4 +++- src/til_stream.h | 6 +++--- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/modules/plato/plato.c b/src/modules/plato/plato.c index 259d5b0..f952674 100644 --- a/src/modules/plato/plato.c +++ b/src/modules/plato/plato.c @@ -653,8 +653,8 @@ static void plato_render_fragment(til_module_context_t *context, til_stream_t *s til_fb_fragment_t *fragment = *fragment_ptr; /* since we don't automate the rates ourselves, we don't care about the tap return values */ - (void) til_stream_tap_context(stream, context, &ctxt->taps.orbit_rate); - (void) til_stream_tap_context(stream, context, &ctxt->taps.spin_rate); + (void) til_stream_tap_context(stream, context, NULL, &ctxt->taps.orbit_rate); + (void) til_stream_tap_context(stream, context, NULL, &ctxt->taps.spin_rate); ctxt->r += (float)(ticks - context->ticks) * (*ctxt->orbit_rate * .001f); ctxt->rr += (float)(ticks - context->ticks) * (*ctxt->spin_rate * .001f); diff --git a/src/modules/stars/stars.c b/src/modules/stars/stars.c index d64a3d8..d57de53 100644 --- a/src/modules/stars/stars.c +++ b/src/modules/stars/stars.c @@ -223,10 +223,10 @@ static void stars_render_fragment(til_module_context_t *context, til_stream_t *s ctxt->points = tmp_ptr; } - if (!til_stream_tap_context(stream, context, &ctxt->taps.rot_angle)) + if (!til_stream_tap_context(stream, context, NULL, &ctxt->taps.rot_angle)) *ctxt->rot_angle+=*ctxt->rot_rate; - if (!til_stream_tap_context(stream, context, &ctxt->taps.rot_rate)) { + if (!til_stream_tap_context(stream, context, NULL, &ctxt->taps.rot_rate)) { // handle rotation parameters if(*ctxt->rot_angle>M_PI_4) *ctxt->rot_rate=*ctxt->rot_rate-ctxt->rot_adj; @@ -235,16 +235,16 @@ static void stars_render_fragment(til_module_context_t *context, til_stream_t *s } /* there's no automation of offset_angle */ - (void) til_stream_tap_context(stream, context, &ctxt->taps.offset_angle); + (void) til_stream_tap_context(stream, context, NULL, &ctxt->taps.offset_angle); // handle offset parameters - if (!til_stream_tap_context(stream, context, &ctxt->taps.offset_x)) { + if (!til_stream_tap_context(stream, context, NULL, &ctxt->taps.offset_x)) { float tmp_x = (*ctxt->offset_x*cosf(*ctxt->offset_angle))- (*ctxt->offset_y*sinf(*ctxt->offset_angle)); *ctxt->offset_x = tmp_x; } - if (!til_stream_tap_context(stream, context, &ctxt->taps.offset_y)) { + if (!til_stream_tap_context(stream, context, NULL, &ctxt->taps.offset_y)) { float tmp_y = (*ctxt->offset_x*sinf(*ctxt->offset_angle))+ (*ctxt->offset_y*cosf(*ctxt->offset_angle)); *ctxt->offset_y = tmp_y; diff --git a/src/til_stream.c b/src/til_stream.c index a47f953..5f26c72 100644 --- a/src/til_stream.c +++ b/src/til_stream.c @@ -73,6 +73,7 @@ typedef struct til_stream_pipe_t til_stream_pipe_t; struct til_stream_pipe_t { til_stream_pipe_t *next; const void *owner; + const void *owner_foo; char *parent_path; const til_tap_t *driving_tap; uint32_t hash; @@ -127,7 +128,7 @@ til_stream_t * til_stream_free(til_stream_t *stream) * * If stream is NULL it's treated as if the key doesn't exist without a pipe creation. */ -int til_stream_tap(til_stream_t *stream, const void *owner, const char *parent_path, uint32_t parent_hash, const til_tap_t *tap) +int til_stream_tap(til_stream_t *stream, const void *owner, const void *owner_foo, const char *parent_path, uint32_t parent_hash, const til_tap_t *tap) { uint32_t hash, bucket; til_stream_pipe_t *pipe; @@ -173,6 +174,7 @@ int til_stream_tap(til_stream_t *stream, const void *owner, const char *parent_p } pipe->owner = owner; + pipe->owner_foo = owner_foo; pipe->driving_tap = tap; pipe->parent_path = strdup(parent_path); diff --git a/src/til_stream.h b/src/til_stream.h index 560cc05..6424537 100644 --- a/src/til_stream.h +++ b/src/til_stream.h @@ -29,12 +29,12 @@ til_stream_t * til_stream_new(void); til_stream_t * til_stream_free(til_stream_t *stream); /* bare interface for non-module-context owned taps */ -int til_stream_tap(til_stream_t *stream, const void *tap_owner, const char *parent_path, uint32_t parent_hash, const til_tap_t *tap); +int til_stream_tap(til_stream_t *stream, const void *owner, const void *owner_foo, const char *parent_path, uint32_t parent_hash, const til_tap_t *tap); /* convenience helper for use within modules */ -static inline int til_stream_tap_context(til_stream_t *stream, const til_module_context_t *module_context, const til_tap_t *tap) +static inline int til_stream_tap_context(til_stream_t *stream, const til_module_context_t *module_context, const void *owner_foo, const til_tap_t *tap) { - return til_stream_tap(stream, module_context, module_context->path, module_context->path_hash, tap); + return til_stream_tap(stream, module_context, owner_foo, module_context->path, module_context->path_hash, tap); } void til_stream_untap_owner(til_stream_t *stream, const void *owner); -- cgit v1.2.3