OgreMaterialManager.h
Go to the documentation of this file.
00001 /*
00002 -----------------------------------------------------------------------------
00003 This source file is part of OGRE
00004     (Object-oriented Graphics Rendering Engine)
00005 For the latest info, see http://www.ogre3d.org/
00006 
00007 Copyright (c) 2000-2013 Torus Knot Software Ltd
00008 
00009 Permission is hereby granted, free of charge, to any person obtaining a copy
00010 of this software and associated documentation files (the "Software"), to deal
00011 in the Software without restriction, including without limitation the rights
00012 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00013 copies of the Software, and to permit persons to whom the Software is
00014 furnished to do so, subject to the following conditions:
00015 
00016 The above copyright notice and this permission notice shall be included in
00017 all copies or substantial portions of the Software.
00018 
00019 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00020 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00021 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00022 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00023 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00024 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00025 THE SOFTWARE.
00026 -----------------------------------------------------------------------------
00027 */
00028 #ifndef __MATERIALMANAGER_H__
00029 #define __MATERIALMANAGER_H__
00030 
00031 #include "OgrePrerequisites.h"
00032 
00033 #include "OgreSingleton.h"
00034 #include "OgreResourceManager.h"
00035 #include "OgreMaterial.h"
00036 #include "OgreStringVector.h"
00037 #include "OgreMaterialSerializer.h"
00038 #include "OgreHeaderPrefix.h"
00039 
00040 namespace Ogre {
00041 
00042 
00064     class _OgreExport MaterialManager : public ResourceManager, public Singleton<MaterialManager>
00065     {
00066     public:
00070         class Listener
00071         {
00072         public:
00074             virtual ~Listener() { }
00104             virtual Technique* handleSchemeNotFound(unsigned short schemeIndex, 
00105                 const String& schemeName, Material* originalMaterial, unsigned short lodIndex, 
00106                 const Renderable* rend) = 0;
00107 
00108         };
00109 
00110     protected:
00111 
00113         FilterOptions mDefaultMinFilter;
00115         FilterOptions mDefaultMagFilter;
00117         FilterOptions mDefaultMipFilter;
00119         FilterOptions mDefaultCompare;
00120 
00121         bool            mDefaultCompareEnabled;
00122         CompareFunction mDefaultCompareFunction;
00123 
00125         unsigned int mDefaultMaxAniso;
00127         OGRE_THREAD_POINTER(MaterialSerializer, mSerializer);
00129         MaterialPtr mDefaultSettings;
00130 
00132         Resource* createImpl(const String& name, ResourceHandle handle, 
00133             const String& group, bool isManual, ManualResourceLoader* loader,
00134             const NameValuePairList* params);
00135 
00137         typedef map<String, unsigned short>::type SchemeMap;
00139         SchemeMap mSchemes;
00141         String mActiveSchemeName;
00143         unsigned short mActiveSchemeIndex;
00144 
00146         typedef list<Listener*>::type ListenerList;
00147         typedef map<String, ListenerList>::type ListenerMap;
00148         ListenerMap mListenerMap;
00149 
00150     public:
00152         static String DEFAULT_SCHEME_NAME;
00153 
00156         MaterialPtr create (const String& name, const String& group,
00157                             bool isManual = false, ManualResourceLoader* loader = 0,
00158                             const NameValuePairList* createParams = 0);
00159         
00162         MaterialPtr getByName(const String& name, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
00163 
00166         MaterialManager();
00167 
00170         virtual ~MaterialManager();
00171 
00174         void initialise(void);
00175         
00178         void parseScript(DataStreamPtr& stream, const String& groupName);
00179 
00180 
00187         virtual void setDefaultTextureFiltering(TextureFilterOptions fo);
00192         virtual void setDefaultTextureFiltering(FilterType ftype, FilterOptions opts);
00197         virtual void setDefaultTextureFiltering(FilterOptions minFilter, FilterOptions magFilter, FilterOptions mipFilter);
00198 
00200         virtual FilterOptions getDefaultTextureFiltering(FilterType ftype) const;
00201 
00208         void setDefaultAnisotropy(unsigned int maxAniso);
00210         unsigned int getDefaultAnisotropy() const;
00211 
00242         virtual MaterialPtr getDefaultSettings(void) const { return mDefaultSettings; }
00243 
00247         virtual unsigned short _getSchemeIndex(const String& name);
00251         virtual const String& _getSchemeName(unsigned short index);
00255         virtual unsigned short _getActiveSchemeIndex(void) const;
00256 
00260         virtual const String& getActiveScheme(void) const;
00261         
00265         virtual void setActiveScheme(const String& schemeName);
00266 
00271         virtual void addListener(Listener* l, const Ogre::String& schemeName = StringUtil::BLANK);
00272 
00277         virtual void removeListener(Listener* l, const Ogre::String& schemeName = StringUtil::BLANK);
00278 
00280         virtual Technique* _arbitrateMissingTechniqueForActiveScheme(
00281             Material* mat, unsigned short lodIndex, const Renderable* rend);
00282 
00298         static MaterialManager& getSingleton(void);
00314         static MaterialManager* getSingletonPtr(void);
00315 
00316     };
00320 }
00321 
00322 #include "OgreHeaderSuffix.h"
00323 
00324 #endif

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Mon Jul 27 2020 13:40:44