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
Drawable(const Vector2f &Position=Vector2f(0, 0), const Vector2f &Scale=Vector2f(1, 1), float Rotation=0.f, const Color &Col=Color(255, 255, 255, 255))
Default constructor.
Definition Drawable.cpp:39
Image is the low-level class for loading and manipulating images.
Definition Image.hpp:47
bool LoadFromFile(const std::string &Filename)
Load the effect from a file.
Definition PostFX.cpp:89
PostFX()
Default constructor.
Definition PostFX.cpp:43
void SetTexture(const std::string &Name, Image *Texture)
Set a texture parameter.
Definition PostFX.cpp:222
void SetParameter(const std::string &Name, float X)
Change a parameter of the effect (1 float).
Definition PostFX.cpp:130
bool LoadFromMemory(const std::string &Effect)
Load the effect from a text in memory.
Definition PostFX.cpp:112
static bool CanUsePostFX()
Tell whether or not the system supports post-effects.
Definition PostFX.cpp:265
virtual void Render(RenderTarget &Target) const
/see Drawable::Render
Definition PostFX.cpp:280