X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpostprocessor.h;h=0666dd46c9cf2eb23e7bc4568cdea889fbf5c484;hb=904de4f7fd994886adbd3a6c03bc1b7c14ebc562;hp=9e4220abd84a24b04330727a18bc0cb8e03deacf;hpb=f14435e58bfa0fa697a06ba9a454bb30cd37d9d8;p=libs%2Fgl.git diff --git a/source/postprocessor.h b/source/postprocessor.h index 9e4220ab..0666dd46 100644 --- a/source/postprocessor.h +++ b/source/postprocessor.h @@ -4,10 +4,14 @@ 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 { @@ -16,10 +20,22 @@ protected: public: virtual ~PostProcessor() { } - /** - Renders the effect. Takes the source texture as a parameter. - */ - virtual void render(const Texture2D &, 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