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_SHADER_HPP
00026 #define SFML_SHADER_HPP
00027
00029
00031 #include <SFML/Config.hpp>
00032 #include <SFML/Graphics/Texture.hpp>
00033 #include <SFML/Window/GlResource.hpp>
00034 #include <SFML/System/Vector2.hpp>
00035 #include <SFML/System/Vector3.hpp>
00036 #include <map>
00037 #include <string>
00038
00039
00040 namespace sf
00041 {
00042 class Renderer;
00043
00048 class SFML_API Shader : GlResource
00049 {
00050 public :
00051
00058 Shader();
00059
00066 Shader(const Shader& copy);
00067
00072 ~Shader();
00073
00090 bool LoadFromFile(const std::string& filename);
00091
00107 bool LoadFromMemory(const std::string& shader);
00108
00124 bool LoadFromStream(InputStream& stream);
00125
00144 void SetParameter(const std::string& name, float x);
00145
00165 void SetParameter(const std::string& name, float x, float y);
00166
00187 void SetParameter(const std::string& name, float x, float y, float z);
00188
00210 void SetParameter(const std::string& name, float x, float y, float z, float w);
00211
00230 void SetParameter(const std::string& name, const Vector2f& vector);
00231
00250 void SetParameter(const std::string& name, const Vector3f& vector);
00251
00278 void SetTexture(const std::string& name, const Texture& texture);
00279
00299 void SetCurrentTexture(const std::string& name);
00300
00317 void Bind() const;
00318
00329 void Unbind() const;
00330
00339 Shader& operator =(const Shader& right);
00340
00351 static bool IsAvailable();
00352
00353 private :
00354
00355 friend class Renderer;
00356
00363 bool CompileProgram();
00364
00372 void BindTextures() const;
00373
00382 void Use() const;
00383
00385
00387 typedef std::map<int, const Texture*> TextureTable;
00388
00390
00392 unsigned int myShaderProgram;
00393 int myCurrentTexture;
00394 TextureTable myTextures;
00395 std::string myFragmentShader;
00396 };
00397
00398 }
00399
00400
00401 #endif // SFML_SHADER_HPP
00402
00403