mirror of
https://github.com/libretro/RetroArch
synced 2025-04-10 06:44:27 +00:00
(Overlay) Back to the drawing board
This commit is contained in:
parent
bb682d1ed4
commit
34622f63ed
@ -451,15 +451,34 @@ static bool input_overlay_resolve_targets(struct overlay *ol,
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool input_overlay_load_overlays_resolve_iterate(input_overlay_t *ol)
|
||||
bool input_overlay_load_overlays_resolve_iterate(input_overlay_t *ol)
|
||||
{
|
||||
bool not_done = true;
|
||||
|
||||
if (!ol)
|
||||
return false;
|
||||
|
||||
not_done = ol->pos < ol->size;
|
||||
|
||||
if (!not_done)
|
||||
{
|
||||
ol->state = OVERLAY_STATUS_DEFERRED_DONE;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!input_overlay_resolve_targets(ol->overlays, ol->pos, ol->size))
|
||||
return false;
|
||||
{
|
||||
RARCH_ERR("[Overlay]: Failed to resolve next targets.\n");
|
||||
goto error;
|
||||
}
|
||||
|
||||
ol->pos += 1;
|
||||
|
||||
return true;
|
||||
error:
|
||||
ol->state = OVERLAY_STATUS_DEFERRED_ERROR;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -470,8 +489,8 @@ static bool input_overlay_load_overlay_image_done(struct overlay *overlay)
|
||||
|
||||
overlay->pos = 0;
|
||||
/* Divide iteration steps by half of total descs if size is even,
|
||||
* otherwise default to 1. */
|
||||
overlay->pos_increment = (overlay->size / 2) ? (overlay->size / 2) : 1;
|
||||
* otherwise default to 8 (arbitrary value for now to speed things up). */
|
||||
overlay->pos_increment = (overlay->size / 2) ? (overlay->size / 2) : 8;
|
||||
|
||||
#if 0
|
||||
RARCH_LOG("pos increment: %u\n", overlay->pos_increment);
|
||||
@ -480,40 +499,6 @@ static bool input_overlay_load_overlay_image_done(struct overlay *overlay)
|
||||
return true;
|
||||
}
|
||||
|
||||
static void input_overlay_load_active(input_overlay_t *ol,
|
||||
float opacity)
|
||||
{
|
||||
if (!ol)
|
||||
return;
|
||||
|
||||
ol->iface->load(ol->iface_data, ol->active->load_images,
|
||||
ol->active->load_images_size);
|
||||
|
||||
input_overlay_set_alpha_mod(ol, opacity);
|
||||
input_overlay_set_vertex_geom(ol);
|
||||
ol->iface->full_screen(ol->iface_data, ol->active->full_screen);
|
||||
}
|
||||
|
||||
static bool input_overlay_render_active(input_overlay_t *ol)
|
||||
{
|
||||
if (!ol)
|
||||
return false;
|
||||
|
||||
ol->active = &ol->overlays[0];
|
||||
|
||||
input_overlay_load_active(ol, ol->deferred.opacity);
|
||||
input_overlay_enable(ol, ol->deferred.enable);
|
||||
|
||||
input_overlay_set_alpha_mod(ol, ol->deferred.opacity);
|
||||
input_overlay_set_scale_factor(ol, ol->deferred.scale_factor);
|
||||
ol->next_index = (ol->index + 1) % ol->size;
|
||||
|
||||
ol->state = OVERLAY_STATUS_ALIVE;
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool input_overlay_load_overlays_iterate(input_overlay_t *ol)
|
||||
{
|
||||
bool not_done = true;
|
||||
@ -526,8 +511,7 @@ bool input_overlay_load_overlays_iterate(input_overlay_t *ol)
|
||||
if (!not_done)
|
||||
{
|
||||
ol->pos = 0;
|
||||
ol->state = OVERLAY_STATUS_DEFERRED_DONE;
|
||||
ol->loading_status = OVERLAY_IMAGE_TRANSFER_NONE;
|
||||
ol->state = OVERLAY_STATUS_DEFERRED_LOADING_RESOLVE;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -555,17 +539,8 @@ bool input_overlay_load_overlays_iterate(input_overlay_t *ol)
|
||||
}
|
||||
break;
|
||||
case OVERLAY_IMAGE_TRANSFER_DESC_DONE:
|
||||
if (!input_overlay_load_overlays_resolve_iterate(ol))
|
||||
{
|
||||
RARCH_ERR("[Overlay]: Failed to resolve next targets.\n");
|
||||
goto error;
|
||||
}
|
||||
if (ol->pos == 0)
|
||||
{
|
||||
/* First active overlay, load and render already. */
|
||||
input_overlay_render_active(driver.overlay);
|
||||
}
|
||||
ol->pos += 1;
|
||||
ol->loading_status = OVERLAY_IMAGE_TRANSFER_NONE;
|
||||
break;
|
||||
case OVERLAY_IMAGE_TRANSFER_ERROR:
|
||||
goto error;
|
||||
@ -728,7 +703,39 @@ error:
|
||||
return false;
|
||||
}
|
||||
|
||||
static void input_overlay_load_active(input_overlay_t *ol,
|
||||
float opacity)
|
||||
{
|
||||
if (!ol)
|
||||
return;
|
||||
|
||||
ol->iface->load(ol->iface_data, ol->active->load_images,
|
||||
ol->active->load_images_size);
|
||||
|
||||
input_overlay_set_alpha_mod(ol, opacity);
|
||||
input_overlay_set_vertex_geom(ol);
|
||||
ol->iface->full_screen(ol->iface_data, ol->active->full_screen);
|
||||
}
|
||||
|
||||
bool input_overlay_new_done(input_overlay_t *ol)
|
||||
{
|
||||
if (!ol)
|
||||
return false;
|
||||
|
||||
ol->active = &ol->overlays[0];
|
||||
|
||||
input_overlay_load_active(ol, ol->deferred.opacity);
|
||||
input_overlay_enable(ol, ol->deferred.enable);
|
||||
|
||||
input_overlay_set_alpha_mod(ol, ol->deferred.opacity);
|
||||
input_overlay_set_scale_factor(ol, ol->deferred.scale_factor);
|
||||
ol->next_index = (ol->index + 1) % ol->size;
|
||||
|
||||
ol->state = OVERLAY_STATUS_ALIVE;
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* input_overlay_new:
|
||||
|
@ -75,6 +75,7 @@ enum overlay_status
|
||||
OVERLAY_STATUS_DEFERRED_LOADING_IMAGE,
|
||||
OVERLAY_STATUS_DEFERRED_LOADING_IMAGE_PROCESS,
|
||||
OVERLAY_STATUS_DEFERRED_LOADING,
|
||||
OVERLAY_STATUS_DEFERRED_LOADING_RESOLVE,
|
||||
OVERLAY_STATUS_DEFERRED_DONE,
|
||||
OVERLAY_STATUS_DEFERRED_ERROR,
|
||||
OVERLAY_STATUS_ALIVE,
|
||||
@ -237,6 +238,10 @@ 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);
|
||||
|
||||
bool input_overlay_new_done(input_overlay_t *ol);
|
||||
|
||||
/**
|
||||
* input_overlay_free:
|
||||
* @ol : Overlay handle.
|
||||
@ -333,4 +338,3 @@ void input_overlay_next(input_overlay_t *ol, float opacity);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -888,7 +888,11 @@ void rarch_main_iterate_overlay_state(void)
|
||||
case OVERLAY_STATUS_DEFERRED_LOADING:
|
||||
input_overlay_load_overlays_iterate(driver.overlay);
|
||||
break;
|
||||
case OVERLAY_STATUS_DEFERRED_LOADING_RESOLVE:
|
||||
input_overlay_load_overlays_resolve_iterate(driver.overlay);
|
||||
break;
|
||||
case OVERLAY_STATUS_DEFERRED_DONE:
|
||||
input_overlay_new_done(driver.overlay);
|
||||
break;
|
||||
case OVERLAY_STATUS_DEFERRED_ERROR:
|
||||
input_overlay_free(driver.overlay);
|
||||
|
Loading…
x
Reference in New Issue
Block a user