]> git.tdb.fi Git - libs/gl.git/blob - source/effects/bloom.h
Check the flat qualifier from the correct member
[libs/gl.git] / source / effects / bloom.h
1 #ifndef MSP_GL_BLOOM_H_
2 #define MSP_GL_BLOOM_H_
3
4 #include "postprocessor.h"
5 #include "programdata.h"
6 #include "rendertarget.h"
7
8 namespace Msp {
9 namespace GL {
10
11 class Program;
12
13 /**
14 Bleeds very bright areas of the image into surrounding pixels to simulate
15 optical imperfections in lenses.
16
17 The input image is blurred with a gaussian kernel to simulate the Airy disc
18 produced by a lens, then the blurred image is blended with the original.
19 */
20 class Bloom: public PostProcessor
21 {
22 public:
23         struct Template: public PostProcessor::Template
24         {
25                 class Loader: public DataFile::DerivedObjectLoader<Template, PostProcessor::Template::Loader>
26                 {
27                 public:
28                         Loader(Template &);
29                 };
30
31                 float radius = 2.0f;
32                 float strength = 0.2f;
33
34                 virtual Bloom *create(unsigned, unsigned) const;
35         };
36
37 private:
38         RenderTarget *target[2];
39         ProgramData common_shdata;
40         const Program &blur_shader;
41         ProgramData blur_shdata[2];
42         const Program &combine_shader;
43         const Mesh &quad;
44         const Sampler &nearest_sampler;
45         const Sampler &linear_sampler;
46
47 public:
48         Bloom(unsigned, unsigned);
49         ~Bloom();
50
51         /** Sets the σ value of the gaussian blur.  Values much larger than 4.0 are
52         likely to cause artifacts. */
53         void set_radius(float);
54
55         /** Sets the blend factor between original and blurred images.  Larger
56         values mean more blurriness. */
57         void set_strength(float);
58
59         virtual void render(Renderer &, const Texture2D &, const Texture2D &);
60
61         virtual void set_debug_name(const std::string &);
62 };
63
64 } // namespace GL
65 } // namespace Msp
66
67 #endif