X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fambientocclusion.h;h=ff1e82443c972bb7d8fee12bf011aa2e3b3e9ea9;hb=180b20bee11425a776c5ead05afcf6a63945d3b2;hp=704ddb25d8c0ed673455a765d39ba8ae64ef96be;hpb=f14435e58bfa0fa697a06ba9a454bb30cd37d9d8;p=libs%2Fgl.git diff --git a/source/ambientocclusion.h b/source/ambientocclusion.h index 704ddb25..ff1e8244 100644 --- a/source/ambientocclusion.h +++ b/source/ambientocclusion.h @@ -6,6 +6,7 @@ #include "postprocessor.h" #include "program.h" #include "programdata.h" +#include "rendertarget.h" #include "texture2d.h" #include "texturing.h" @@ -19,25 +20,48 @@ http://en.wikipedia.org/wiki/Screen_Space_Ambient_Occlusion */ class AmbientOcclusion: public PostProcessor { +public: + struct Template: PostProcessor::Template + { + class Loader: public DataFile::DerivedObjectLoader + { + public: + Loader(Template &); + }; + + unsigned n_samples; + float occlusion_radius; + float darkness; + float edge_depth_threshold; + + Template(); + + virtual AmbientOcclusion *create(unsigned, unsigned) const; + }; + private: - Texture2D occlusion; Texture2D rotate_lookup; - Framebuffer fbo; - Texturing occlude_texturing; + RenderTarget occlude_target; + Texturing texturing; Program occlude_shader; - ProgramData occlude_shdata; - Texturing combine_texturing; Program combine_shader; - ProgramData combine_shdata; - Mesh quad; + mutable ProgramData shdata; + const Mesh &quad; + +public: + AmbientOcclusion(unsigned, unsigned, float = 1.0f); + +private: + static float random(unsigned &); public: - AmbientOcclusion(unsigned, unsigned, float); + void set_n_samples(unsigned); + void set_occlusion_radius(float); + void set_edge_depth_threshold(float); - void set_depth_ratio(float); void set_darkness(float); - virtual void render(const Texture2D &, const Texture2D &); + virtual void render(Renderer &, const Texture2D &, const Texture2D &); }; } // namespace GL