-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2009 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
#ifndef MSP_GL_POSTPROCESSOR_H_
#define MSP_GL_POSTPROCESSOR_H_
namespace Msp {
namespace GL {
+class Mesh;
+class Shader;
class Texture2D;
/**
-Base class for post-processing effects.
+Base class for post-processing effects. Post-processors receive the contents
+of the entire framebuffer as a texture and render it back, altering it in the
+process.
*/
class PostProcessor
{
protected:
PostProcessor() { }
public:
- virtual ~PostProcessor();
+ virtual ~PostProcessor() { }
- /**
- Renders the effect. Takes the source texture as a parameter.
- */
- virtual void render(const Texture2D &) =0;
+ /// Renders the effect.
+ virtual void render(const Texture2D &color, const Texture2D &depth) = 0;
+
+protected:
+ /** Returns a vertex shader suitable for rendering a full-screen quad.
+ Input vertices are assumed to be in normalized device coordinates; no
+ transform is performed. The shader provides a varying vec2 texcoord for
+ a fragment shader to access textures. */
+ static Shader &get_fullscreen_vertex_shader();
+
+ /** Returns a mesh consisting of a single quad, covering the entire screen.
+ The vertices are in normalized device coordinates. */
+ static const Mesh &get_fullscreen_quad();
+
+private:
+ static const Mesh &create_fullscreen_quad();
};
} // namespace GL