diff --git a/input/input_overlay.c b/input/input_overlay.c index 0d5b057962..c01d2c7c6b 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -561,6 +561,38 @@ error: return false; } +bool input_overlay_load_overlays_image_iterate(input_overlay_t *ol) +{ + bool not_done = true; + + if (!ol) + return false; + + not_done = ol->pos < ol->size; + + if (!not_done) + { + ol->pos = 0; + ol->state = OVERLAY_STATUS_DEFERRED_LOADING_RESOLVE; + return true; + } + + if (!input_overlay_load_overlay_image(ol, ol->conf, + ol->overlay_path, &ol->overlays[ol->pos], ol->pos)) + { + RARCH_ERR("[Overlay]: Failed to load overlay image #%u.\n", (unsigned)ol->pos); + goto error; + } + + ol->state = OVERLAY_STATUS_DEFERRED_LOADING; + + return true; +error: + ol->state = OVERLAY_STATUS_DEFERRED_ERROR; + + return false; +} + bool input_overlay_load_overlays_iterate(input_overlay_t *ol) { bool not_done = true; @@ -631,7 +663,7 @@ bool input_overlay_load_overlays(input_overlay_t *ol) ol->size = overlays; ol->pos = 0; - ol->state = OVERLAY_STATUS_DEFERRED_LOADING; + ol->state = OVERLAY_STATUS_DEFERRED_LOADING_IMAGE; return true; diff --git a/input/input_overlay.h b/input/input_overlay.h index f93ba91acf..348e6feec7 100644 --- a/input/input_overlay.h +++ b/input/input_overlay.h @@ -72,6 +72,7 @@ enum overlay_status { OVERLAY_STATUS_NONE = 0, OVERLAY_STATUS_DEFERRED_LOAD, + OVERLAY_STATUS_DEFERRED_LOADING_IMAGE, OVERLAY_STATUS_DEFERRED_LOADING, OVERLAY_STATUS_DEFERRED_LOADING_RESOLVE, OVERLAY_STATUS_DEFERRED_DONE, @@ -182,6 +183,8 @@ input_overlay_t *input_overlay_new(const char *path, bool enable, bool input_overlay_load_overlays(input_overlay_t *ol); +bool input_overlay_load_overlays_image_iterate(input_overlay_t *ol); + bool input_overlay_load_overlays_iterate(input_overlay_t *ol); bool input_overlay_load_overlays_resolve_iterate(input_overlay_t *ol); diff --git a/runloop.c b/runloop.c index 4d6a0b0e01..9765c551d0 100644 --- a/runloop.c +++ b/runloop.c @@ -1024,6 +1024,9 @@ void rarch_main_iterate_overlay_state(void) case OVERLAY_STATUS_DEFERRED_LOAD: input_overlay_load_overlays(driver.overlay); break; + case OVERLAY_STATUS_DEFERRED_LOADING_IMAGE: + input_overlay_load_overlays_image_iterate(driver.overlay); + break; case OVERLAY_STATUS_DEFERRED_LOADING: input_overlay_load_overlays_iterate(driver.overlay); break;