Make Input an abstract base class, and move the current functionality into FlatInput...
[movit] / diffusion_effect.cpp
1 #include <math.h>
2 #include <assert.h>
3
4 #include "diffusion_effect.h"
5 #include "blur_effect.h"
6 #include "effect_chain.h"
7 #include "util.h"
8
9 DiffusionEffect::DiffusionEffect()
10         : blur(new BlurEffect),
11           overlay_matte(new OverlayMatteEffect)
12 {
13 }
14
15 void DiffusionEffect::add_self_to_effect_chain(EffectChain *chain, const std::vector<Effect *> &inputs) {
16         assert(inputs.size() == 1);
17         blur->add_self_to_effect_chain(chain, inputs);
18
19         std::vector<Effect *> overlay_matte_inputs;
20         overlay_matte_inputs.push_back(inputs[0]);
21         overlay_matte_inputs.push_back(chain->last_added_effect());  // FIXME
22         overlay_matte->add_self_to_effect_chain(chain, overlay_matte_inputs);
23 }
24
25 bool DiffusionEffect::set_float(const std::string &key, float value) {
26         if (key == "blurred_mix_amount") {
27                 return overlay_matte->set_float(key, value);
28         }
29         return blur->set_float(key, value);
30 }
31
32 OverlayMatteEffect::OverlayMatteEffect()
33         : blurred_mix_amount(0.3f)
34 {
35         register_float("blurred_mix_amount", &blurred_mix_amount);
36 }
37
38 std::string OverlayMatteEffect::output_fragment_shader()
39 {
40         return read_file("overlay_matte_effect.frag");
41 }