Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/RenderSystems/GL/src/OgreGLGpuProgramManager.cpp @ 1

Last change on this file since 1 was 1, checked in by landauf, 17 years ago
File size: 4.2 KB
Line 
1/*
2-----------------------------------------------------------------------------
3This source file is part of OGRE
4(Object-oriented Graphics Rendering Engine)
5For the latest info, see http://www.ogre3d.org/
6
7Copyright (c) 2000-2006 Torus Knot Software Ltd
8Also see acknowledgements in Readme.html
9
10This program is free software; you can redistribute it and/or modify it under
11the terms of the GNU Lesser General Public License as published by the Free Software
12Foundation; either version 2 of the License, or (at your option) any later
13version.
14
15This program is distributed in the hope that it will be useful, but WITHOUT
16ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
18
19You should have received a copy of the GNU Lesser General Public License along with
20this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21Place - Suite 330, Boston, MA 02111-1307, USA, or go to
22http://www.gnu.org/copyleft/lesser.txt.
23
24You may alternatively use this source under the terms of a specific version of
25the OGRE Unrestricted License provided you have obtained such a license from
26Torus Knot Software Ltd.
27-----------------------------------------------------------------------------
28*/
29
30#include "OgreGLGpuProgramManager.h"
31#include "OgreGLGpuProgram.h"
32#include "OgreLogManager.h"
33
34using namespace Ogre;
35
36GLGpuProgramManager::GLGpuProgramManager()
37{
38    // Superclass sets up members
39
40    // Register with resource group manager
41    ResourceGroupManager::getSingleton()._registerResourceManager(mResourceType, this);
42}
43
44
45GLGpuProgramManager::~GLGpuProgramManager()
46{
47    // Unregister with resource group manager
48    ResourceGroupManager::getSingleton()._unregisterResourceManager(mResourceType);
49}
50
51bool GLGpuProgramManager::registerProgramFactory(const String& syntaxCode, CreateGpuProgramCallback createFn)
52{
53    return mProgramMap.insert(ProgramMap::value_type(syntaxCode, createFn)).second;
54}
55
56bool GLGpuProgramManager::unregisterProgramFactory(const String& syntaxCode)
57{
58    return mProgramMap.erase(syntaxCode) != 0;
59}
60
61/// @copydoc ResourceManager::createImpl
62Resource* GLGpuProgramManager::createImpl(const String& name, ResourceHandle handle, 
63                     const String& group, bool isManual, ManualResourceLoader* loader,
64                     const NameValuePairList* params)
65{
66    NameValuePairList::const_iterator paramSyntax, paramType;
67
68    if (!params || (paramSyntax = params->find("syntax")) == params->end() ||
69        (paramType = params->find("type")) == params->end())
70    {
71        OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS, 
72            "You must supply 'syntax' and 'type' parameters",
73            "GLGpuProgramManager::createImpl");
74    }
75
76    ProgramMap::const_iterator iter = mProgramMap.find(paramSyntax->second);
77    if(iter == mProgramMap.end())
78    {
79        // No factory, this is an unsupported syntax code, probably for another rendersystem
80        // Create a basic one, it doesn't matter what it is since it won't be used
81        return new GLGpuProgram(this, name, handle, group, isManual, loader);
82    }
83
84    GpuProgramType gpt;
85    if (paramType->second == "vertex_program")
86    {
87        gpt = GPT_VERTEX_PROGRAM;
88    }
89    else
90    {
91        gpt = GPT_FRAGMENT_PROGRAM;
92    }
93
94    return (iter->second)(this, name, handle, group, isManual, loader, gpt, paramSyntax->second);
95
96}
97
98Resource* GLGpuProgramManager::createImpl(const String& name, ResourceHandle handle, 
99                     const String& group, bool isManual, ManualResourceLoader* loader,
100                     GpuProgramType gptype, const String& syntaxCode)
101{
102    ProgramMap::const_iterator iter = mProgramMap.find(syntaxCode);
103    if(iter == mProgramMap.end())
104    {
105        // No factory, this is an unsupported syntax code, probably for another rendersystem
106        // Create a basic one, it doesn't matter what it is since it won't be used
107        return new GLGpuProgram(this, name, handle, group, isManual, loader);
108    }
109   
110    return (iter->second)(this, name, handle, group, isManual, loader, gptype, syntaxCode);
111}
112
Note: See TracBrowser for help on using the repository browser.