00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _CEGUIRenderEffectManager_h
00029 #define _CEGUIRenderEffectManager_h_
00030
00031 #include "CEGUISingleton.h"
00032 #include "CEGUIIteratorBase.h"
00033 #include "CEGUILogger.h"
00034 #include "CEGUIExceptions.h"
00035 #include "CEGUIRenderEffectFactory.h"
00036 #include <map>
00037
00038 #if defined(_MSC_VER)
00039 # pragma warning(push)
00040 # pragma warning(disable : 4251)
00041 #endif
00042
00043
00044 namespace CEGUI
00045 {
00051 class CEGUIEXPORT RenderEffectManager : public Singleton<RenderEffectManager>
00052 {
00053 private:
00055 typedef std::map<String,
00056 RenderEffectFactory*,
00057 String::FastLessCompare> RenderEffectRegistry;
00058
00060 typedef std::map<RenderEffect*, RenderEffectFactory*> EffectCreatorMap;
00061
00063 RenderEffectRegistry d_effectRegistry;
00065 EffectCreatorMap d_effects;
00066
00067 public:
00069 typedef ConstBaseIterator<RenderEffectRegistry> RenderEffectIterator;
00070
00072 RenderEffectManager();
00073
00075 ~RenderEffectManager();
00076
00097 template <typename T>
00098 void addEffect(const String& name);
00099
00116 void removeEffect(const String& name);
00117
00130 bool isEffectAvailable(const String& name) const;
00131
00148 RenderEffect& create(const String& name);
00149
00167 void destroy(RenderEffect& effect);
00168 };
00169
00170
00171 template <typename T>
00172 void RenderEffectManager::addEffect(const String& name)
00173 {
00174 if (isEffectAvailable(name))
00175 CEGUI_THROW(AlreadyExistsException("RenderEffectManager::addEffect: "
00176 "A RenderEffect is already registered under the name '" +
00177 name + "'"));
00178
00179
00180 d_effectRegistry[name] = new TplRenderEffectFactory<T>;
00181
00182 Logger::getSingleton().logEvent(
00183 "Registered RenderEffect named '" + name + "'");
00184 }
00185
00186
00187
00188
00189 }
00190
00191 #if defined(_MSC_VER)
00192 # pragma warning(pop)
00193 #endif
00194
00195 #endif // end of guard _CEGUIRenderEffectManager_h_
00196