1 #ifndef MSP_DEMOSCENE_FILMGRAIN_H_
2 #define MSP_DEMOSCENE_FILMGRAIN_H_
4 #include <msp/gl/mesh.h>
5 #include <msp/gl/postprocessor.h>
6 #include <msp/gl/program.h>
7 #include <msp/gl/programdata.h>
8 #include <msp/gl/texture2darray.h>
9 #include <msp/gl/texturing.h>
14 class FilmGrain: public GL::PostProcessor
17 struct Template: public PostProcessor::Template
19 class Loader: public DataFile::DerivedObjectLoader<Template, PostProcessor::Template::Loader>
32 virtual FilmGrain *create(unsigned, unsigned) const;
36 const Msp::GL::Mesh &mesh;
37 const Msp::GL::Program &shprog;
38 Msp::GL::ProgramData shdata;
39 Msp::GL::Texturing texturing;
42 Msp::GL::Texture2DArray grain;
43 unsigned current_layer;
46 FilmGrain(unsigned = 256, unsigned = 16);
49 void generate_grain();
50 void bicubic2x(const UInt8 *, UInt8 *, Int16 *);
51 static UInt8 clamp(int);
54 void set_coarseness(float);
55 void set_strength(float);
57 virtual void render(GL::Renderer &, const GL::Texture2D &, const GL::Texture2D &);
60 } // namespace DemoScene