X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fambientocclusion.h;h=6c2c5d7eea938daa6be0e6e5ce2387dd2a361660;hp=8b0b0fcdd543a17246642ed5fca945c2606fb8b6;hb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;hpb=a525c632144d3dcefe373916bdde789727d2230d diff --git a/source/ambientocclusion.h b/source/ambientocclusion.h index 8b0b0fcd..6c2c5d7e 100644 --- a/source/ambientocclusion.h +++ b/source/ambientocclusion.h @@ -20,19 +20,47 @@ 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 rotate_lookup; RenderTarget occlude_target; Texturing texturing; Program occlude_shader; Program combine_shader; - ProgramData shdata; - const Mesh &quad; + mutable ProgramData shdata; + RefPtr quad; + RefPtr linear_sampler; + RefPtr nearest_sampler; + +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(Renderer &, const Texture2D &, const Texture2D &);