From 5bdd9be52b3cc0d1caa37860b52ad13594213e6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Andr=C3=A9=20Santoni?= Date: Sun, 17 Apr 2016 02:50:17 +0700 Subject: [PATCH 1/3] (XMB) Refactor ribbon init --- menu/drivers/xmb.c | 69 ++++++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 37a696c91b..fdce3cb1c2 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -1510,40 +1510,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, static void xmb_blend_begin(void) { -#ifdef XMB_RIBBON_ENABLE - unsigned r, c; - unsigned i = 0; - const unsigned ribbon_rows = 16; - const unsigned ribbon_columns = 32; -#endif - menu_display_ctl(MENU_DISPLAY_CTL_BLEND_BEGIN, NULL); - -#ifdef XMB_RIBBON_ENABLE - /* Set up vertices */ - for (r = 0; r < ribbon_rows; ++r) - { - for (c = 0; c < ribbon_columns; ++c) - { - int index = r * ribbon_columns + c; - ribbon_verts[3*index + 0] = ((float) c)/15.0f - 1.0; - ribbon_verts[3*index + 1] = 0.0f; - ribbon_verts[3*index + 2] = ((float) r)/8.0f - 1.0; - } - } - - for (r = 0; r < ribbon_rows - 1; ++r) - { - ribbon_idx[i++] = r * ribbon_columns; - - for (c = 0; c < ribbon_columns; ++c) - { - ribbon_idx[i++] = r * ribbon_columns + c; - ribbon_idx[i++] = (r + 1) * ribbon_columns + c; - } - ribbon_idx[i++] = (r + 1) * ribbon_columns + (ribbon_columns - 1); - } -#endif } static void xmb_blend_end(void) @@ -2356,6 +2323,41 @@ static void xmb_layout(xmb_handle_t *xmb) } } + +static void xmb_init_ribbon() +{ +#ifdef XMB_RIBBON_ENABLE + unsigned r, c; + unsigned i = 0; + const unsigned ribbon_rows = 16; + const unsigned ribbon_columns = 32; + + /* Set up vertices */ + for (r = 0; r < ribbon_rows; ++r) + { + for (c = 0; c < ribbon_columns; ++c) + { + int index = r * ribbon_columns + c; + ribbon_verts[3*index + 0] = ((float) c)/15.0f - 1.0; + ribbon_verts[3*index + 1] = 0.0f; + ribbon_verts[3*index + 2] = ((float) r)/8.0f - 1.0; + } + } + + for (r = 0; r < ribbon_rows - 1; ++r) + { + ribbon_idx[i++] = r * ribbon_columns; + + for (c = 0; c < ribbon_columns; ++c) + { + ribbon_idx[i++] = r * ribbon_columns + c; + ribbon_idx[i++] = (r + 1) * ribbon_columns + c; + } + ribbon_idx[i++] = (r + 1) * ribbon_columns + (ribbon_columns - 1); + } +#endif +} + static void *xmb_init(void **userdata) { unsigned width, height; @@ -2408,6 +2410,7 @@ static void *xmb_init(void **userdata) xmb_init_horizontal_list(xmb); xmb_font(xmb); + xmb_init_ribbon(); return menu; From 1b0381ca028769b99bf0671ccab04ba01f0f077c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Andr=C3=A9=20Santoni?= Date: Sun, 17 Apr 2016 02:54:00 +0700 Subject: [PATCH 2/3] (XMB) Slower the ribbon --- menu/drivers/xmb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index fdce3cb1c2..ccb4d9da42 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -1931,7 +1931,7 @@ static void xmb_draw_ribbon(menu_display_ctx_draw_t *draw) video_shader_driver_ctl(SHADER_CTL_USE, &shader_info); - t += 0.02; + t += 0.01; uniform_param.lookup.enable = true; uniform_param.lookup.idx = VIDEO_SHADER_MENU; From 8317c5849c4ba9f6c73e4255396588e6f93ac60e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Andr=C3=A9=20Santoni?= Date: Sun, 17 Apr 2016 03:06:20 +0700 Subject: [PATCH 3/3] (XMB) Draw gradient --- menu/drivers/xmb.c | 16 +++++++++------- menu/menu_display.c | 40 ++++++++++++++++++++++++++++++++++++++++ menu/menu_display.h | 1 + 3 files changed, 50 insertions(+), 7 deletions(-) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index ccb4d9da42..d3132157c7 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -1909,18 +1909,20 @@ static void xmb_draw_ribbon(menu_display_ctx_draw_t *draw) video_shader_ctx_info_t shader_info; math_matrix_4x4 mymat; struct gfx_coords coords; - float bg[16] = { - 1, 0, 0.1, 1, - 1, 0.1, 0, 1, - 0.05, 0, 0.05, 1, - 0.05, 0, 0.05, 1 + float white[16] = { + 1, 1, 1, 1, + 1, 1, 1, 1, + 1, 1, 1, 1, + 1, 1, 1, 1, }; - coords.vertices = draw->vertex_count; - coords.color = bg; + menu_display_ctl(MENU_DISPLAY_CTL_DRAW_GRADIENT, draw); xmb_blend_begin(); + coords.vertices = draw->vertex_count; + coords.color = white; + draw->x = 0; draw->y = 0; draw->coords = &coords; diff --git a/menu/menu_display.c b/menu/menu_display.c index 9a4390220f..713c61fc16 100644 --- a/menu/menu_display.c +++ b/menu/menu_display.c @@ -497,6 +497,46 @@ bool menu_display_ctl(enum menu_display_ctl_state state, void *data) menu_disp->draw(draw); } break; + case MENU_DISPLAY_CTL_DRAW_GRADIENT: + { + struct gfx_coords coords; + const float *new_vertex = NULL; + const float *new_tex_coord = NULL; + menu_display_ctx_draw_t *draw = (menu_display_ctx_draw_t*)data; + float bg[16] = { + 1, 0, 0.1, 1, + 1, 0.1, 0, 1, + 0.05, 0, 0.05, 1, + 0.05, 0, 0.05, 1 + }; + + if (!menu_disp || !draw) + return false; + + new_vertex = draw->vertex; + new_tex_coord = draw->tex_coord; + + if (!new_vertex) + new_vertex = menu_disp->get_default_vertices(); + if (!new_tex_coord) + new_tex_coord = menu_disp->get_default_tex_coords(); + + coords.vertices = draw->vertex_count; + coords.vertex = new_vertex; + coords.tex_coord = new_tex_coord; + coords.lut_tex_coord = new_tex_coord; + coords.color = bg; + + draw->x = 0; + draw->y = 0; + draw->coords = &coords; + draw->texture = menu_display_white_texture; + + draw->matrix_data = (math_matrix_4x4*)menu_disp->get_default_mvp(); + + menu_disp->draw(draw); + } + break; case MENU_DISPLAY_CTL_ROTATE_Z: { math_matrix_4x4 matrix_rotated, matrix_scaled; diff --git a/menu/menu_display.h b/menu/menu_display.h index 9c79e71660..d5fd7dd419 100644 --- a/menu/menu_display.h +++ b/menu/menu_display.h @@ -75,6 +75,7 @@ enum menu_display_ctl_state MENU_DISPLAY_CTL_CLEAR_COLOR, MENU_DISPLAY_CTL_DRAW, MENU_DISPLAY_CTL_DRAW_BG, + MENU_DISPLAY_CTL_DRAW_GRADIENT, MENU_DISPLAY_CTL_ROTATE_Z, MENU_DISPLAY_CTL_TEX_COORDS_GET, MENU_DISPLAY_CTL_TIMEDATE