Merge pull request #2866 from lakkatv/master

XMB ribbon improvements
This commit is contained in:
Twinaphex 2016-04-16 22:09:29 +02:00
commit e1512cc473
3 changed files with 87 additions and 41 deletions

View File

@ -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)
@ -1942,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;
@ -1964,7 +1933,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;
@ -2356,6 +2325,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 +2412,7 @@ static void *xmb_init(void **userdata)
xmb_init_horizontal_list(xmb);
xmb_font(xmb);
xmb_init_ribbon();
return menu;

View File

@ -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;

View File

@ -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