Create struct shader_program_info
This commit is contained in:
parent
f28c0475b5
commit
1e9aed1683
|
@ -421,8 +421,7 @@ static bool gl_glsl_link_program(GLuint prog)
|
||||||
|
|
||||||
static GLuint gl_glsl_compile_program(glsl_shader_data_t *glsl,
|
static GLuint gl_glsl_compile_program(glsl_shader_data_t *glsl,
|
||||||
unsigned idx,
|
unsigned idx,
|
||||||
const char *vertex,
|
struct shader_program_info *program_info)
|
||||||
const char *fragment)
|
|
||||||
{
|
{
|
||||||
GLuint vert = 0;
|
GLuint vert = 0;
|
||||||
GLuint frag = 0;
|
GLuint frag = 0;
|
||||||
|
@ -431,13 +430,13 @@ static GLuint gl_glsl_compile_program(glsl_shader_data_t *glsl,
|
||||||
if (!prog)
|
if (!prog)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (vertex)
|
if (program_info->vertex)
|
||||||
{
|
{
|
||||||
RARCH_LOG("Found GLSL vertex shader.\n");
|
RARCH_LOG("Found GLSL vertex shader.\n");
|
||||||
vert = glCreateShader(GL_VERTEX_SHADER);
|
vert = glCreateShader(GL_VERTEX_SHADER);
|
||||||
if (!gl_glsl_compile_shader(
|
if (!gl_glsl_compile_shader(
|
||||||
glsl,
|
glsl,
|
||||||
vert, "#define VERTEX\n#define PARAMETER_UNIFORM\n", vertex))
|
vert, "#define VERTEX\n#define PARAMETER_UNIFORM\n", program_info->vertex))
|
||||||
{
|
{
|
||||||
RARCH_ERR("Failed to compile vertex shader #%u\n", idx);
|
RARCH_ERR("Failed to compile vertex shader #%u\n", idx);
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -446,12 +445,12 @@ static GLuint gl_glsl_compile_program(glsl_shader_data_t *glsl,
|
||||||
glAttachShader(prog, vert);
|
glAttachShader(prog, vert);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fragment)
|
if (program_info->fragment)
|
||||||
{
|
{
|
||||||
RARCH_LOG("Found GLSL fragment shader.\n");
|
RARCH_LOG("Found GLSL fragment shader.\n");
|
||||||
frag = glCreateShader(GL_FRAGMENT_SHADER);
|
frag = glCreateShader(GL_FRAGMENT_SHADER);
|
||||||
if (!gl_glsl_compile_shader(glsl, frag,
|
if (!gl_glsl_compile_shader(glsl, frag,
|
||||||
"#define FRAGMENT\n#define PARAMETER_UNIFORM\n", fragment))
|
"#define FRAGMENT\n#define PARAMETER_UNIFORM\n", program_info->fragment))
|
||||||
{
|
{
|
||||||
RARCH_ERR("Failed to compile fragment shader #%u\n", idx);
|
RARCH_ERR("Failed to compile fragment shader #%u\n", idx);
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -460,7 +459,7 @@ static GLuint gl_glsl_compile_program(glsl_shader_data_t *glsl,
|
||||||
glAttachShader(prog, frag);
|
glAttachShader(prog, frag);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vertex || fragment)
|
if (program_info->vertex || program_info->fragment)
|
||||||
{
|
{
|
||||||
RARCH_LOG("Linking GLSL program.\n");
|
RARCH_LOG("Linking GLSL program.\n");
|
||||||
if (!gl_glsl_link_program(prog))
|
if (!gl_glsl_link_program(prog))
|
||||||
|
@ -523,6 +522,7 @@ static bool gl_glsl_compile_programs(
|
||||||
|
|
||||||
for (i = 0; i < glsl->shader->passes; i++)
|
for (i = 0; i < glsl->shader->passes; i++)
|
||||||
{
|
{
|
||||||
|
struct shader_program_info shader_prog_info;
|
||||||
const char *vertex = NULL;
|
const char *vertex = NULL;
|
||||||
const char *fragment = NULL;
|
const char *fragment = NULL;
|
||||||
struct video_shader_pass *pass = (struct video_shader_pass*)
|
struct video_shader_pass *pass = (struct video_shader_pass*)
|
||||||
|
@ -544,7 +544,11 @@ static bool gl_glsl_compile_programs(
|
||||||
vertex = pass->source.string.vertex;
|
vertex = pass->source.string.vertex;
|
||||||
fragment = pass->source.string.fragment;
|
fragment = pass->source.string.fragment;
|
||||||
|
|
||||||
gl_prog[i] = gl_glsl_compile_program(glsl, i, vertex, fragment);
|
shader_prog_info.vertex = vertex;
|
||||||
|
shader_prog_info.fragment = fragment;
|
||||||
|
shader_prog_info.is_file = false;
|
||||||
|
|
||||||
|
gl_prog[i] = gl_glsl_compile_program(glsl, i, &shader_prog_info);
|
||||||
|
|
||||||
if (!gl_prog[i])
|
if (!gl_prog[i])
|
||||||
{
|
{
|
||||||
|
@ -790,6 +794,7 @@ static void gl_glsl_deinit(void *data)
|
||||||
static void *gl_glsl_init(void *data, const char *path)
|
static void *gl_glsl_init(void *data, const char *path)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
struct shader_program_info shader_prog_info;
|
||||||
config_file_t *conf = NULL;
|
config_file_t *conf = NULL;
|
||||||
const char *stock_vertex = NULL;
|
const char *stock_vertex = NULL;
|
||||||
const char *stock_fragment = NULL;
|
const char *stock_fragment = NULL;
|
||||||
|
@ -918,7 +923,11 @@ static void *gl_glsl_init(void *data, const char *path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(glsl->gl_program[0] = gl_glsl_compile_program(glsl, 0, stock_vertex, stock_fragment)))
|
shader_prog_info.vertex = stock_vertex;
|
||||||
|
shader_prog_info.fragment = stock_fragment;
|
||||||
|
shader_prog_info.is_file = false;
|
||||||
|
|
||||||
|
if (!(glsl->gl_program[0] = gl_glsl_compile_program(glsl, 0, &shader_prog_info)))
|
||||||
{
|
{
|
||||||
RARCH_ERR("GLSL stock programs failed to compile.\n");
|
RARCH_ERR("GLSL stock programs failed to compile.\n");
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -970,13 +979,18 @@ static void *gl_glsl_init(void *data, const char *path)
|
||||||
|
|
||||||
if (glsl->shader->modern)
|
if (glsl->shader->modern)
|
||||||
{
|
{
|
||||||
|
shader_prog_info.vertex =
|
||||||
|
glsl_core ?
|
||||||
|
stock_vertex_core_blend : stock_vertex_modern_blend;
|
||||||
|
shader_prog_info.fragment =
|
||||||
|
glsl_core ?
|
||||||
|
stock_fragment_core_blend : stock_fragment_modern_blend;
|
||||||
|
shader_prog_info.is_file = false;
|
||||||
|
|
||||||
glsl->gl_program[GL_SHADER_STOCK_BLEND] = gl_glsl_compile_program(
|
glsl->gl_program[GL_SHADER_STOCK_BLEND] = gl_glsl_compile_program(
|
||||||
glsl,
|
glsl,
|
||||||
GL_SHADER_STOCK_BLEND,
|
GL_SHADER_STOCK_BLEND,
|
||||||
glsl_core ?
|
&shader_prog_info
|
||||||
stock_vertex_core_blend : stock_vertex_modern_blend,
|
|
||||||
glsl_core ?
|
|
||||||
stock_fragment_core_blend : stock_fragment_modern_blend
|
|
||||||
);
|
);
|
||||||
gl_glsl_find_uniforms(glsl, 0, glsl->gl_program[GL_SHADER_STOCK_BLEND],
|
gl_glsl_find_uniforms(glsl, 0, glsl->gl_program[GL_SHADER_STOCK_BLEND],
|
||||||
&glsl->uniforms[GL_SHADER_STOCK_BLEND]);
|
&glsl->uniforms[GL_SHADER_STOCK_BLEND]);
|
||||||
|
@ -987,11 +1001,14 @@ static void *gl_glsl_init(void *data, const char *path)
|
||||||
glsl->uniforms[GL_SHADER_STOCK_BLEND] = glsl->uniforms[0];
|
glsl->uniforms[GL_SHADER_STOCK_BLEND] = glsl->uniforms[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
shader_prog_info.vertex = stock_vertex_xmb;
|
||||||
|
shader_prog_info.fragment = stock_fragment_xmb;
|
||||||
|
shader_prog_info.is_file = false;
|
||||||
|
|
||||||
glsl->gl_program[GL_SHADER_STOCK_XMB] = gl_glsl_compile_program(
|
glsl->gl_program[GL_SHADER_STOCK_XMB] = gl_glsl_compile_program(
|
||||||
glsl,
|
glsl,
|
||||||
GL_SHADER_STOCK_XMB,
|
GL_SHADER_STOCK_XMB,
|
||||||
stock_vertex_xmb,
|
&shader_prog_info);
|
||||||
stock_fragment_xmb);
|
|
||||||
|
|
||||||
gl_glsl_reset_attrib(glsl);
|
gl_glsl_reset_attrib(glsl);
|
||||||
|
|
||||||
|
|
|
@ -90,6 +90,14 @@ enum shader_uniform_type
|
||||||
UNIFORM_1I
|
UNIFORM_1I
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct shader_program_info
|
||||||
|
{
|
||||||
|
const char *vertex;
|
||||||
|
const char *fragment;
|
||||||
|
const char *combined;
|
||||||
|
bool is_file;
|
||||||
|
};
|
||||||
|
|
||||||
struct uniform_info
|
struct uniform_info
|
||||||
{
|
{
|
||||||
enum shader_uniform_type type;
|
enum shader_uniform_type type;
|
||||||
|
|
Loading…
Reference in New Issue