source: nrEngine/include/PluginLoader.h @ 32

Revision 32, 3.5 KB checked in by art, 12 years ago (diff)
Line 
1/***************************************************************************
2 *                                                                         *
3 *   (c) Art Tevs, MPI Informatik Saarbruecken                             *
4 *       mailto: <tevs@mpi-sb.mpg.de>                                      *
5 *                                                                         *
6 *   This program is free software; you can redistribute it and/or modify  *
7 *   it under the terms of the GNU General Public License as published by  *
8 *   the Free Software Foundation; either version 2 of the License, or     *
9 *   (at your option) any later version.                                   *
10 *                                                                         *
11 ***************************************************************************/
12
13
14#ifndef _NR_PLUGIN_RESOURCE_LOADER_H_
15#define _NR_PLUGIN_RESOURCE_LOADER_H_
16
17//----------------------------------------------------------------------------------
18// Includes
19//----------------------------------------------------------------------------------
20#include "Prerequisities.h"
21#include "ResourceLoader.h"
22#include "Plugin.h"
23#include "ScriptEngine.h"
24
25//----------------------------------------------------------------------------------
26// Define the library loading functions on the appropriate OS API
27//----------------------------------------------------------------------------------
28#if NR_PLATFORM == NR_PLATFORM_WIN32
29#    define NR_PLUGIN_LOAD( a ) LoadLibrary( a )
30#    define NR_PLUGIN_GETSYM( a, b ) GetProcAddress( a, b )
31#    define NR_PLUGIN_UNLOAD( a ) FreeLibrary( a )
32
33#elif NR_PLATFORM == NR_PLATFORM_LINUX
34#    define NR_PLUGIN_LOAD( a ) dlopen( a, RTLD_LAZY )
35#    define NR_PLUGIN_GETSYM( a, b ) dlsym( a, b )
36#    define NR_PLUGIN_UNLOAD( a ) dlclose( a )
37
38#elif NR_PLATFORM == NR_PLATFORM_APPLE
39#    define NR_PLUGIN_LOAD( a ) mac_loadExeBundle( a )
40#    define NR_PLUGIN_GETSYM( a, b ) mac_getBundleSym( a, b )
41#    define NR_PLUGIN_UNLOAD( a ) mac_unloadExeBundle( a )
42#endif
43
44namespace nrEngine{
45       
46        //! Plugin loader does handle loading/creating of plugin libraries for the engine
47        /**
48        * This is a derived class from ResourceLoader. This class does support loading
49        * of plugins (*.so, *.dll).
50        *
51        * @see IResourceLoader
52        * \ingroup plugin
53        **/
54        class _NRExport PluginLoader : public IResourceLoader{
55        public:
56                       
57                /**
58                * Declare supported resource types and supported files.
59                **/
60                PluginLoader();
61               
62                /**
63                * Destructor
64                **/
65                ~PluginLoader();
66
67               
68        private:
69       
70                /**
71                * Initialize supported resource and file types
72                * @see IResourceLoader::initialize()
73                **/
74                Result initializeResourceLoader();
75
76                /**
77                 * @see IResourceLoader::loadImpl()
78                 **/
79                Result loadResourceImpl(IResource* res, const std::string& fileName, PropertyList* param = NULL);
80
81                /**
82                 * @see IResourceLoader::createImpl()
83                 **/
84                IResource* createResourceImpl(const std::string& resourceType, PropertyList* params = NULL);
85                       
86                /**
87                 * @see IResourceLoader::createEmpty()
88                 **/
89                IResource* createEmptyResource(const std::string& resourceType);
90
91                /**
92                 * Unload the given plugin resource
93                 **/
94                Result unloadResourceImpl(IResource*);
95
96                /**
97                 * Returns the last error of the dynamic library
98                 **/
99                std::string getLastPluginError();
100               
101                /**
102                 * @see IResourceLoader::getSuffix()
103                 **/
104                std::string getSuffix(const std::string& resType);
105
106
107                //! New scripting function to allow loading of plugins
108                ScriptFunctionDef(loadPlugin);
109               
110        };
111
112};
113
114#endif
Note: See TracBrowser for help on using the repository browser.