From 422c6d8984f2658f5f883dc0113deb30e538f3b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Andr=C3=A9=20Santoni?= Date: Sat, 23 Apr 2016 05:24:44 +0700 Subject: [PATCH] (XMB) Ribbon lighting + readability tweaks --- .../pipeline_xmb_ribbon.glsl.frag.h | 12 ++++++++-- .../pipeline_xmb_ribbon.glsl.vert.h | 22 ++++++++++++++++--- menu/drivers/xmb.c | 18 +++++++-------- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/gfx/drivers/gl_shaders/pipeline_xmb_ribbon.glsl.frag.h b/gfx/drivers/gl_shaders/pipeline_xmb_ribbon.glsl.frag.h index 1a95345b31..28ee08f113 100644 --- a/gfx/drivers/gl_shaders/pipeline_xmb_ribbon.glsl.frag.h +++ b/gfx/drivers/gl_shaders/pipeline_xmb_ribbon.glsl.frag.h @@ -3,7 +3,15 @@ static const char *stock_fragment_xmb = "precision mediump float;\n" "#endif\n" "uniform float time;\n" + "varying vec3 fragVertexEc;\n" + "vec3 up = vec3(0, 0, 1);\n" "void main()\n" "{\n" - " gl_FragColor = vec4(1.0, 1.0, 1.0, 0.05);\n" - "}\n"; + " vec3 X = dFdx(fragVertexEc);\n" + " vec3 Y = dFdy(fragVertexEc);\n" + " vec3 normal=normalize(cross(X,Y));\n" + " float c = (1.0 - dot(normal, up));\n" + " c = (1.0 - cos(c*c))/3.0;\n" + //" c = pow(c, 4 );\n" + " gl_FragColor = vec4(1.0, 1.0, 1.0, c);\n" + "}\n"; \ No newline at end of file diff --git a/gfx/drivers/gl_shaders/pipeline_xmb_ribbon.glsl.vert.h b/gfx/drivers/gl_shaders/pipeline_xmb_ribbon.glsl.vert.h index bc9f80fda7..7e31f15462 100644 --- a/gfx/drivers/gl_shaders/pipeline_xmb_ribbon.glsl.vert.h +++ b/gfx/drivers/gl_shaders/pipeline_xmb_ribbon.glsl.vert.h @@ -8,6 +8,7 @@ static const char *stock_vertex_xmb = "#endif\n" "COMPAT_ATTRIBUTE vec3 VertexCoord;\n" "uniform float time;\n" + "COMPAT_VARYING vec3 fragVertexEc;\n" "float iqhash( float n )\n" "{\n" " return fract(sin(n)*43758.5453);\n" @@ -23,12 +24,27 @@ static const char *stock_vertex_xmb = " mix(mix( iqhash(n+113.0), iqhash(n+114.0),f.x),\n" " mix( iqhash(n+170.0), iqhash(n+171.0),f.x),f.y),f.z);\n" "}\n" + "float noise2( vec3 x )\n" + "{\n" + " return cos((x.z*1.0)*2.0);" + "}\n" "void main()\n" "{\n" " vec3 v = vec3(VertexCoord.x, 0.0, VertexCoord.y);\n" " vec3 v2 = v;\n" - " v2.x = v2.x + time/2.0;\n" - " v2.z = v.z * 3.0;\n" - " v.y = -cos((v.x+v.z/3.0+time)*2.0)/10.0 - noise(v2.xyz)/4.0;\n" + " vec3 v3 = v;\n" + + " v.y = noise2(v2)/6.0;\n" + + " v3.x = v3.x + time/5.0;\n" + " v3.x = v3.x / 2.0;\n" + + " v3.z = v3.z + time/10.0;\n" + " v3.y = v3.y + time/100.0;\n" + + " v.z = v.z + noise(v3*7.0)/15.0;\n" + " v.y = v.y + noise(v3*7.0)/15.0 + cos(v.x*2.0-time/5.0)/5.0 - 0.3;\n" + " gl_Position = vec4(v, 1.0);\n" + " fragVertexEc = gl_Position.xyz;\n" "}\n"; diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 2d24d46543..a9cf93f9a1 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -48,8 +48,8 @@ #include "../../tasks/tasks_internal.h" -#define XMB_RIBBON_ROWS 16 -#define XMB_RIBBON_COLS 32 +#define XMB_RIBBON_ROWS 64 +#define XMB_RIBBON_COLS 64 #define XMB_RIBBON_VERTICES 2*XMB_RIBBON_COLS*XMB_RIBBON_ROWS-2*XMB_RIBBON_COLS #ifndef XMB_DELAY @@ -67,9 +67,9 @@ #define XMB_ITEM_PASSIVE_ZOOM 0.5 #define XMB_CATEGORIES_ACTIVE_ALPHA 1.0 -#define XMB_CATEGORIES_PASSIVE_ALPHA 0.5 +#define XMB_CATEGORIES_PASSIVE_ALPHA 0.85 #define XMB_ITEM_ACTIVE_ALPHA 1.0 -#define XMB_ITEM_PASSIVE_ALPHA 0.5 +#define XMB_ITEM_PASSIVE_ALPHA 0.85 typedef struct { @@ -495,7 +495,7 @@ static void xmb_draw_icon( for (i = 0; i < 16; i++) shadow[i] = 0; - menu_display_set_alpha(shadow, color[3] / 4); + menu_display_set_alpha(shadow, color[3] * 0.35f); coords.color = shadow; draw.x = x + 2; @@ -585,7 +585,7 @@ static void xmb_draw_text(xmb_handle_t *xmb, { params.drop_x = 2.0f; params.drop_y = -2.0f; - params.drop_alpha = 0.25f; + params.drop_alpha = 0.35f; } menu_display_draw_text(str, width, height, ¶ms); @@ -1043,7 +1043,7 @@ static void xmb_list_switch_new(xmb_handle_t *xmb, { xmb_node_t *node = (xmb_node_t*) menu_entries_get_userdata_at_offset(list, i); - float ia = 0.5; + float ia = XMB_ITEM_PASSIVE_ALPHA; if (!node) continue; @@ -2338,8 +2338,8 @@ static void xmb_layout(xmb_handle_t *xmb) static void xmb_ribbon_set_vertex(float *ribbon_verts, unsigned idx, unsigned row, unsigned col) { - ribbon_verts[idx++] = ((float)col) / 15.5f - 1.0f; - ribbon_verts[idx++] = ((float)row) / 7.5f - 1.0f; + ribbon_verts[idx++] = ((float)col) / (XMB_RIBBON_COLS-1) * 2.0f - 1.0f; + ribbon_verts[idx++] = ((float)row) / XMB_RIBBON_ROWS * 2.0f - 1.0f; } static void xmb_init_ribbon(xmb_handle_t * xmb)