00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024
00025 #ifndef SFML_POSTFX_HPP
00026 #define SFML_POSTFX_HPP
00027
00029
00031 #include <SFML/Graphics/Drawable.hpp>
00032 #include <SFML/Graphics/Image.hpp>
00033 #include <SFML/Graphics/VideoResource.hpp>
00034 #include <map>
00035 #include <string>
00036
00037
00041 class SFML_API sfPostFX : public sfDrawable, public sf_private::sfVideoResource
00042 {
00043 public :
00044
00049 sfPostFX();
00050
00057 sfPostFX(const std::string& Filename);
00058
00065 sfPostFX(const sfPostFX& Copy);
00066
00071 ~sfPostFX();
00072
00081 bool LoadFromFile(const std::string& Filename);
00082
00090 void SetParameter(const std::string& Name, float X);
00091
00099 void SetParameter(const std::string& Name, float X, float Y);
00100
00108 void SetParameter(const std::string& Name, float X, float Y, float Z);
00109
00117 void SetParameter(const std::string& Name, float X, float Y, float Z, float W);
00118
00126 void SetTexture(const std::string& Name, sfImage* Image);
00127
00136 sfPostFX& operator =(const sfPostFX& Other);
00137
00144 static bool CanUsePostFX();
00145
00146 protected :
00147
00152 virtual void Render(sfRenderWindow& Window);
00153
00154 private :
00155
00165 static std::string PreprocessEffect(const std::string& Filename);
00166
00176 bool CreateAndAttachShader(const std::string& Source, unsigned int ShaderType);
00177
00182 void CreateProgram();
00183
00188 virtual void DestroyVideoResources();
00189
00191
00193 unsigned int myShaderProgram;
00194 std::map<std::string, sfImage*> mySamplers;
00195 std::string myFragmentShader;
00196 sfImage myFrameBuffer;
00197 };
00198
00199
00200 #endif // SFML_POSTFX_HPP