bf4183c01b6f28557cf3cd178434dac0eff89c25
[TDDC76_proj.git] /
1 ////////////////////////////////////////////////////////////
2 //
3 // SFML - Simple and Fast Multimedia Library
4 // Copyright (C) 2007-2013 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 //
23 ////////////////////////////////////////////////////////////
24
25 #ifndef SFML_RENDERSTATES_HPP
26 #define SFML_RENDERSTATES_HPP
27
28 ////////////////////////////////////////////////////////////
29 // Headers
30 ////////////////////////////////////////////////////////////
31 #include <SFML/Graphics/Export.hpp>
32 #include <SFML/Graphics/BlendMode.hpp>
33 #include <SFML/Graphics/Transform.hpp>
34
35
36 namespace sf
37 {
38 class Shader;
39 class Texture;
40
41 ////////////////////////////////////////////////////////////
42 /// \brief Define the states used for drawing to a RenderTarget
43 ///
44 ////////////////////////////////////////////////////////////
45 class SFML_GRAPHICS_API RenderStates
46 {
47 public :
48
49 ////////////////////////////////////////////////////////////
50 /// \brief Default constructor
51 ///
52 /// Constructing a default set of render states is equivalent
53 /// to using sf::RenderStates::Default.
54 /// The default set defines:
55 /// \li the BlendAlpha blend mode
56 /// \li the identity transform
57 /// \li a null texture
58 /// \li a null shader
59 ///
60 ////////////////////////////////////////////////////////////
61 RenderStates();
62
63 ////////////////////////////////////////////////////////////
64 /// \brief Construct a default set of render states with a custom blend mode
65 ///
66 /// \param theBlendMode Blend mode to use
67 ///
68 ////////////////////////////////////////////////////////////
69 RenderStates(BlendMode theBlendMode);
70
71 ////////////////////////////////////////////////////////////
72 /// \brief Construct a default set of render states with a custom transform
73 ///
74 /// \param theTransform Transform to use
75 ///
76 ////////////////////////////////////////////////////////////
77 RenderStates(const Transform& theTransform);
78
79 ////////////////////////////////////////////////////////////
80 /// \brief Construct a default set of render states with a custom texture
81 ///
82 /// \param theTexture Texture to use
83 ///
84 ////////////////////////////////////////////////////////////
85 RenderStates(const Texture* theTexture);
86
87 ////////////////////////////////////////////////////////////
88 /// \brief Construct a default set of render states with a custom shader
89 ///
90 /// \param theShader Shader to use
91 ///
92 ////////////////////////////////////////////////////////////
93 RenderStates(const Shader* theShader);
94
95 ////////////////////////////////////////////////////////////
96 /// \brief Construct a set of render states with all its attributes
97 ///
98 /// \param theBlendMode Blend mode to use
99 /// \param theTransform Transform to use
100 /// \param theTexture Texture to use
101 /// \param theShader Shader to use
102 ///
103 ////////////////////////////////////////////////////////////
104 RenderStates(BlendMode theBlendMode, const Transform& theTransform,
105 const Texture* theTexture, const Shader* theShader);
106
107 ////////////////////////////////////////////////////////////
108 // Static member data
109 ////////////////////////////////////////////////////////////
110 static const RenderStates Default; ///< Special instance holding the default render states
111
112 ////////////////////////////////////////////////////////////
113 // Member data
114 ////////////////////////////////////////////////////////////
115 BlendMode blendMode; ///< Blending mode
116 Transform transform; ///< Transform
117 const Texture* texture; ///< Texture
118 const Shader* shader; ///< Shader
119 };
120
121 } // namespace sf
122
123
124 #endif // SFML_RENDERSTATES_HPP
125
126
127 ////////////////////////////////////////////////////////////
128 /// \class sf::RenderStates
129 /// \ingroup graphics
130 ///
131 /// There are four global states that can be applied to
132 /// the drawn objects:
133 /// \li the blend mode: how pixels of the object are blended with the background
134 /// \li the transform: how the object is positioned/rotated/scaled
135 /// \li the texture: what image is mapped to the object
136 /// \li the shader: what custom effect is applied to the object
137 ///
138 /// High-level objects such as sprites or text force some of
139 /// these states when they are drawn. For example, a sprite
140 /// will set its own texture, so that you don't have to care
141 /// about it when drawing the sprite.
142 ///
143 /// The transform is a special case: sprites, texts and shapes
144 /// (and it's a good idea to do it with your own drawable classes
145 /// too) combine their transform with the one that is passed in the
146 /// RenderStates structure. So that you can use a "global" transform
147 /// on top of each object's transform.
148 ///
149 /// Most objects, especially high-level drawables, can be drawn
150 /// directly without defining render states explicitely -- the
151 /// default set of states is ok in most cases.
152 /// \code
153 /// window.Draw(sprite);
154 /// \endcode
155 ///
156 /// If you want to use a single specific render state,
157 /// for example a shader, you can pass it directly to the Draw
158 /// function: sf::RenderStates has an implicit one-argument
159 /// constructor for each state.
160 /// \code
161 /// window.draw(sprite, shader);
162 /// \endcode
163 ///
164 /// When you're inside the Draw function of a drawable
165 /// object (inherited from sf::Drawable), you can
166 /// either pass the render states unmodified, or change
167 /// some of them.
168 /// For example, a transformable object will combine the
169 /// current transform with its own transform. A sprite will
170 /// set its texture. Etc.
171 ///
172 /// \see sf::RenderTarget, sf::Drawable
173 ///
174 ////////////////////////////////////////////////////////////