00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00021
00022
00023 #ifndef H_SPK_SFMLRENDERER
00024 #define H_SPK_SFMLRENDERER
00025
00026 #include "RenderingAPIs/SFML/SPK_SFML_DEF.h"
00027 #include "Core/SPK_Renderer.h"
00028 #include "RenderingAPIs/SFML/SPK_SFMLSystem.h"
00029
00030 namespace SPK
00031 {
00032 namespace SFML
00033 {
00039 enum ResizeMode
00040 {
00041 RESIZE_NONE,
00042 RESIZE_ZOOM_X,
00043 RESIZE_ZOOM_Y,
00044 };
00045
00067 class SPK_SFML_PREFIX SFMLRenderer : public Renderer
00068 {
00069 public :
00070
00072
00074
00076 SFMLRenderer();
00077
00079
00081
00083 virtual ~SFMLRenderer();
00084
00086
00088
00093 void setBlendMode(sf::Blend::Mode mode);
00094 virtual void setBlending(BlendingMode blendMode);
00095
00105 void setGroundCulling(bool cull);
00106
00108
00110
00115 sf::Blend::Mode getBlendMode() const;
00116
00125 bool hasGroundCulling() const;
00126
00128
00130
00131 void render(const Group& group);
00132
00134
00136
00147 static void setZFactor(float zFactor);
00148
00156 static float getZFactor();
00157
00166 static void bindCurrentTarget(sf::RenderTarget& target);
00167
00173 static void releaseCurrentTarget();
00174
00184 static void bindCurrentSystem(const SFMLSystem& system) {}
00185
00194 static void releaseCurrentSystem() {}
00195
00196 protected :
00197
00202 static sf::RenderTarget* getCurrentTarget();
00203
00208 static float getViewZoom(ResizeMode mode);
00209
00210
00211 private :
00212
00213 static float zFactor;
00214
00215 static sf::RenderTarget* currentTarget;
00216
00217 sf::Blend::Mode blendMode;
00218
00219 bool groundCulling;
00220
00221 void initBlending() const;
00222
00231 virtual void innerRender(const Group& group) = 0;
00232 };
00233
00234
00235 inline void SFMLRenderer::setBlendMode(sf::Blend::Mode mode)
00236 {
00237 blendMode = mode;
00238 }
00239
00240 inline void SFMLRenderer::setGroundCulling(bool cull)
00241 {
00242 groundCulling = cull;
00243 }
00244
00245 inline sf::Blend::Mode SFMLRenderer::getBlendMode() const
00246 {
00247 return blendMode;
00248 }
00249
00250 inline bool SFMLRenderer::hasGroundCulling() const
00251 {
00252 return groundCulling;
00253 }
00254
00255 inline void SFMLRenderer::initBlending() const
00256 {
00257 if (blendMode == sf::Blend::None)
00258 glDisable(GL_BLEND);
00259 else
00260 {
00261 glEnable(GL_BLEND);
00262
00263 switch (blendMode)
00264 {
00265 case sf::Blend::Alpha :
00266 glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
00267 break;
00268
00269 case sf::Blend::Add :
00270 glBlendFunc(GL_SRC_ALPHA,GL_ONE);
00271 break;
00272
00273 case sf::Blend::Multiply :
00274 glBlendFunc(GL_DST_COLOR,GL_ZERO);
00275 break;
00276 }
00277 }
00278 }
00279 }}
00280
00281 #endif