00001 00002 // 00003 // SFML - Simple and Fast Multimedia Library 00004 // Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) 00005 // 00006 // This software is provided 'as-is', without any express or implied warranty. 00007 // In no event will the authors be held liable for any damages arising from the use of this software. 00008 // 00009 // Permission is granted to anyone to use this software for any purpose, 00010 // including commercial applications, and to alter it and redistribute it freely, 00011 // subject to the following restrictions: 00012 // 00013 // 1. The origin of this software must not be misrepresented; 00014 // you must not claim that you wrote the original software. 00015 // If you use this software in a product, an acknowledgment 00016 // in the product documentation would be appreciated but is not required. 00017 // 00018 // 2. Altered source versions must be plainly marked as such, 00019 // and must not be misrepresented as being the original software. 00020 // 00021 // 3. This notice may not be removed or altered from any source distribution. 00022 // 00024 00025 #ifndef SFML_SHADER_HPP 00026 #define SFML_SHADER_HPP 00027 00029 // Headers 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 // Types 00387 typedef std::map<int, const Texture*> TextureTable; 00388 00390 // Member data 00392 unsigned int myShaderProgram; 00393 int myCurrentTexture; 00394 TextureTable myTextures; 00395 std::string myFragmentShader; 00396 }; 00397 00398 } // namespace sf 00399 00400 00401 #endif // SFML_SHADER_HPP 00402 00403
:: Copyright © 2007-2008 Laurent Gomila, all rights reserved :: Documentation generated by doxygen 1.5.2 ::