postpone the 'loadPlugin' for static eglPlugin, so that the init and exit happen in the same thread. When you don't call unloadPlugin, the program may crash when exiting in SHARED_MEMORY_SERVER mode.
39 lines
1.4 KiB
C++
39 lines
1.4 KiB
C++
#ifndef B3_PLUGIN_MANAGER_H
|
|
#define B3_PLUGIN_MANAGER_H
|
|
|
|
#include "plugins/b3PluginAPI.h"
|
|
|
|
enum b3PluginManagerTickMode
|
|
{
|
|
B3_PRE_TICK_MODE=1,
|
|
B3_POST_TICK_MODE,
|
|
B3_PROCESS_CLIENT_COMMANDS_TICK,
|
|
};
|
|
|
|
class b3PluginManager
|
|
{
|
|
struct b3PluginManagerInternalData* m_data;
|
|
|
|
public:
|
|
|
|
b3PluginManager(class PhysicsCommandProcessorInterface* physSdk);
|
|
virtual ~b3PluginManager();
|
|
|
|
int loadPlugin(const char* pluginPath, const char* postFixStr ="");
|
|
void unloadPlugin(int pluginUniqueId);
|
|
int executePluginCommand(int pluginUniqueId, const struct b3PluginArguments* arguments);
|
|
void addEvents(const struct b3VRControllerEvent* vrControllerEvents, int numVRControllerEvents, const struct b3KeyboardEvent* keyEvents, int numKeyEvents, const struct b3MouseEvent* mouseEvents, int numMouseEvents);
|
|
void clearEvents();
|
|
|
|
void addNotification(const struct b3Notification& notification);
|
|
void reportNotifications();
|
|
|
|
void tickPlugins(double timeStep, b3PluginManagerTickMode tickMode);
|
|
|
|
int registerStaticLinkedPlugin(const char* pluginPath, PFN_INIT initFunc, PFN_EXIT exitFunc, PFN_EXECUTE executeCommandFunc, PFN_TICK preTickFunc, PFN_TICK postTickFunc, PFN_GET_RENDER_INTERFACE getRendererFunc, PFN_TICK processClientCommandsFunc, bool initPlugin=true);
|
|
void selectPluginRenderer(int pluginUniqueId);
|
|
UrdfRenderingInterface* getRenderInterface();
|
|
};
|
|
|
|
#endif //B3_PLUGIN_MANAGER_H
|