X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Feffects%2Fambientocclusion.h;h=a9ffb81e2ac4d52c82557400da03835f6a8a0ef1;hb=190a7e11237351f6b730c28f7b16f183e8adc69c;hp=25fab5c9f23952df4ce0516d77ac2a6993e3b0ab;hpb=9a63244c1342337915c4610401a24c09fa72cc3d;p=libs%2Fgl.git diff --git a/source/effects/ambientocclusion.h b/source/effects/ambientocclusion.h index 25fab5c9..a9ffb81e 100644 --- a/source/effects/ambientocclusion.h +++ b/source/effects/ambientocclusion.h @@ -1,20 +1,17 @@ #ifndef MSP_GL_AMBIENTOCCLUSION_H_ #define MSP_GL_AMBIENTOCCLUSION_H_ -#include "framebuffer.h" -#include "mesh.h" #include "postprocessor.h" -#include "program.h" #include "programdata.h" #include "rendertarget.h" -#include "texture2d.h" -#include "texturing.h" namespace Msp { namespace GL { +class Program; + /** -Implements screen-space ambient occlusion. +Darkens recessed areas of the scene to simulate the occlusion of ambient light. http://en.wikipedia.org/wiki/Screen_Space_Ambient_Occlusion */ @@ -29,32 +26,31 @@ public: Loader(Template &); }; - unsigned n_samples; - float occlusion_radius; - float darkness; - float edge_depth_threshold; - - Template(); + unsigned n_samples = 16; + float occlusion_radius = 0.5f; + float darkness = 1.0f; + float edge_depth_threshold = 0.1f; - virtual AmbientOcclusion *create(Resources &, unsigned, unsigned) const; + virtual AmbientOcclusion *create(unsigned, unsigned) const; }; private: - Texture2D rotate_lookup; + const Texture2D &rotate_lookup; RenderTarget occlude_target; - Texturing texturing; const Program &occlude_shader; const Program &combine_shader; mutable ProgramData shdata; const Mesh &quad; const Sampler &linear_sampler; + const Sampler &nearest_clamp_sampler; const Sampler &nearest_sampler; public: - AmbientOcclusion(Resources &, unsigned, unsigned, float = 1.0f); + AmbientOcclusion(unsigned, unsigned, float = 1.0f); private: - static float random(unsigned &); + static const Texture2D &get_or_create_rotate_lookup(); + static float radical_inverse(unsigned); public: void set_n_samples(unsigned); @@ -64,6 +60,8 @@ public: void set_darkness(float); virtual void render(Renderer &, const Texture2D &, const Texture2D &); + + virtual void set_debug_name(const std::string &); }; } // namespace GL