diff options
Diffstat (limited to 'src/screen')
| -rw-r--r-- | src/screen/screen.c | 12 | ||||
| -rw-r--r-- | src/screen/screen.h | 3 |
2 files changed, 11 insertions, 4 deletions
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); |