diff --git a/gfx/video_driver.c b/gfx/video_driver.c index effc8edecf..f865645098 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -2283,11 +2283,27 @@ void video_driver_build_info(video_frame_info_t *video_info) video_info->libretro_running = false; #ifdef HAVE_MENU + video_info->menu_shader_pipeline = settings->menu.xmb.shader_pipeline; + video_info->xmb_theme = settings->menu.xmb.theme; + video_info->xmb_color_theme = settings->menu.xmb.menu_color_theme; + video_info->timedate_enable = settings->menu.timedate_enable; + video_info->battery_level_enable = settings->menu.battery_level_enable; + video_info->xmb_shadows_enable = settings->menu.xmb.shadows_enable; + video_info->xmb_alpha_factor = settings->menu.xmb.alpha_factor; video_info->menu_wallpaper_opacity = settings->menu.wallpaper.opacity; if (!settings->menu.pause_libretro) video_info->libretro_running = (rarch_ctl(RARCH_CTL_IS_INITED, NULL) && !rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL)); +#else + video_info->menu_shader_pipeline = 0; + video_info->xmb_color_theme = 0; + video_info->xmb_theme = 0; + video_info->timedate_enable = false; + video_info->battery_level_enable = false; + video_info->xmb_shadows_enable = false; + video_info->xmb_alpha_factor = 0.0f; + video_info->menu_wallpaper_opacity = 0.0f; #endif video_driver_threaded_unlock(); } diff --git a/gfx/video_driver.h b/gfx/video_driver.h index 5dd0e66cfb..2ff547f48e 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -114,6 +114,15 @@ typedef struct video_frame_info float font_msg_color_b; bool use_rgba; bool libretro_running; + + bool xmb_shadows_enable; + float xmb_alpha_factor; + unsigned xmb_theme; + unsigned xmb_color_theme; + unsigned menu_shader_pipeline; + + bool battery_level_enable; + bool timedate_enable; } video_frame_info_t; /* Optionally implemented interface to poke more diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 7c6c8fc956..e0f4efcc31 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -421,11 +421,9 @@ static const char *xmb_thumbnails_ident(void) return msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OFF); } -static float *xmb_gradient_ident(void) +static float *xmb_gradient_ident(video_frame_info_t *video_info) { - settings_t *settings = config_get_ptr(); - - switch (settings->menu.xmb.menu_color_theme) + switch (video_info->xmb_color_theme) { case XMB_THEME_DARK_PURPLE: return &gradient_dark_purple[0]; @@ -2398,11 +2396,11 @@ static void xmb_render(void *data) menu_animation_ctl(MENU_ANIMATION_CTL_CLEAR_ACTIVE, NULL); } -static bool xmb_shader_pipeline_active(settings_t *settings) +static bool xmb_shader_pipeline_active(video_frame_info_t *video_info) { if (!string_is_equal(menu_driver_ident(), "xmb")) return false; - if (settings->menu.xmb.shader_pipeline == XMB_SHADER_PIPELINE_WALLPAPER) + if (video_info->menu_shader_pipeline == XMB_SHADER_PIPELINE_WALLPAPER) return false; return true; } @@ -2418,7 +2416,6 @@ static void xmb_draw_bg( float *coord_white) { menu_display_ctx_draw_t draw; - settings_t *settings = config_get_ptr(); #if 0 RARCH_LOG("DRAW BG %d %d \n",width,height); @@ -2437,17 +2434,17 @@ static void xmb_draw_bg( draw.vertex_count = 4; draw.prim_type = MENU_DISPLAY_PRIM_TRIANGLESTRIP; draw.pipeline.id = 0; - draw.pipeline.active = xmb_shader_pipeline_active(settings); + draw.pipeline.active = xmb_shader_pipeline_active(video_info); menu_display_blend_begin(); menu_display_set_viewport(video_info->width, video_info->height); #ifdef HAVE_SHADERPIPELINE - if (settings->menu.xmb.shader_pipeline > XMB_SHADER_PIPELINE_WALLPAPER + if (video_info->menu_shader_pipeline > XMB_SHADER_PIPELINE_WALLPAPER && - (settings->menu.xmb.menu_color_theme != XMB_THEME_WALLPAPER)) + (video_info->xmb_color_theme != XMB_THEME_WALLPAPER)) { - draw.color = xmb_gradient_ident(); + draw.color = xmb_gradient_ident(video_info); if (running) menu_display_set_alpha(draw.color, coord_black[3]); @@ -2458,7 +2455,7 @@ static void xmb_draw_bg( draw.pipeline.id = VIDEO_SHADER_MENU_2; - switch (settings->menu.xmb.shader_pipeline) + switch (video_info->menu_shader_pipeline) { case XMB_SHADER_PIPELINE_RIBBON: draw.pipeline.id = VIDEO_SHADER_MENU; @@ -2483,15 +2480,15 @@ static void xmb_draw_bg( { uintptr_t texture = draw.texture; - if (settings->menu.xmb.menu_color_theme != XMB_THEME_WALLPAPER) - draw.color = xmb_gradient_ident(); + if (video_info->xmb_color_theme != XMB_THEME_WALLPAPER) + draw.color = xmb_gradient_ident(video_info); if (running) menu_display_set_alpha(draw.color, coord_black[3]); else menu_display_set_alpha(draw.color, coord_white[3]); - if (settings->menu.xmb.menu_color_theme != XMB_THEME_WALLPAPER) + if (video_info->xmb_color_theme != XMB_THEME_WALLPAPER) menu_display_draw_gradient(&draw, video_info); { @@ -2502,7 +2499,7 @@ static void xmb_draw_bg( if (!running && draw.texture) draw.color = &coord_white[0]; - if (settings->menu.xmb.menu_color_theme == XMB_THEME_WALLPAPER) + if (video_info->xmb_color_theme == XMB_THEME_WALLPAPER) add_opacity = true; menu_display_draw_bg(&draw, video_info, add_opacity); @@ -2567,13 +2564,12 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) bool render_background = false; file_list_t *selection_buf = NULL; file_list_t *menu_stack = NULL; - settings_t *settings = config_get_ptr(); xmb_handle_t *xmb = (xmb_handle_t*)data; if (!xmb) return; - menu_disp_info.shadows_enable = settings->menu.xmb.shadows_enable; + menu_disp_info.shadows_enable = video_info->xmb_shadows_enable; msg[0] = '\0'; title_msg[0] = '\0'; @@ -2593,7 +2589,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) } menu_display_set_alpha(coord_black, MIN( - (float)settings->menu.xmb.alpha_factor/100, xmb->alpha)); + (float)video_info->xmb_alpha_factor/100, xmb->alpha)); menu_display_set_alpha(coord_white, xmb->alpha); xmb_draw_bg( @@ -2637,7 +2633,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) /* Clock image */ menu_display_set_alpha(coord_white, MIN(xmb->alpha, 1.00f)); - if (settings->menu.battery_level_enable) + if (video_info->battery_level_enable) { char msg[12]; static retro_time_t last_time = 0; @@ -2690,34 +2686,34 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) } } - if (settings->menu.timedate_enable && coord_white[3] != 0) - { - int x_pos = 0; - - if (percent_width) - x_pos = percent_width + (xmb->icon.size / 2.5); - - xmb_draw_icon( - menu_disp_info, - xmb->icon.size, - &mymat, - xmb->textures.list[XMB_TEXTURE_CLOCK], - width - xmb->icon.size - x_pos, - xmb->icon.size,width, - height, - 1, - 0, - 1, - &coord_white[0], - xmb->shadow_offset); - } - - if (settings->menu.timedate_enable) + if (video_info->timedate_enable) { menu_display_ctx_datetime_t datetime; char timedate[255]; int x_pos = 0; + if (coord_white[3] != 0) + { + int x_pos = 0; + + if (percent_width) + x_pos = percent_width + (xmb->icon.size / 2.5); + + xmb_draw_icon( + menu_disp_info, + xmb->icon.size, + &mymat, + xmb->textures.list[XMB_TEXTURE_CLOCK], + width - xmb->icon.size - x_pos, + xmb->icon.size,width, + height, + 1, + 0, + 1, + &coord_white[0], + xmb->shadow_offset); + } + timedate[0] = '\0'; datetime.s = timedate;