X-Git-Url: http://git.tdb.fi/?p=libs%2Fdemoscene.git;a=blobdiff_plain;f=source%2Ffilmgrain.h;fp=source%2Ffilmgrain.h;h=810b9a46627a4f9c1732ec1c5a54b268578fa3a1;hp=0000000000000000000000000000000000000000;hb=77d0c7ac9e3ebe1cecaf0c84e1501d3b6459055f;hpb=1e3954a988c6d6d946260019f25a4ad3262e01c4 diff --git a/source/filmgrain.h b/source/filmgrain.h new file mode 100644 index 0000000..810b9a4 --- /dev/null +++ b/source/filmgrain.h @@ -0,0 +1,63 @@ +#ifndef MSP_DEMOSCENE_FILMGRAIN_H_ +#define MSP_DEMOSCENE_FILMGRAIN_H_ + +#include +#include +#include +#include +#include +#include + +namespace Msp { +namespace DemoScene { + +class FilmGrain: public GL::PostProcessor +{ +public: + struct Template: public PostProcessor::Template + { + class Loader: public DataFile::DerivedObjectLoader + { + public: + Loader(Template &t); + }; + + unsigned size; + unsigned layers; + float coarseness; + float strength; + + Template(); + + virtual FilmGrain *create(unsigned, unsigned) const; + }; + +private: + const Msp::GL::Mesh &mesh; + const Msp::GL::Program &shprog; + Msp::GL::ProgramData shdata; + Msp::GL::Texturing texturing; + unsigned size; + unsigned layers; + Msp::GL::Texture2DArray grain; + unsigned current_layer; + +public: + FilmGrain(unsigned = 256, unsigned = 16); + +private: + void generate_grain(); + void bicubic2x(const UInt8 *, UInt8 *, Int16 *); + static UInt8 clamp(int); + +public: + void set_coarseness(float); + void set_strength(float); + + virtual void render(GL::Renderer &, const GL::Texture2D &, const GL::Texture2D &); +}; + +} // namespace DemoScene +} // namespace Msp + +#endif