From 83b37812b889c6bd91a4e9d0114bcd830b93af2c Mon Sep 17 00:00:00 2001 From: Themaister Date: Fri, 23 May 2014 12:09:57 +0200 Subject: [PATCH] Set parameter uniforms. --- gfx/shader_cg.c | 28 ++++++++++++++++++---------- gfx/shader_cg.h | 1 - gfx/shader_glsl.c | 12 ++++++++++-- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/gfx/shader_cg.c b/gfx/shader_cg.c index ff6763fa03..e21fa14549 100644 --- a/gfx/shader_cg.c +++ b/gfx/shader_cg.c @@ -132,7 +132,6 @@ struct cg_program }; static struct cg_program prg[GFX_MAX_SHADERS]; -static const char **cg_arguments; static bool cg_active; static CGprofile cgVProf, cgFProf; static unsigned active_index; @@ -313,6 +312,15 @@ static void gl_cg_set_params(void *data, unsigned width, unsigned height, } } + // #pragma parameters + for (i = 0; i < cg_shader->num_parameters; i++) + { + CGparameter param_v = cgGetNamedParameter(prg[active_index].vprg, cg_shader->parameters[i].id); + CGparameter param_f = cgGetNamedParameter(prg[active_index].fprg, cg_shader->parameters[i].id); + set_param_1f(param_v, cg_shader->parameters[i].current); + set_param_1f(param_f, cg_shader->parameters[i].current); + } + // Set state parameters if (state_tracker) { @@ -414,18 +422,23 @@ static bool load_program(unsigned index, const char *prog, bool path_is_file) char *listing_f = NULL; char *listing_v = NULL; + static const char *argv[] = { + "-DPARAMETER_UNIFORM", + NULL, + }; + if (path_is_file) { - prg[index].fprg = cgCreateProgramFromFile(cgCtx, CG_SOURCE, prog, cgFProf, "main_fragment", cg_arguments); + prg[index].fprg = cgCreateProgramFromFile(cgCtx, CG_SOURCE, prog, cgFProf, "main_fragment", argv); SET_LISTING(f); - prg[index].vprg = cgCreateProgramFromFile(cgCtx, CG_SOURCE, prog, cgVProf, "main_vertex", cg_arguments); + prg[index].vprg = cgCreateProgramFromFile(cgCtx, CG_SOURCE, prog, cgVProf, "main_vertex", argv); SET_LISTING(v); } else { - prg[index].fprg = cgCreateProgram(cgCtx, CG_SOURCE, prog, cgFProf, "main_fragment", cg_arguments); + prg[index].fprg = cgCreateProgram(cgCtx, CG_SOURCE, prog, cgFProf, "main_fragment", argv); SET_LISTING(f); - prg[index].vprg = cgCreateProgram(cgCtx, CG_SOURCE, prog, cgVProf, "main_vertex", cg_arguments); + prg[index].vprg = cgCreateProgram(cgCtx, CG_SOURCE, prog, cgVProf, "main_vertex", argv); SET_LISTING(v); } @@ -900,11 +913,6 @@ static bool gl_cg_mipmap_input(unsigned index) return false; } -void gl_cg_set_compiler_args(const char **argv) -{ - cg_arguments = argv; -} - void gl_cg_invalidate_context(void) { cgCtx = NULL; diff --git a/gfx/shader_cg.h b/gfx/shader_cg.h index fdb1396509..b1507f5c3b 100644 --- a/gfx/shader_cg.h +++ b/gfx/shader_cg.h @@ -20,7 +20,6 @@ #include "shader_common.h" #include -void gl_cg_set_compiler_args(const char **argv); void gl_cg_invalidate_context(void); // Call when resetting GL context on PS3. extern const gl_shader_backend_t gl_cg_backend; diff --git a/gfx/shader_glsl.c b/gfx/shader_glsl.c index f5c028793e..92c7fe84aa 100644 --- a/gfx/shader_glsl.c +++ b/gfx/shader_glsl.c @@ -366,7 +366,7 @@ static GLuint compile_program(const char *vertex, const char *fragment, unsigned { RARCH_LOG("Found GLSL vertex shader.\n"); vert = glCreateShader(GL_VERTEX_SHADER); - if (!compile_shader(vert, "#define VERTEX\n", vertex)) + if (!compile_shader(vert, "#define VERTEX\n#define PARAMETER_UNIFORM\n", vertex)) { RARCH_ERR("Failed to compile vertex shader #%u\n", i); return false; @@ -379,7 +379,7 @@ static GLuint compile_program(const char *vertex, const char *fragment, unsigned { RARCH_LOG("Found GLSL fragment shader.\n"); frag = glCreateShader(GL_FRAGMENT_SHADER); - if (!compile_shader(frag, "#define FRAGMENT\n", fragment)) + if (!compile_shader(frag, "#define FRAGMENT\n#define PARAMETER_UNIFORM\n", fragment)) { RARCH_ERR("Failed to compile fragment shader #%u\n", i); return false; @@ -1000,6 +1000,14 @@ static void gl_glsl_set_params(void *data, unsigned width, unsigned height, glActiveTexture(GL_TEXTURE0); + // #pragma parameters + for (i = 0; i < glsl_shader->num_parameters; i++) + { + int location = glGetUniformLocation(gl_program[active_index], glsl_shader->parameters[i].id); + glUniform1f(location, glsl_shader->parameters[i].current); + } + + // Set state parameters if (gl_state_tracker) { static struct state_tracker_uniform info[GFX_MAX_VARIABLES];