From 4af2d16c06a8a67ab225caa61ccd94df3c572bdc Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Fri, 27 Dec 2024 11:02:38 -0500 Subject: Fix some configurations, add sink loop mode Signed-off-by: Andrew Opalach --- src/screen/screen.c | 12 +++++++++--- src/screen/screen.h | 3 ++- 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'src/screen') diff --git a/src/screen/screen.c b/src/screen/screen.c index 17f4e3b..c323204 100644 --- a/src/screen/screen.c +++ b/src/screen/screen.c @@ -38,13 +38,15 @@ static void resize_callback(void *userdata, s32 width, s32 height) al_array_foreach_ptr(scr->videos, i, video) { camu_view_calculate(&video->view, scr->width, scr->height); } + scr->force_render = true; } static void refresh_callback(void *userdata) { struct camu_screen *scr = (struct camu_screen *)userdata; if (scr->renderer) { - scr->renderer->render(scr->renderer, scr); + // The thread-safety of this is questionable. + scr->renderer->render(scr->renderer, scr, true); } } @@ -512,12 +514,16 @@ bool camu_screen_poll(struct camu_screen *scr, bool block) #endif } -bool camu_screen_tick(struct camu_screen *scr) +bool camu_screen_tick(struct camu_screen *scr, bool *force) { s32 state = al_atomic_load(s32)(&scr->state, AL_ATOMIC_RELAXED); al_assert(state != CAMU_SCREEN_STOPPED); bool paused = state == CAMU_SCREEN_PAUSED; - return camu_screen_poll(scr, paused) || !paused; + bool render = camu_screen_poll(scr, paused) || !paused; + render |= scr->force_render; + *force = scr->force_render; + scr->force_render = false; + return render; } void camu_screen_wake(struct camu_screen *scr) diff --git a/src/screen/screen.h b/src/screen/screen.h index 80f888c..d567521 100644 --- a/src/screen/screen.h +++ b/src/screen/screen.h @@ -56,6 +56,7 @@ struct camu_screen { struct nn_thread thread; #endif struct camu_renderer *renderer; + bool force_render; s32 width; s32 height; u64 last_click_ts; @@ -83,6 +84,6 @@ void camu_screen_clear(struct camu_screen *scr); #endif void camu_screen_set_state(struct camu_screen *scr, s32 state); bool camu_screen_poll(struct camu_screen *scr, bool block); -bool camu_screen_tick(struct camu_screen *scr); +bool camu_screen_tick(struct camu_screen *scr, bool *force); void camu_screen_wake(struct camu_screen *scr); void camu_screen_close(struct camu_screen *scr); -- cgit v1.2.3-101-g0448