+++ /dev/null
-#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 {
-
-/**
-Implements screen-space ambient occlusion.
-
-http://en.wikipedia.org/wiki/Screen_Space_Ambient_Occlusion
-*/
-class AmbientOcclusion: public PostProcessor
-{
-public:
- struct Template: PostProcessor::Template
- {
- class Loader: public DataFile::DerivedObjectLoader<Template, PostProcessor::Template::Loader>
- {
- 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;
- mutable ProgramData shdata;
- RefPtr<Mesh> quad;
- RefPtr<Sampler> linear_sampler;
- RefPtr<Sampler> nearest_sampler;
-
-public:
- AmbientOcclusion(unsigned, unsigned, float = 1.0f);
-
-private:
- static float random(unsigned &);
-
-public:
- void set_n_samples(unsigned);
- void set_occlusion_radius(float);
- void set_edge_depth_threshold(float);
-
- void set_darkness(float);
-
- virtual void render(Renderer &, const Texture2D &, const Texture2D &);
-};
-
-} // namespace GL
-} // namespace Msp
-
-#endif