First stab at getting snow shader to work

This commit is contained in:
twinaphex 2016-11-17 21:08:50 +01:00
parent a2c69ec254
commit 20c1ef83d6
5 changed files with 41 additions and 31 deletions

View File

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

View File

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

View File

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

View File

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

View File

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