X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpostprocessor.h;h=15cdc271149265e171da1b2cdf4ef6ce6a3b842d;hb=5c5d094255ae5b0a07f99392a5a099ad9c8e8e38;hp=e40d80438a5a556d55713b98aa32f296d9482798;hpb=119d9819ac9e9a8d274d2410beffe54e470485a3;p=libs%2Fgl.git diff --git a/source/postprocessor.h b/source/postprocessor.h index e40d8043..15cdc271 100644 --- a/source/postprocessor.h +++ b/source/postprocessor.h @@ -1,30 +1,46 @@ -/* $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 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 { protected: PostProcessor() { } public: - /** - Renders the effect. Takes the source texture as a parameter. - */ - virtual void render(const Texture2D &) =0; + 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(); + +private: + static const Mesh &create_fullscreen_quad(); }; } // namespace GL