This example shows how to register a creator function using a plugin.
In this example, a new creator function is added for creating channels, but the concept applies for adding any kind of creator with a plugin.
The files DtExampleChannel.h and DtExampleChannel.cxx declare and define, respectively, the new type of channel to be created.
{
public:
friend class DtExampleChannelCreator;
virtual ~DtExampleChannel();
protected:
DtExampleChannel(DtDe& de, DtOsgWindow* window, DtChannelConfiguration& channelConfig);
virtual bool initialize();
};
DtExampleChannel::DtExampleChannel( DtDe& de, DtOsgWindow* window, DtChannelConfiguration& channelConfig )
: DtOsgChannel(de, window, channelConfig)
{
}
DtExampleChannel::~DtExampleChannel()
{
}
They also declare and define the creator function that will be registered by the plugin.
{
public:
virtual DtChannel* create(DtDe& de, DtWindow* window, DtChannelConfiguration& config);
};
DtChannel* DtExampleChannelCreator::create( DtDe& de, DtWindow* window, DtChannelConfiguration& config )
{
DtOsgWindow* osgWindow = dynamic_cast<DtOsgWindow*>(window);
if (!osgWindow)
{
return 0;
}
exampleChannelPluginInit.h declares the plugin initialization method.
Finally, exampleChannelPluginInit.cxx performs the standard plugin initialization in its init() method and registers the creator function for DtExampleChannel.
try
{
DtChannelCreator::registerInstance(de, new DtExampleChannelCreator);
}
DtCATCH_AND_PROPAGATE(DtCorruptedState)
Building the Example
VR-Vantage includes pre-built versions of the example plug-in. To build it yourself, follow the instructions at Building VR-Vantage Examples, Applications, and Plug-ins.
Running the Example
This example is a plug-in. You can run it by running ./bin64/exampleChannelPlugin_stealth.bat (on Windows) or ./bin64/exampleChannelPlugin_stealth.sh (on Linux). For more information about running examples, please see Running Applications and Examples.
Example Source Files
exampleChannelPluginInit.h
#pragma once
#define DT_DE_PLUGIN_EXPORT_MACRO DT_DLL_EXAMPLECHANNELPLUGIN
namespace makVrv
{
class DtDe;
namespace vrvExampleChannelPlugin
{
}
}
exampleChannelPlugin.h
#ifndef exampleChannelPlugin_H_
#define exampleChannelPlugin_H_
#ifdef _WIN32
#ifdef EXAMPLECHANNELPLUGIN_EXPORTS
#define DT_DLL_EXAMPLECHANNELPLUGIN __declspec ( dllexport )
#else
#define DT_DLL_EXAMPLECHANNELPLUGIN __declspec ( dllimport )
#endif
#else
#define DT_DLL_EXAMPLECHANNELPLUGIN
#endif
#endif
exampleChannelPluginInit.cxx
{
return true;
}
namespace makVrv
{
namespace vrvExampleChannelPlugin
{
{
try
{
}
DtCATCH_AND_PROPAGATE(DtCorruptedState)
}
}
}