summaryrefslogtreecommitdiff
path: root/src/screen
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2024-12-27 11:02:38 -0500
committerAndrew Opalach <andrew@akon.city> 2024-12-27 11:02:38 -0500
commit4af2d16c06a8a67ab225caa61ccd94df3c572bdc (patch)
tree6f5b364ea409c93aa9f0b795f252ac78c7d833f9 /src/screen
parent9026e7f49f11e920eac666bd4159ec459b979623 (diff)
downloadcamu-4af2d16c06a8a67ab225caa61ccd94df3c572bdc.tar.gz
camu-4af2d16c06a8a67ab225caa61ccd94df3c572bdc.tar.bz2
camu-4af2d16c06a8a67ab225caa61ccd94df3c572bdc.zip
Fix some configurations, add sink loop mode
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/screen')
-rw-r--r--src/screen/screen.c12
-rw-r--r--src/screen/screen.h3
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);