diff options
| author | 2025-01-17 12:12:01 -0500 | |
|---|---|---|
| committer | 2025-01-17 12:12:01 -0500 | |
| commit | 37684729283f62fd7f1e74bc2b318dc9ad2cb695 (patch) | |
| tree | 2f5be73bf64ac6573e35e8f499515659472a14c9 /src/screen | |
| parent | d1f1eb9b3713a450c0736caad17febae0721af4d (diff) | |
| download | camu-37684729283f62fd7f1e74bc2b318dc9ad2cb695.tar.gz camu-37684729283f62fd7f1e74bc2b318dc9ad2cb695.tar.bz2 camu-37684729283f62fd7f1e74bc2b318dc9ad2cb695.zip | |
Account for dependency changes, platform testing
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/screen')
| -rw-r--r-- | src/screen/screen.c | 20 | ||||
| -rw-r--r-- | src/screen/screen.h | 1 |
2 files changed, 14 insertions, 7 deletions
diff --git a/src/screen/screen.c b/src/screen/screen.c index e76650f..e6f9970 100644 --- a/src/screen/screen.c +++ b/src/screen/screen.c @@ -30,11 +30,16 @@ static void should_close_callback(void *userdata) static void resize_callback(void *userdata, s32 width, s32 height) { struct camu_screen *scr = (struct camu_screen *)userdata; + bool fullscreen = scr->window->fullscreen; if (scr->renderer) { - scr->renderer->resize(scr->renderer, &width, &height); + // Checking if window->fullscreen changed here relies on the order of resize events. + // If it's possible for a different resize to be buffered before the resize + // of the fullscreen toggle, this may not work as expected. + scr->renderer->resize(scr->renderer, &width, &height, fullscreen != scr->last_fullscreen); } scr->width = width; scr->height = height; + scr->last_fullscreen = fullscreen; struct camu_screen_video *video; al_array_foreach_ptr(scr->videos, i, video) { camu_view_calculate(&video->view, scr->width, scr->height); @@ -316,6 +321,7 @@ bool camu_screen_create_window(struct camu_screen *scr, const char *name) } scr->width = scr->window->width; scr->height = scr->window->height; + scr->last_fullscreen = false; #ifdef STELA_EVENT_BUFFER nn_thread_create(&scr->thread, event_thread, scr); #endif @@ -357,7 +363,7 @@ static void add_buffer_internal(struct camu_screen *scr, struct camu_video_buffe if (buf->view.mode != CAMU_VIEW_NONE) { video.view = buf->view; #if 0 - } else if (!al_array_is_empty(scr->videos)) { + } else if (scr->videos.count > 0) { video.view = al_array_last(scr->videos).view; video.view.width = fmt->width; video.view.height = fmt->height; @@ -400,15 +406,15 @@ static void run_queue_internal(struct camu_screen *scr) al_array_foreach(scr->rem_queue, i, buf) { remove_buffer_internal(scr, buf); } - scr->rem_queue.size = 0; + scr->rem_queue.count = 0; // src->videos cannot be touched outside of the add/remove queue context. // For example, reserving space inside of screen_add_buffer() instead // of here would be very wrong. - al_array_reserve(scr->videos, scr->videos.size + scr->add_queue.size); + al_array_reserve(scr->videos, scr->videos.count + scr->add_queue.count); al_array_foreach(scr->add_queue, i, buf) { add_buffer_internal(scr, buf); } - scr->add_queue.size = 0; + scr->add_queue.count = 0; } #endif @@ -426,7 +432,7 @@ void camu_screen_add_buffer(struct camu_screen *scr, struct camu_video_buffer *b al_array_foreach_rev(scr->rem_queue, i, rbuf) { if (rbuf == buf) { al_array_remove_at(scr->rem_queue, i); - bool queue_empty = scr->add_queue.size + scr->rem_queue.size == 0; + bool queue_empty = scr->add_queue.count + scr->rem_queue.count == 0; if (queue_empty) { al_atomic_store(u8)(&scr->queued, 0, AL_ATOMIC_RELAXED); } @@ -457,7 +463,7 @@ void camu_screen_remove_buffer(struct camu_screen *scr, struct camu_video_buffer al_array_foreach_rev(scr->add_queue, i, rbuf) { if (rbuf == buf) { al_array_remove_at(scr->add_queue, i); - bool queue_empty = scr->add_queue.size + scr->rem_queue.size == 0; + bool queue_empty = scr->add_queue.count + scr->rem_queue.count == 0; if (queue_empty) { al_atomic_store(u8)(&scr->queued, 0, AL_ATOMIC_RELAXED); } diff --git a/src/screen/screen.h b/src/screen/screen.h index d567521..c84cfc0 100644 --- a/src/screen/screen.h +++ b/src/screen/screen.h @@ -59,6 +59,7 @@ struct camu_screen { bool force_render; s32 width; s32 height; + bool last_fullscreen; u64 last_click_ts; f64 last_mouse_y; f64 last_mouse_x; |