#ifndef MSP_GL_POSTPROCESSOR_H_
#define MSP_GL_POSTPROCESSOR_H_
+#include <msp/datafile/objectloader.h>
+
namespace Msp {
namespace GL {
class Mesh;
+class Renderer;
class Shader;
class Texture2D;
*/
class PostProcessor
{
+public:
+ struct Template
+ {
+ class Loader: public Msp::DataFile::ObjectLoader<Template>
+ {
+ public:
+ Loader(Template &);
+ };
+
+ unsigned size_divisor;
+
+ Template();
+ virtual ~Template() { }
+
+ virtual PostProcessor *create(unsigned, unsigned) const = 0;
+ };
+
protected:
PostProcessor() { }
public:
virtual ~PostProcessor() { }
/// Renders the effect.
- virtual void render(const Texture2D &color, const Texture2D &depth) = 0;
+ virtual void render(const Texture2D &, const Texture2D &) { }
-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();
+ virtual void render(Renderer &, const Texture2D &, const Texture2D &);
+protected:
/** 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();