PostFX.hpp
1
2//
3// SFML - Simple and Fast Multimedia Library
4// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com)
5//
6// This software is provided 'as-is', without any express or implied warranty.
7// In no event will the authors be held liable for any damages arising from the use of this software.
8//
9// Permission is granted to anyone to use this software for any purpose,
10// including commercial applications, and to alter it and redistribute it freely,
11// subject to the following restrictions:
12//
13// 1. The origin of this software must not be misrepresented;
14// you must not claim that you wrote the original software.
15// If you use this software in a product, an acknowledgment
16// in the product documentation would be appreciated but is not required.
17//
18// 2. Altered source versions must be plainly marked as such,
19// and must not be misrepresented as being the original software.
20//
21// 3. This notice may not be removed or altered from any source distribution.
22//
24
25#ifndef SFML_POSTFX_HPP
26#define SFML_POSTFX_HPP
27
29// Headers
31#include <SFML/Graphics/Drawable.hpp>
32#include <SFML/Graphics/Image.hpp>
33#include <istream>
34#include <map>
35#include <string>
36
37
38namespace sf
39{
43class SFML_API PostFX : public Drawable
44{
45public :
46
51 PostFX();
52
59 PostFX(const PostFX& Copy);
60
65 ~PostFX();
66
75 bool LoadFromFile(const std::string& Filename);
76
85 bool LoadFromMemory(const std::string& Effect);
86
94 void SetParameter(const std::string& Name, float X);
95
103 void SetParameter(const std::string& Name, float X, float Y);
104
112 void SetParameter(const std::string& Name, float X, float Y, float Z);
113
121 void SetParameter(const std::string& Name, float X, float Y, float Z, float W);
122
130 void SetTexture(const std::string& Name, Image* Texture);
131
140 PostFX& operator =(const PostFX& Other);
141
148 static bool CanUsePostFX();
149
150protected :
151
156 virtual void Render(RenderTarget& Target) const;
157
158private :
159
169 static std::string PreprocessEffect(std::istream& File);
170
175 void CreateProgram();
176
178 // Types
180 typedef std::map<std::string, const Image*> TextureTable;
181
183 // Member data
185 unsigned int myShaderProgram;
186 TextureTable myTextures;
187 std::string myFragmentShader;
188 mutable Image myFrameBuffer;
189};
190
191} // namespace sf
192
193
194#endif // SFML_POSTFX_HPP
Abstract base class for every object that can be drawn into a render window.
Definition Drawable.hpp:59
Image is the low-level class for loading and manipulating images.
Definition Image.hpp:47
PostFX is used to apply a post effect to a window.
Definition PostFX.hpp:44
Base class for all render targets (window, image, ...)