diff --git a/config.def.h b/config.def.h index 9ad699b427..f3e767e259 100644 --- a/config.def.h +++ b/config.def.h @@ -766,7 +766,7 @@ #define DEFAULT_XMB_TITLE_MARGIN 5 #define DEFAULT_XMB_TITLE_MARGIN_HORIZONTAL_OFFSET 0 #define MAXIMUM_XMB_TITLE_MARGIN 12 -#define DEFAULT_XMB_ALPHA_FACTOR 75 +#define DEFAULT_XMB_ALPHA_FACTOR 90 #define DEFAULT_MENU_FONT_COLOR_RED 255 #define DEFAULT_MENU_FONT_COLOR_GREEN 255 diff --git a/gfx/drivers/d3d10.c b/gfx/drivers/d3d10.c index c3bb76068b..c0f1ceeabe 100644 --- a/gfx/drivers/d3d10.c +++ b/gfx/drivers/d3d10.c @@ -1897,7 +1897,7 @@ static void *d3d10_gfx_init(const video_info_t* video, d3d10->device->lpVtbl->CreateBlendState(d3d10->device, &blend_desc, &d3d10->blend_enable); - blend_desc.SrcBlend = D3D10_BLEND_ONE; + blend_desc.SrcBlend = D3D10_BLEND_DEST_COLOR; blend_desc.DestBlend = D3D10_BLEND_ONE; d3d10->device->lpVtbl->CreateBlendState(d3d10->device, &blend_desc, &d3d10->blend_pipeline); diff --git a/gfx/drivers/d3d11.c b/gfx/drivers/d3d11.c index 6701be2c0a..ac40f4f671 100644 --- a/gfx/drivers/d3d11.c +++ b/gfx/drivers/d3d11.c @@ -2512,9 +2512,10 @@ static void *d3d11_gfx_init(const video_info_t* video, blend_desc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_INV_SRC_ALPHA; blend_desc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; blend_desc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; - d3d11->device->lpVtbl->CreateBlendState(d3d11->device, &blend_desc, &d3d11->blend_enable); + d3d11->device->lpVtbl->CreateBlendState(d3d11->device, &blend_desc, + &d3d11->blend_enable); - blend_desc.RenderTarget[0].SrcBlend = D3D11_BLEND_ONE; + blend_desc.RenderTarget[0].SrcBlend = D3D11_BLEND_DEST_COLOR; blend_desc.RenderTarget[0].DestBlend = D3D11_BLEND_ONE; d3d11->device->lpVtbl->CreateBlendState(d3d11->device, &blend_desc, &d3d11->blend_pipeline); diff --git a/gfx/drivers/d3d12.c b/gfx/drivers/d3d12.c index 6508d726e2..d4da45c4ea 100644 --- a/gfx/drivers/d3d12.c +++ b/gfx/drivers/d3d12.c @@ -2035,7 +2035,7 @@ static bool d3d12_gfx_init_pipelines(d3d12_video_t* d3d12) D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, }; - desc.BlendState.RenderTarget[0].SrcBlend = D3D12_BLEND_ONE; + desc.BlendState.RenderTarget[0].SrcBlend = D3D12_BLEND_DEST_COLOR; desc.BlendState.RenderTarget[0].DestBlend = D3D12_BLEND_ONE; desc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; desc.InputLayout.pInputElementDescs = inputElementDesc; diff --git a/gfx/drivers/gl2.c b/gfx/drivers/gl2.c index 4c97275a0e..fc6b85853c 100644 --- a/gfx/drivers/gl2.c +++ b/gfx/drivers/gl2.c @@ -556,7 +556,7 @@ static void gfx_display_gl2_draw_pipeline( { case VIDEO_SHADER_MENU: case VIDEO_SHADER_MENU_2: - glBlendFunc(GL_ONE, GL_ONE); + glBlendFunc(GL_DST_COLOR, GL_ONE); break; default: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); diff --git a/gfx/drivers/gl3.c b/gfx/drivers/gl3.c index bd60ab796d..600028b558 100644 --- a/gfx/drivers/gl3.c +++ b/gfx/drivers/gl3.c @@ -240,7 +240,7 @@ static void gfx_display_gl3_draw(gfx_display_ctx_draw_t *draw, { case VIDEO_SHADER_MENU: case VIDEO_SHADER_MENU_2: - glBlendFunc(GL_ONE, GL_ONE); + glBlendFunc(GL_DST_COLOR, GL_ONE); break; default: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); diff --git a/gfx/drivers/vulkan.c b/gfx/drivers/vulkan.c index 96b479c96e..e8199708bf 100644 --- a/gfx/drivers/vulkan.c +++ b/gfx/drivers/vulkan.c @@ -2454,7 +2454,7 @@ static void vulkan_init_pipelines(vk_t *vk) { case 0: case 1: - blend_attachment.srcColorBlendFactor = VK_BLEND_FACTOR_ONE; + blend_attachment.srcColorBlendFactor = VK_BLEND_FACTOR_DST_COLOR; blend_attachment.dstColorBlendFactor = VK_BLEND_FACTOR_ONE; break; default: diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index da6fe65d5b..bef8dd23fb 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -11299,7 +11299,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_XMB_MENU_COLOR_THEME, - "Select a different background color gradient theme." + "Select a different background color theme." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_XMB_VERTICAL_THUMBNAILS, @@ -11462,7 +11462,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_PLAIN, - "Plain" + "Background Image" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_UNDERSEA, @@ -11668,7 +11668,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_MATERIALUI_MENU_COLOR_THEME, - "Select a different background color gradient theme." + "Select a different background color theme." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_TRANSITION_ANIMATION, diff --git a/menu/cbs/menu_cbs_scan.c b/menu/cbs/menu_cbs_scan.c index 6dbfb16cb6..ca17949f16 100644 --- a/menu/cbs/menu_cbs_scan.c +++ b/menu/cbs/menu_cbs_scan.c @@ -254,6 +254,19 @@ static int action_scan_video_font_path(const char *path, return 0; } +#ifdef HAVE_XMB +static int action_scan_video_xmb_font(const char *path, + const char *label, unsigned type, size_t idx) +{ + settings_t *settings = config_get_ptr(); + + strlcpy(settings->paths.path_menu_xmb_font, "null", sizeof(settings->paths.path_menu_xmb_font)); + command_event(CMD_EVENT_REINIT, NULL); + + return 0; +} +#endif + static int menu_cbs_init_bind_scan_compare_type(menu_file_list_cbs_t *cbs, unsigned type) { @@ -312,6 +325,13 @@ int menu_cbs_init_bind_scan(menu_file_list_cbs_t *cbs, BIND_ACTION_SCAN(cbs, action_scan_video_font_path); return 0; } +#ifdef HAVE_XMB + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_XMB_FONT))) + { + BIND_ACTION_SCAN(cbs, action_scan_video_xmb_font); + return 0; + } +#endif break; default: case ST_NONE: diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 49b55e05a6..b9b2b9420b 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -690,30 +690,30 @@ static float *xmb_gradient_ident(unsigned xmb_color_theme) }; static float gradient_dark[16] = { - 0.1, 0.1, 0.1, 1.00, - 0.1, 0.1, 0.1, 1.00, - 0.0, 0.0, 0.0, 1.00, - 0.0, 0.0, 0.0, 1.00, + 0.05, 0.05, 0.05, 1.00, + 0.05, 0.05, 0.05, 1.00, + 0.05, 0.05, 0.05, 1.00, + 0.05, 0.05, 0.05, 1.00, }; static float gradient_light[16] = { - 1.0, 1.0, 1.0, 1.00, - 1.0, 1.0, 1.0, 1.00, - 1.0, 1.0, 1.0, 1.00, - 1.0, 1.0, 1.0, 1.00, + 0.5, 0.5, 0.5, 1.00, + 0.5, 0.5, 0.5, 1.00, + 0.5, 0.5, 0.5, 1.00, + 0.5, 0.5, 0.5, 1.00, }; static float gradient_morning_blue[16] = { 221/255.0, 241/255.0, 254/255.0, 1.00, 135/255.0, 206/255.0, 250/255.0, 1.00, - 1.0, 1.0, 1.0, 1.00, + 0.7, 0.7, 0.7, 1.00, 170/255.0, 200/255.0, 252/255.0, 1.00, }; static float gradient_sunbeam[16] = { 20/255.0, 13/255.0, 20/255.0, 1.0, 30/255.0, 72/255.0, 114/255.0, 1.0, - 1.0, 1.0, 1.0, 1.00, + 0.7, 0.7, 0.7, 1.00, 0.1, 0.0, 0.1, 1.00, }; @@ -5055,109 +5055,78 @@ static void xmb_draw_bg( draw.pipeline_id = 0; draw.pipeline_active = (menu_shader_pipeline == XMB_SHADER_PIPELINE_WALLPAPER) ? false : true; + if (!video_width || !video_height) + return; + if (dispctx->blend_begin) dispctx->blend_begin(userdata); -#ifdef HAVE_SHADERPIPELINE - if (menu_shader_pipeline > XMB_SHADER_PIPELINE_WALLPAPER - && - (xmb_color_theme != XMB_THEME_WALLPAPER)) + /* Draw background wallpaper */ + if (xmb_color_theme == XMB_THEME_WALLPAPER) { - draw.color = xmb_gradient_ident(xmb_color_theme); + if (draw.texture) + draw.color = &coord_white[0]; - if (libretro_running) - gfx_display_set_alpha(draw.color, coord_black[3]); - else - gfx_display_set_alpha(draw.color, coord_white[3]); + gfx_display_set_alpha(draw.color, coord_white[3]); + gfx_display_draw_bg(p_disp, &draw, userdata, true, menu_wallpaper_opacity); - /* Draw gradient */ - draw.texture = 0; - draw.x = 0; - draw.y = 0; + if (dispctx->draw) + dispctx->draw(&draw, userdata, video_width, video_height); + } + /* Draw empty color theme gradient */ + else + { + draw.color = xmb_gradient_ident(xmb_color_theme); + draw.texture = 0; - gfx_display_draw_bg(p_disp, &draw, userdata, false, - menu_wallpaper_opacity); - if (draw.height > 0 && draw.width > 0) - if (dispctx->draw) - dispctx->draw(&draw, userdata, video_width, video_height); + gfx_display_set_alpha(draw.color, coord_white[3]); + gfx_display_draw_bg(p_disp, &draw, userdata, true, alpha); - draw.pipeline_id = VIDEO_SHADER_MENU_2; + if (dispctx && dispctx->draw) + dispctx->draw(&draw, userdata, video_width, video_height); + } +#ifdef HAVE_SHADERPIPELINE + /* Draw pipeline */ + if (menu_shader_pipeline > XMB_SHADER_PIPELINE_WALLPAPER) + { switch (menu_shader_pipeline) { + default: + case XMB_SHADER_PIPELINE_WALLPAPER: + draw.pipeline_id = VIDEO_SHADER_STOCK_BLEND; + break; case XMB_SHADER_PIPELINE_RIBBON: - draw.pipeline_id = VIDEO_SHADER_MENU; + draw.pipeline_id = VIDEO_SHADER_MENU; + break; + case XMB_SHADER_PIPELINE_SIMPLE_RIBBON: + draw.pipeline_id = VIDEO_SHADER_MENU_2; break; #if !defined(VITA) case XMB_SHADER_PIPELINE_SIMPLE_SNOW: - draw.pipeline_id = VIDEO_SHADER_MENU_3; + draw.pipeline_id = VIDEO_SHADER_MENU_3; break; case XMB_SHADER_PIPELINE_SNOW: - draw.pipeline_id = VIDEO_SHADER_MENU_4; + draw.pipeline_id = VIDEO_SHADER_MENU_4; break; case XMB_SHADER_PIPELINE_BOKEH: - draw.pipeline_id = VIDEO_SHADER_MENU_5; + draw.pipeline_id = VIDEO_SHADER_MENU_5; break; case XMB_SHADER_PIPELINE_SNOWFLAKE: - draw.pipeline_id = VIDEO_SHADER_MENU_6; + draw.pipeline_id = VIDEO_SHADER_MENU_6; break; #endif - default: - break; } if (dispctx->draw_pipeline) dispctx->draw_pipeline(&draw, p_disp, userdata, video_width, video_height); - } - else -#endif - { - uintptr_t texture = draw.texture; - if (xmb_color_theme != XMB_THEME_WALLPAPER) - draw.color = xmb_gradient_ident(xmb_color_theme); - - if (libretro_running) - gfx_display_set_alpha(draw.color, coord_black[3]); - else - gfx_display_set_alpha(draw.color, coord_white[3]); - - if (xmb_color_theme != XMB_THEME_WALLPAPER) - { - /* Draw gradient */ - draw.texture = 0; - draw.x = 0; - draw.y = 0; - - gfx_display_draw_bg(p_disp, &draw, userdata, true, - menu_wallpaper_opacity); - if (draw.height > 0 && draw.width > 0) - if (dispctx && dispctx->draw) - dispctx->draw(&draw, userdata, video_width, video_height); - } - - { - bool add_opacity = false; - - draw.texture = texture; - gfx_display_set_alpha(draw.color, coord_white[3]); - - if (draw.texture) - draw.color = &coord_white[0]; - - if ( libretro_running - || xmb_color_theme == XMB_THEME_WALLPAPER) - add_opacity = true; - - gfx_display_draw_bg(p_disp, &draw, userdata, - add_opacity, menu_wallpaper_opacity); - } - } - - if (dispctx->draw) - if (draw.height > 0 && draw.width > 0) + if (dispctx->draw) dispctx->draw(&draw, userdata, video_width, video_height); + } +#endif + if (dispctx->blend_end) dispctx->blend_end(userdata); } @@ -5767,7 +5736,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) xmb_color_theme, menu_wallpaper_opacity, libretro_running, - xmb->alpha, + xmb_alpha_factor / 100, xmb->textures.bg, xmb_coord_black, xmb_coord_white); @@ -6451,9 +6420,9 @@ static void xmb_layout_ps3(xmb_handle_t *xmb, int width) xmb->items_active_alpha = 1.0; xmb->items_passive_alpha = 0.85; - xmb->shadow_offset = 2.0; - if (scale_factor < 1) - xmb->shadow_offset *= scale_factor * 1.5; + xmb->shadow_offset = 3.0 * scale_factor; + if (xmb->shadow_offset < 1.0) + xmb->shadow_offset = 1.0; if (xmb->shadow_offset > 2.0) xmb->shadow_offset = 2.0; @@ -6501,7 +6470,12 @@ static void xmb_layout_psp(xmb_handle_t *xmb, int width) xmb->items_active_alpha = 1.0; xmb->items_passive_alpha = 0.85; - xmb->shadow_offset = 1.0; + xmb->shadow_offset = 3.0 * scale_factor; + if (xmb->shadow_offset < 1.0) + xmb->shadow_offset = 1.0; + if (xmb->shadow_offset > 2.0) + xmb->shadow_offset = 2.0; + xmb->font_size = new_font_size; xmb->font2_size = 22.0 * scale_factor; xmb->cursor_size = 64.0; diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 621882b718..cfe3a26ae6 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -15643,16 +15643,16 @@ static bool setting_append_list( sizeof(settings->paths.path_font), MENU_ENUM_LABEL_VIDEO_FONT_PATH, MENU_ENUM_LABEL_VALUE_VIDEO_FONT_PATH, - "", + settings->paths.directory_assets, &group_info, &subgroup_info, parent_group, general_write_handler, general_read_handler); + (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_video_font_path; + (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_FONT_SELECTOR; MENU_SETTINGS_LIST_CURRENT_ADD_VALUES(list, list_info, "ttf"); MENU_SETTINGS_LIST_CURRENT_ADD_CMD(list, list_info, CMD_EVENT_REINIT); - (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_FONT_SELECTOR; - (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_video_font_path; CONFIG_FLOAT( list, list_info, @@ -17603,10 +17603,11 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); - MENU_SETTINGS_LIST_CURRENT_ADD_CMD(list, list_info, CMD_EVENT_REINIT); - MENU_SETTINGS_LIST_CURRENT_ADD_VALUES(list, list_info, "ttf"); + (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_video_font_path; (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_FONT_SELECTOR; + MENU_SETTINGS_LIST_CURRENT_ADD_VALUES(list, list_info, "ttf"); + MENU_SETTINGS_LIST_CURRENT_ADD_CMD(list, list_info, CMD_EVENT_REINIT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_UINT( list, list_info,