]> git.tdb.fi Git - libs/gl.git/blobdiff - source/postprocessor.h
Support slopes in keyframe interpolation
[libs/gl.git] / source / postprocessor.h
index 25ed150a53f803b08f763c74c9a4836196ee99df..6e3153dab69f9dea7639ffc675ad4386c8d45725 100644 (file)
@@ -1,32 +1,65 @@
-/* $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_
 
+#include <msp/datafile/objectloader.h>
+
 namespace Msp {
 namespace GL {
 
+class Mesh;
+class Renderer;
+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
 {
+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();
+       virtual ~PostProcessor() { }
+
+       /// Renders the effect.
+       virtual void render(const Texture2D &, const Texture2D &) { }
+
+       virtual void render(Renderer &, 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.
+       
+       Deprecated in favor of the builtin postprocess.glsl module. */
+       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();
 
-       /**
-       Renders the effect.  Takes the source texture as a parameter.
-       */
-       virtual void render(const Texture2D &) =0;
+private:
+       static const Mesh &create_fullscreen_quad();
 };
 
 } // namespace GL