# OgreHighLevelGpuProgramManager.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-2006 Torus Knot Software Ltd
    00008 Also see acknowledgements in Readme.html
    00009
    00010 This program is free software; you can redistribute it and/or modify it under
    00011 the terms of the GNU Lesser General Public License as published by the Free Software
    00012 Foundation; either version 2 of the License, or (at your option) any later
    00013 version.
    00014
    00015 This program is distributed in the hope that it will be useful, but WITHOUT
    00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
    00018
    00019 You should have received a copy of the GNU Lesser General Public License along with
    00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
    00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
    00022 http://www.gnu.org/copyleft/lesser.txt.
    00023
    00024 You may alternatively use this source under the terms of a specific version of
    00025 the OGRE Unrestricted License provided you have obtained such a license from
    00026 Torus Knot Software Ltd.
    00027 -----------------------------------------------------------------------------
    00028 */
    00029 #ifndef __HighLevelGpuProgramManager_H__
    00030 #define __HighLevelGpuProgramManager_H__
    00031
    00032 #include "OgrePrerequisites.h"
    00033 #include "OgreResourceManager.h"
    00034 #include "OgreSingleton.h"
    00035 #include "OgreException.h"
    00036 #include "OgreHighLevelGpuProgram.h"
    00037
    00038 namespace Ogre {
    00039
    00041     class _OgreExport HighLevelGpuProgramFactory : public FactoryAlloc
    00042     {
    00043     public:
    00044         HighLevelGpuProgramFactory() {}
    00045         virtual ~HighLevelGpuProgramFactory();
    00047         virtual const String& getLanguage(void) const = 0;
    00048         virtual HighLevelGpuProgram* create(ResourceManager* creator,
    00049             const String& name, ResourceHandle handle,
    00050             const String& group, bool isManual, ManualResourceLoader* loader) = 0;
    00051         virtual void destroy(HighLevelGpuProgram* prog) = 0;
    00052     };
    00066     class _OgreExport HighLevelGpuProgramManager
    00067         : public ResourceManager, public Singleton<HighLevelGpuProgramManager>
    00068     {
    00069     public:
    00070         typedef std::map<String, HighLevelGpuProgramFactory*> FactoryMap;
    00071     protected:
    00073         FactoryMap mFactories;
    00074
    00076         HighLevelGpuProgramFactory* mNullFactory;
    00078         HighLevelGpuProgramFactory* mUnifiedFactory;
    00079
    00080         HighLevelGpuProgramFactory* getFactory(const String& language);
    00081
    00083         Resource* createImpl(const String& name, ResourceHandle handle,
    00084             const String& group, bool isManual, ManualResourceLoader* loader,
    00085             const NameValuePairList* params);
    00086     public:
    00087         HighLevelGpuProgramManager();
    00088         ~HighLevelGpuProgramManager();
    00090         void addFactory(HighLevelGpuProgramFactory* factory);
    00092         void removeFactory(HighLevelGpuProgramFactory* factory);
    00093
    00094
    00106         virtual HighLevelGpuProgramPtr createProgram(
    00107             const String& name, const String& groupName,
    00108             const String& language, GpuProgramType gptype);
    00109
    00125         static HighLevelGpuProgramManager& getSingleton(void);
    00141         static HighLevelGpuProgramManager* getSingletonPtr(void);
    00142
    00143
    00144     };
    00145
    00146 }
    00147
    00148 #endif

Copyright © 2008 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sat Apr 11 14:26:40 2009