From 20c1ef83d6691031f99de2db01e147dfe79acd19 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 17 Nov 2016 21:08:50 +0100 Subject: [PATCH] First stab at getting snow shader to work --- gfx/drivers_shader/shader_glsl.c | 11 +++++ gfx/video_shader_driver.h | 1 + menu/drivers/xmb.c | 58 +++++++++++------------ menu/drivers_display/menu_display_d3d.cpp | 1 + menu/drivers_display/menu_display_gl.c | 1 + 5 files changed, 41 insertions(+), 31 deletions(-) diff --git a/gfx/drivers_shader/shader_glsl.c b/gfx/drivers_shader/shader_glsl.c index 8c9121a89f..9dceac8974 100644 --- a/gfx/drivers_shader/shader_glsl.c +++ b/gfx/drivers_shader/shader_glsl.c @@ -964,6 +964,17 @@ static void *gl_glsl_init(void *data, const char *path) &shader_prog_info); gl_glsl_find_uniforms(glsl, 0, glsl->prg[VIDEO_SHADER_MENU_SEC].id, &glsl->uniforms[VIDEO_SHADER_MENU_SEC]); + + shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_snow : stock_vertex_xmb_snow_legacy; + shader_prog_info.fragment = stock_fragment_xmb_snow; + + gl_glsl_compile_program( + glsl, + VIDEO_SHADER_MENU_3, + &glsl->prg[VIDEO_SHADER_MENU_3], + &shader_prog_info); + gl_glsl_find_uniforms(glsl, 0, glsl->prg[VIDEO_SHADER_MENU_3].id, + &glsl->uniforms[VIDEO_SHADER_MENU_3]); #endif gl_glsl_reset_attrib(glsl); diff --git a/gfx/video_shader_driver.h b/gfx/video_shader_driver.h index 6db03e4c0b..1f20ffcbb9 100644 --- a/gfx/video_shader_driver.h +++ b/gfx/video_shader_driver.h @@ -37,6 +37,7 @@ #define VIDEO_SHADER_STOCK_BLEND (GFX_MAX_SHADERS - 1) #define VIDEO_SHADER_MENU (GFX_MAX_SHADERS - 2) #define VIDEO_SHADER_MENU_SEC (GFX_MAX_SHADERS - 3) +#define VIDEO_SHADER_MENU_3 (GFX_MAX_SHADERS - 4) #endif diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 38ad551c5e..62441cad07 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2278,9 +2278,18 @@ static void xmb_draw_bg( menu_display_draw_gradient(&draw); draw.pipeline.id = VIDEO_SHADER_MENU_SEC; - if (settings->menu.xmb.shader_pipeline == XMB_SHADER_PIPELINE_RIBBON || - settings->menu.xmb.shader_pipeline == XMB_SHADER_PIPELINE_SNOW) - draw.pipeline.id = VIDEO_SHADER_MENU; + + switch (settings->menu.xmb.shader_pipeline) + { + case XMB_SHADER_PIPELINE_RIBBON: + draw.pipeline.id = VIDEO_SHADER_MENU; + break; + case XMB_SHADER_PIPELINE_SNOW: + draw.pipeline.id = VIDEO_SHADER_MENU_3; + break; + default: + break; + } menu_display_draw_pipeline(&draw); } @@ -2807,41 +2816,28 @@ static void xmb_init_ribbon(xmb_handle_t * xmb) settings_t *settings = config_get_ptr(); video_coord_array_t *ca = menu_display_get_coords_array(); + vertices_total = XMB_RIBBON_VERTICES; + if (settings->menu.xmb.shader_pipeline == XMB_SHADER_PIPELINE_SNOW) - { - vertices_total = 4; - ribbon_verts = (float*)calloc(2 * vertices_total, sizeof(float)); - - ribbon_verts[0] = -1.0f; - ribbon_verts[1] = -1.0f; - ribbon_verts[2] = 1.0f; - ribbon_verts[3] = -1.0f; - ribbon_verts[4] = -1.0f; - ribbon_verts[5] = 1.0f; - ribbon_verts[6] = 1.0f; - ribbon_verts[7] = 1.0f; - - } + dummy = (float*)calloc(4 * 4, sizeof(float)); else - { - vertices_total = XMB_RIBBON_VERTICES; - ribbon_verts = (float*)calloc(2 * vertices_total, sizeof(float)); + dummy = (float*)calloc(4 * vertices_total, sizeof(float)); - /* Set up vertices */ - for (r = 0; r < XMB_RIBBON_ROWS - 1; r++) + ribbon_verts = (float*)calloc(2 * vertices_total, sizeof(float)); + + + /* Set up vertices */ + for (r = 0; r < XMB_RIBBON_ROWS - 1; r++) + { + for (c = 0; c < XMB_RIBBON_COLS; c++) { - for (c = 0; c < XMB_RIBBON_COLS; c++) - { - col = r % 2 ? XMB_RIBBON_COLS - c - 1 : c; - xmb_ribbon_set_vertex(ribbon_verts, i, r, col); - xmb_ribbon_set_vertex(ribbon_verts, i + 2, r + 1, col); - i += 4; - } + col = r % 2 ? XMB_RIBBON_COLS - c - 1 : c; + xmb_ribbon_set_vertex(ribbon_verts, i, r, col); + xmb_ribbon_set_vertex(ribbon_verts, i + 2, r + 1, col); + i += 4; } } - dummy = (float*)calloc(4 * vertices_total, sizeof(float)); - coords.color = dummy; coords.vertex = ribbon_verts; coords.tex_coord = dummy; diff --git a/menu/drivers_display/menu_display_d3d.cpp b/menu/drivers_display/menu_display_d3d.cpp index 6fd9dbce7d..b36c9388d7 100644 --- a/menu/drivers_display/menu_display_d3d.cpp +++ b/menu/drivers_display/menu_display_d3d.cpp @@ -204,6 +204,7 @@ static void menu_display_d3d_draw_pipeline(void *data) { case VIDEO_SHADER_MENU: case VIDEO_SHADER_MENU_SEC: + case VIDEO_SHADER_MENU_3: shader_info.data = NULL; shader_info.idx = draw->pipeline.id; shader_info.set_active = true; diff --git a/menu/drivers_display/menu_display_gl.c b/menu/drivers_display/menu_display_gl.c index c4424e8108..6f92aac577 100644 --- a/menu/drivers_display/menu_display_gl.c +++ b/menu/drivers_display/menu_display_gl.c @@ -170,6 +170,7 @@ static void menu_display_gl_draw_pipeline(void *data) { case VIDEO_SHADER_MENU: case VIDEO_SHADER_MENU_SEC: + case VIDEO_SHADER_MENU_3: { static float t = 0; video_shader_ctx_info_t shader_info;