X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=effect_chain.cpp;h=446061433ea375422af5ba245c07d7b15399bdb5;hp=6e297dfeb49d44f7d0044f0c2cb46ef4eacbd6d2;hb=c6c3847558f3724f2b8973aa503de0e6c3de5816;hpb=9c12e38b7cd88a77ef297d080b7c41e6bd6326fb diff --git a/effect_chain.cpp b/effect_chain.cpp index 6e297df..4460614 100644 --- a/effect_chain.cpp +++ b/effect_chain.cpp @@ -317,6 +317,12 @@ void EffectChain::compile_glsl_program(Phase *phase) Node *node = phase->effects[i]; Effect *effect = node->effect; const string effect_id = phase->effect_ids[node]; + for (unsigned j = 0; j < effect->uniforms_sampler2d.size(); ++j) { + phase->uniforms_sampler2d.push_back(effect->uniforms_sampler2d[j]); + phase->uniforms_sampler2d.back().prefix = effect_id; + frag_shader_uniforms += string("uniform sampler2D ") + effect_id + + "_" + effect->uniforms_sampler2d[j].name + ";\n"; + } for (unsigned j = 0; j < effect->uniforms_bool.size(); ++j) { phase->uniforms_bool.push_back(effect->uniforms_bool[j]); phase->uniforms_bool.back().prefix = effect_id; @@ -329,12 +335,6 @@ void EffectChain::compile_glsl_program(Phase *phase) frag_shader_uniforms += string("uniform int ") + effect_id + "_" + effect->uniforms_int[j].name + ";\n"; } - for (unsigned j = 0; j < effect->uniforms_sampler2d.size(); ++j) { - phase->uniforms_int.push_back(effect->uniforms_sampler2d[j]); - phase->uniforms_int.back().prefix = effect_id; - frag_shader_uniforms += string("uniform sampler2D ") + effect_id - + "_" + effect->uniforms_sampler2d[j].name + ";\n"; - } for (unsigned j = 0; j < effect->uniforms_float.size(); ++j) { phase->uniforms_float.push_back(effect->uniforms_float[j]); phase->uniforms_float.back().prefix = effect_id; @@ -391,6 +391,10 @@ void EffectChain::compile_glsl_program(Phase *phase) phase->glsl_program_num = resource_pool->compile_glsl_program(vert_shader, frag_shader); // Collect the resulting program numbers for each uniform. + for (unsigned i = 0; i < phase->uniforms_sampler2d.size(); ++i) { + Uniform &uniform = phase->uniforms_sampler2d[i]; + uniform.location = get_uniform_location(phase->glsl_program_num, uniform.prefix, uniform.name); + } for (unsigned i = 0; i < phase->uniforms_bool.size(); ++i) { Uniform &uniform = phase->uniforms_bool[i]; uniform.location = get_uniform_location(phase->glsl_program_num, uniform.prefix, uniform.name); @@ -1835,6 +1839,12 @@ void EffectChain::execute_phase(Phase *phase, bool last_phase, mapuniforms_sampler2d.size(); ++i) { + const Uniform &uniform = phase->uniforms_sampler2d[i]; + if (uniform.location != -1) { + glUniform1iv(uniform.location, uniform.num_values, uniform.value); + } + } for (size_t i = 0; i < phase->uniforms_bool.size(); ++i) { const Uniform &uniform = phase->uniforms_bool[i]; assert(uniform.num_values == 1);