1 /*
2 -----------------------------------------------------------------------------
3 This source file is part of OGRE
4 (Object-oriented Graphics Rendering Engine)
5 For the latest info, see http://www.ogre3d.org/
6 
7 Copyright (c) 2000-2013 Torus Knot Software Ltd
8 Also see acknowledgements in Readme.html
9 
10 You may use this sample code for anything you like, it is not covered by the
11 same license as the rest of the engine.
12 -----------------------------------------------------------------------------
13 */
14 /*
15 -----------------------------------------------------------------------------
16 Filename:    StaticPluginLoader.h
17 Description: Utility class to load plugins statically
18 -----------------------------------------------------------------------------
19 */
20 
21 #ifndef __StaticPluginLoader_H__
22 #define __StaticPluginLoader_H__
23 
24 #include "Ogre.h"
25 #include "OgreConfigFile.h"
26 // Static plugin headers
27 #ifdef OGRE_STATIC_CgProgramManager
28 #  include "OgreCgPlugin.h"
29 #endif
30 #ifdef OGRE_STATIC_OctreeSceneManager
31 #  include "OgreOctreePlugin.h"
32 #endif
33 #ifdef OGRE_STATIC_ParticleFX
34 #  include "OgreParticleFXPlugin.h"
35 #endif
36 #ifdef OGRE_STATIC_BSPSceneManager
37 #  include "OgreBspSceneManagerPlugin.h"
38 #endif
39 #ifdef OGRE_STATIC_GL
40 #  include "OgreGLPlugin.h"
41 #endif
42 #ifdef OGRE_STATIC_GLES
43 #  include "OgreGLESPlugin.h"
44 #endif
45 #ifdef OGRE_STATIC_GLES2
46 #  include "OgreGLES2Plugin.h"
47 #endif
48 #ifdef OGRE_STATIC_Direct3D9
49 #  include "OgreD3D9Plugin.h"
50 #endif
51 #ifdef OGRE_STATIC_Direct3D10
52 #  include "OgreD3D10Plugin.h"
53 #endif
54 #ifdef OGRE_STATIC_PCZSceneManager
55 #  include "OgrePCZPlugin.h"
56 #endif
57 #ifdef OGRE_STATIC_OctreeZone
58 #  include "OgreOctreeZonePlugin.h"
59 #endif
60 
61 namespace Ogre
62 {
63 	/** Utility class for loading some plugins statically.
64 	@remarks
65 		When loading plugins statically, you are limited to loading plugins
66 		that are known about at compile time. You should define preprocessor
67 		symbols depending on which plugins you want to load - the symbol being
68 		OGRE_STATIC_<pluginname>, with pluginname being the usual name of the
69 		plugin DLL (no file extension, no debug suffix, and without the Plugin_
70 		or RenderSystem_ prefix.)
71 	*/
72 	class StaticPluginLoader
73 	{
74 	protected:
75 #ifdef OGRE_STATIC_CgProgramManager
76 		CgPlugin* mCgPlugin;
77 #endif
78 #ifdef OGRE_STATIC_OctreeSceneManager
79 		OctreePlugin* mOctreePlugin;
80 #endif
81 #ifdef OGRE_STATIC_ParticleFX
82 		ParticleFXPlugin* mParticleFXPlugin;
83 #endif
84 #ifdef OGRE_STATIC_BSPSceneManager
85 		BspSceneManagerPlugin* mBSPPlugin;
86 #endif
87 #ifdef OGRE_STATIC_PCZSceneManager
88 		PCZPlugin* mPCZPlugin;
89 #endif
90 #ifdef OGRE_STATIC_OctreeZone
91 		OctreeZonePlugin* mOctreeZonePlugin;
92 #endif
93 #ifdef OGRE_STATIC_GL
94 		GLPlugin* mGLPlugin;
95 #endif
96 #ifdef OGRE_STATIC_GLES
97 		GLESPlugin* mGLESPlugin;
98 #endif
99 #ifdef OGRE_STATIC_GLES2
100 		GLES2Plugin* mGLES2Plugin;
101 #endif
102 #ifdef OGRE_STATIC_Direct3D9
103 		D3D9Plugin* mD3D9Plugin;
104 #endif
105 #ifdef OGRE_STATIC_Direct3D10
106 		D3D10Plugin* mD3D10Plugin;
107 #endif
108 	public:
StaticPluginLoader()109 		StaticPluginLoader() {}
110 
111 		/** Load all the enabled plugins against the passed in root object. */
load()112 		void load()
113 		{
114 			Root& root  = Root::getSingleton();
115 #ifdef OGRE_STATIC_GL
116 			mGLPlugin = OGRE_NEW GLPlugin();
117 			root.installPlugin(mGLPlugin);
118 #endif
119 #ifdef OGRE_STATIC_GLES
120 			mGLESPlugin = OGRE_NEW GLESPlugin();
121 			root.installPlugin(mGLESPlugin);
122 #endif
123 #ifdef OGRE_STATIC_GLES2
124 			mGLES2Plugin = OGRE_NEW GLES2Plugin();
125 			root.installPlugin(mGLES2Plugin);
126 #endif
127 #ifdef OGRE_STATIC_Direct3D9
128 			mD3D9Plugin = OGRE_NEW D3D9Plugin();
129 			root.installPlugin(mD3D9Plugin);
130 #endif
131 #ifdef OGRE_STATIC_Direct3D10
132 			mD3D10Plugin = OGRE_NEW D3D10Plugin();
133 			root.installPlugin(mD3D10Plugin);
134 #endif
135 #ifdef OGRE_STATIC_CgProgramManager
136 			mCgPlugin = OGRE_NEW CgPlugin();
137 			root.installPlugin(mCgPlugin);
138 #endif
139 #ifdef OGRE_STATIC_OctreeSceneManager
140 			mOctreePlugin = OGRE_NEW OctreePlugin();
141 			root.installPlugin(mOctreePlugin);
142 #endif
143 #ifdef OGRE_STATIC_ParticleFX
144 			mParticleFXPlugin = OGRE_NEW ParticleFXPlugin();
145 			root.installPlugin(mParticleFXPlugin);
146 #endif
147 #ifdef OGRE_STATIC_BSPSceneManager
148 			mBSPPlugin = OGRE_NEW BspSceneManagerPlugin();
149 			root.installPlugin(mBSPPlugin);
150 #endif
151 #ifdef OGRE_STATIC_PCZSceneManager
152 			mPCZPlugin = OGRE_NEW PCZPlugin();
153 			root.installPlugin(mPCZPlugin);
154 #endif
155 #ifdef OGRE_STATIC_OctreeZone
156 			mOctreeZonePlugin = OGRE_NEW OctreeZonePlugin();
157 			root.installPlugin(mOctreeZonePlugin);
158 #endif
159 		}
160 
unload()161 		void unload()
162 		{
163 			// don't unload plugins, since Root will have done that. Destroy here.
164 #ifdef OGRE_STATIC_OctreeZone
165 			OGRE_DELETE mOctreeZonePlugin;
166 #endif
167 #ifdef OGRE_STATIC_PCZSceneManager
168 			OGRE_DELETE mPCZPlugin;
169 #endif
170 #ifdef OGRE_STATIC_BSPSceneManager
171 			OGRE_DELETE mBSPPlugin;
172 #endif
173 #ifdef OGRE_STATIC_ParticleFX
174 			OGRE_DELETE mParticleFXPlugin;
175 #endif
176 #ifdef OGRE_STATIC_OctreeSceneManager
177 			OGRE_DELETE mOctreePlugin;
178 #endif
179 #ifdef OGRE_STATIC_CgProgramManager
180 			OGRE_DELETE mCgPlugin;
181 #endif
182 #ifdef OGRE_STATIC_Direct3D9
183 			OGRE_DELETE mD3D9Plugin;
184 #endif
185 #ifdef OGRE_STATIC_Direct3D10
186 			OGRE_DELETE mD3D10Plugin;
187 #endif
188 #ifdef OGRE_STATIC_GL
189 			OGRE_DELETE mGLPlugin;
190 #endif
191 #ifdef OGRE_STATIC_GLES
192 			OGRE_DELETE mGLESPlugin;
193 #endif
194 #ifdef OGRE_STATIC_GLES2
195 			OGRE_DELETE mGLES2Plugin;
196 #endif
197 
198 		}
199 
200 	};
201 
202 }
203 
204 #endif
205