X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=blur_effect.cpp;h=285169851705309c0867b50bac0408c6284ca1a2;hp=fd81aa86cdbc342cbdf3e231e6f89acbae9fa80d;hb=05ae48a62f4a507c1eef75b9220f88f2b9fda563;hpb=0a3c9320e21fc211f0c61a4bda1c6932920c6883 diff --git a/blur_effect.cpp b/blur_effect.cpp index fd81aa8..2851698 100644 --- a/blur_effect.cpp +++ b/blur_effect.cpp @@ -10,8 +10,31 @@ // Must match blur_effect.frag. #define NUM_TAPS 16 + +BlurEffect::BlurEffect() { + hpass = new SingleBlurPassEffect(); + hpass->set_int("direction", SingleBlurPassEffect::HORIZONTAL); + vpass = new SingleBlurPassEffect(); + vpass->set_int("direction", SingleBlurPassEffect::VERTICAL); +} + +void BlurEffect::add_self_to_effect_chain(EffectChain *chain, const std::vector &inputs) { + assert(inputs.size() == 1); + hpass->add_self_to_effect_chain(chain, inputs); + + std::vector vpass_inputs; + vpass_inputs.push_back(hpass); + vpass->add_self_to_effect_chain(chain, vpass_inputs); +} + +bool BlurEffect::set_float(const std::string &key, float value) { + if (!hpass->set_float(key, value)) { + return false; + } + return vpass->set_float(key, value); +} -BlurEffect::BlurEffect() +SingleBlurPassEffect::SingleBlurPassEffect() : radius(3.0f), direction(HORIZONTAL) { @@ -19,12 +42,12 @@ BlurEffect::BlurEffect() register_int("direction", (int *)&direction); } -std::string BlurEffect::output_fragment_shader() +std::string SingleBlurPassEffect::output_fragment_shader() { return read_file("blur_effect.frag"); } -void BlurEffect::set_uniforms(GLuint glsl_program_num, const std::string &prefix, unsigned *sampler_num) +void SingleBlurPassEffect::set_uniforms(GLuint glsl_program_num, const std::string &prefix, unsigned *sampler_num) { Effect::set_uniforms(glsl_program_num, prefix, sampler_num);