X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Feffects%2Fbloom.h;fp=source%2Feffects%2Fbloom.h;h=6b10195b873e684d6af7634b85d8dd31a9f05879;hb=7aaec9a70b8d7733429bec043f8e33e02956f266;hp=0000000000000000000000000000000000000000;hpb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;p=libs%2Fgl.git diff --git a/source/effects/bloom.h b/source/effects/bloom.h new file mode 100644 index 00000000..6b10195b --- /dev/null +++ b/source/effects/bloom.h @@ -0,0 +1,72 @@ +#ifndef MSP_GL_BLOOM_H_ +#define MSP_GL_BLOOM_H_ + +#include "framebuffer.h" +#include "mesh.h" +#include "postprocessor.h" +#include "texture2d.h" +#include "texturing.h" +#include "program.h" +#include "programdata.h" +#include "rendertarget.h" + +namespace Msp { +namespace GL { + +/** +The Bloom post-processing effect causes very bright areas of the image to bleed +into surrounding pixels. Commonly used together with HDR rendering. + +The technique used is to gaussian blur the image and then blend the result with +the original image. With suitable parameters, this effect may also be used as +a blur filter. +*/ +class Bloom: public PostProcessor +{ +public: + struct Template: public PostProcessor::Template + { + class Loader: public DataFile::DerivedObjectLoader + { + public: + Loader(Template &); + }; + + float radius; + float strength; + + Template(); + + virtual Bloom *create(unsigned, unsigned) const; + }; + +private: + RenderTarget *target[2]; + ProgramData common_shdata; + Program blur_shader; + ProgramData blur_shdata[2]; + Program combine_shader; + Texturing combine_texturing; + RefPtr quad; + RefPtr nearest_sampler; + RefPtr linear_sampler; + +public: + Bloom(unsigned, unsigned); + ~Bloom(); + + /** Sets the σ value of the gaussian blur. Values much larger than 4.0 are + likely to cause artifacts. */ + void set_radius(float); + + /** Sets the blend factor between original and blurred images. Larger + values mean more blurriness. */ + void set_strength(float); + + virtual void render(Renderer &, const Texture2D &, const Texture2D &); +}; + +} // namespace GL +} // namespace Msp + +#endif