19 #include <vlutil/vlThreadSysWrapper.h>
23 #include <boost/bind.hpp>
24 #include <tbb/mutex.h>
25 #include <tbb/recursive_mutex.h>
29 #define DT_DE_INIT_ONCE(de)\
30 if(de.isInitFunctionRegistered((void*)&init))\
36 de.registerInitFunction((void*)&init);\
44 class DtBackgroundLoader;
47 class DtDeSharedState;
49 class DtDriverManager;
51 class DtInMemoryProfilerDistributorAgent;
52 class DtMessageDispatcher;
56 class DtVirtualBaseClass;
57 class DtSchemaManager;
60 class DtDisplayConfiguration;
61 class DtWindowConfiguration;
62 class DtChannelConfiguration;
63 class DtDriverConfiguration;
64 class DtSynchronizedTimeManager;
76 typedef std::vector<std::pair<DtDeError,bool> >
DeErrors;
115 UnableToInitialize = 0,
116 UnableToInitializeDueToLicense = -1
131 virtual InitializationResult initialize(
bool abortOnLicenseFailure =
true,
bool useLicenseErrorDialog=
true );
134 bool initialized()
const;
139 DtThreadId threadId();
156 virtual void tick(
double simTime);
161 inline void retick() { tick(simulationTime()); }
166 virtual bool timeToStop()
const;
169 virtual void setTimeToStop(
bool flag =
true);
175 virtual void reset();
178 virtual void updateScene();
214 bool driverManagerCreated()
const;
230 virtual double simulationTime()
const;
234 virtual double syncedTime()
const;
242 virtual int displayCount()
const;
251 virtual bool isInMasterMode()
const;
254 virtual bool isInSlaveMode()
const;
269 virtual const DeErrors deErrors()
const;
272 virtual void clearDeErrors();
278 bool renderFrameThisTick()
const;
283 virtual bool licenseAvailable()
const;
304 virtual void realizeDisplayConfiguration(
const std::string& clientName,
305 const std::string& displayName);
313 virtual void destroyDisplay(
const std::string& displayName);
316 virtual void destroyAllDisplays();
319 virtual bool modifyDisplay(
const std::string& displayName,
329 virtual void setSimulationTime(
double time);
334 virtual double systemTime()
const;
337 virtual void setCurrentFrameNumber(
unsigned int frameNumber);
340 virtual unsigned int currentFrameNumber()
const;
343 virtual bool isPaused()
const;
348 virtual void pause();
351 virtual void resume();
357 double pausedTime()
const;
365 StaticInstanceFunction classInstanceFunction)
const;
370 template <
typename Class>
373 return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
378 virtual void registerFastInstance(
384 template <
typename Class>
387 registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
393 const std::string& instanceName)
const;
404 virtual void registerInstance(
const std::string& instanceName,
408 virtual void registerProctor(
unsigned short handlerId,
DtProctor*);
412 virtual void unregisterProctor(
unsigned short handlerId);
415 DtProctor* findProctor(
unsigned short handlerId)
const;
425 void setRenderFrameThisTick(
bool update);
429 virtual bool modelSetActive(
int i)
const;
433 virtual void determineActiveModelSets();
445 virtual void startLogFrameTime();
446 virtual void stopLogFrameTime();
483 boost::signalslib::signal<void (const std::string&, const std::string&)>
499 boost::signalslib::signal<void (const std::string&, const DtDisplayConfiguration&)>
505 boost::signalslib::signal<void (const std::string&, const DtWindowConfiguration&)>
512 boost::signalslib::signal<void (const std::string&, const std::string&)>
518 boost::signalslib::signal<void (
const std::string&,
const std::string&,
524 boost::signalslib::signal<void (
const std::string&,
const std::string&,
530 boost::signalslib::signal<void (
const std::string&,
const std::string&,
536 boost::signalslib::signal<void (
const std::string&,
const std::string&,
542 boost::signalslib::signal<void (const DtDeError& error, bool critical)>
signal_deError;
563 virtual void onSlaveConnected(
const std::string& igName);
566 virtual void emitDeError(
const DtDeError&
error,
bool criticalError);
572 static const char* className();
576 void registerInitFunction(
void* address);
579 bool isInitFunctionRegistered(
void* address);
585 return isInMasterMode() && myCommunicator && !myCommunicator->masterIgOnly();
590 virtual void setTargetFrameTime(
double frameTimeInMs);
593 virtual double targetFrameTime();
597 virtual void runSwapBufferWork();
600 virtual void startProfilerNextFrame();
602 virtual void stopProfilerNextFrame();
605 virtual double lastUpdateTime()
const;
618 virtual void initializeSchemaManager();
620 virtual void initializeLibXmlIfNecessary();
624 virtual bool shouldSkipThisTick(
double simulationTime );
627 virtual void postInitialize();
630 virtual void postInitializeMaster();
633 virtual void checkForData();
641 void masterTick(
double simulationTime );
645 void renderTick(
double elapsedTime);
651 virtual bool local_realizeDisplayConfiguration(
652 const std::string& clientName,
const std::string& displayName);
656 virtual void local_destroyDisplay(
const std::string& displayName);
659 virtual bool local_modifyDisplay(
const std::string& displayName,
669 void destroyDisplay();
675 virtual void intializeStatsManager(
void);
743 Master3D_License = 0,
771 template <
typename ManagerClass>
808 template <
typename ManagerClass>
811 ManagerClass* mgr =
dynamic_cast<ManagerClass*
>
819 DtTHROW_NEW(DtCorruptedState,
820 "Manager created after display engine was initialized.");
825 DtTHROW_NEW(DtCorruptedState,
"Create unsupported manager in slave.");
829 mgr =
new ManagerClass(de);
846 template <
typename ManagerClass>
852 DtTHROW_NEW(DtCorruptedState,
853 "Manager created after display engine was initialized.");
860 mgr->myConnections.manageConnection(
862 &ManagerClass::loadDefaults,mgr)));
DtVirtualBaseClass * findFastInstance(Class &(*staticInstFunc)(DtDe &)) const
The instance key is always return the subclass of the virtual base class, since it returns a referenc...
Definition: DtDe.h:371
boost::signalslib::signal< void(const std::string &, const std::string &, const std::string &)> signal_channelToBeDestroyed
Signal is emitted, then the channel is destroyed.
Definition: DtDe.h:531
virtual DtVirtualBaseClass * findFastInstance(StaticInstanceFunction classInstanceFunction) const
Find an instance with the given name.
DeErrors myIgErrors
Definition: DtDe.h:723
boost::signalslib::signal< void(const std::string &, const std::string &, const std::string &, const DtChannelConfiguration &)> signal_channelConfigurationModified
Emitted when a channel is modified.
Definition: DtDe.h:538
DtDisplay * myDisplayEngine
Definition: DtDe.h:707
Virtual base class.
Definition: DtVirtualBaseClass.h:19
boost::signalslib::signal< void(const std::string &)> signal_displayToBeDestroyed
Emitted when a display is removed.
Definition: DtDe.h:494
boost::signalslib::signal< void(const std::string &, const std::string &, const DtChannelConfiguration &)> signal_channelConfigurationAdded
Emitted when a channel is added.
Definition: DtDe.h:525
boost::signalslib::signal< void(DtDe &)> signal_preTick
Signal emitted at the beginning of the tick function.
Definition: DtDe.h:472
DtDeProctor * myIgProctor
Definition: DtDe.h:710
bool myInitializeFlag
Definition: DtDe.h:700
DtSynchronizedTimeManager manages NTP synchronized time DtSynchronizedTimeManager is used by the disp...
Definition: DtSynchronizedTimeManager.h:25
tbb::recursive_mutex myErrorMutex
Definition: DtDe.h:733
The DtDeError instance.
Definition: DtDeError.h:20
An object that represents everything that is visible in the scene.
Definition: DtScene.h:44
DisplayEngineProxyMap myDisplayProxies
Definition: DtDe.h:713
boost::signalslib::signal< void()> signal_quit
Signal emitted by the quit method.
Definition: DtDe.h:546
bool myInTickFlag
Definition: DtDe.h:727
DT_DLL_VRVCORE DtTaitBryan level(const DtCoordinateSystem &cs, const DtVector &localOrigin, double topoHeading)
Returns a level orientation with the topographic heading.
boost::signalslib::signal< void()> signal_resume
signal emitted by the resume method.
Definition: DtDe.h:552
double mySystemPausedTime
Definition: DtDe.h:757
DtDePathConfiguration myPathConfiguration
Definition: DtDe.h:698
DtSynchronizedTimeManager * mySynchronizedTimeManager
Definition: DtDe.h:738
DtMainEventQueue myMainEventQueue
Definition: DtDe.h:706
This is a simple class for logging information to a file.
Definition: DtDebugLog.h:37
Component which owns how the application is displayed.
Definition: DtDisplay.h:27
DtAgentManager * myAgentManager
Definition: DtDe.h:712
DtRenderer * myRenderer
Definition: DtDe.h:724
void retick()
Retick is a helper function for simply ticking using the current Simulation time. ...
Definition: DtDe.h:161
bool mySceneNeedsUpdateFlag
Definition: DtDe.h:725
Base class for Proctor classes.
Definition: DtProctor.h:21
double myLastUpdateTime
used by stats system
Definition: DtDe.h:763
boost::signalslib::signal< void()> signal_aboutToAutoStartDrivers
Definition: DtDe.h:554
DtInMemoryProfilerDistributorAgent * myFrameTimeLogger
Definition: DtDe.h:750
InitializationResult
Result codes for the initialize() function.
Definition: DtDe.h:112
core singleton that manages loading for all the various DtModel subclasses
Definition: DtBackgroundLoader.h:38
This owns a list of channel configurations.
Definition: DtWindowConfiguration.h:28
The DtDriverManager manages all the DtDriver's in the DtDe.
Definition: DtDriverManager.h:32
DtDeCommunicator * myCommunicator
Definition: DtDe.h:708
Configuration for the makVrv::DtIgDriver class.
Definition: DtDriverConfiguration.h:19
PrintLevel
Definition: DtDebugLog.h:41
boost::signalslib::signal< void()> signal_postTick
Signal emitted at the end of the tick function.
Definition: DtDe.h:479
Contains makVrv:DtDeCommunicator class.
boost::signalslib::signal< void(const std::string &, const DtWindowConfiguration &)> signal_windowConfigurationAdded
Emitted when a window is added.
Definition: DtDe.h:506
DtDebugLog & log()
Inline access for the debug log object.
Definition: DtDe.h:220
The DtDePathConfiguration contains paths to various files, and can resolve the path macros ...
Definition: DtDePathConfiguration.h:23
boost::signalslib::signal< void(const DtDisplayConfiguration &)> signal_displayConfigurationAdded
Emitted when a display is added.
Definition: DtDe.h:489
DtSchemaManager * mySchemaManager
Definition: DtDe.h:716
bool myRenderedLastFrame
Definition: DtDe.h:751
boost::signalslib::signal< void()> signal_initializeDefaultState
Signal emitted during initialization at at time when it is possible to initialize default state...
Definition: DtDe.h:459
boost::signalslib::signal< void(const std::string &, const std::string &)> signal_windowConfigurationToBeDestroyed
Emitted when a window is destroyed.
Definition: DtDe.h:513
Contains makVrv::DtDisplayProctor class.
DtDriverManager * myDriverManager
Definition: DtDe.h:711
void * myRegInitFunction
Definition: DtDe.h:720
Contains the DtDeInitializer class definition.
std::map< StaticInstanceFunction, DtVirtualBaseClass * > FastRootedSingletonMap
Definition: DtDe.h:687
boost::signalslib::signal< void(const std::string &, const std::string &)> signal_displayConfigurationRealized
Emitted when a Display Engine is told to realize a display configuration.
Definition: DtDe.h:484
LicenseTypes
Definition: DtDe.h:740
DtThreadId myThreadId
Definition: DtDe.h:735
unsigned int myCurrentFrameNumber
Definition: DtDe.h:702
DtClock * mySimulationClock
Definition: DtDe.h:737
tbb::mutex myInternalDataMutex
Definition: DtDe.h:732
bool initialized() const
Get whether the application is initialized.
bool shouldSendMesssage()
Helper function used to check if a message needs to be created and sent.
Definition: DtDe.h:583
boost::signalslib::signal< void()> signal_pause
signal emitted by the pause method.
Definition: DtDe.h:549
The main event queue should live in the main application thread and is used to communicate events to ...
Definition: DtMainEventQueue.h:24
DtDataBank * myDataBank
Definition: DtDe.h:715
LicenseTypes myLicenseType
Definition: DtDe.h:748
binderNoArgs< _Fn > bind(const _Fn &_Func, const _Ty &_Left)
Definition: DtSTLUtilities.h:76
The DtDeSharedState represents all the data that is shared between the master and its slaves...
Definition: DtDeSharedState.h:43
bool myStopFlag
Definition: DtDe.h:699
DtBackgroundLoader * myBackgroundLoader
Definition: DtDe.h:717
bool myStopProfilerNextFrame
Definition: DtDe.h:767
std::vector< bool > myActiveModelSets
Definition: DtDe.h:728
DtDebugLog * myDebugLog
Definition: DtDe.h:704
DtFileCache * myFileCache
Definition: DtDe.h:722
#define DT_DLL_VRVCORE
Definition: vrvCore.h:20
static const char * myClassName
Definition: DtDe.h:693
This owns a list of window configurations.
Definition: DtDisplayConfiguration.h:47
std::vector< std::pair< DtDeError, bool > > DeErrors
Typedef of a vector of error/critical.
Definition: DtDe.h:76
virtual bool isInSlaveMode() const
Returns true if the DtDe is in slave mode.
RootedSingletonMap::const_iterator myLastInstance
Definition: DtDe.h:731
The de proctor is responsible for communication changes to slave DtDe instances running on separate p...
Definition: DtDeProctor.h:22
InitFunctionVector myRegisteredInitFunctions
Definition: DtDe.h:719
DtDeConfiguration myConfiguration
Definition: DtDe.h:705
std::string myLastInstanceName
Definition: DtDe.h:730
void defaultManagerRegisterInstanceFunction(DtDe &de, ManagerClass *mgr)
Default implementation of how to register a manager, especially necessary when overriding the manager...
Definition: DtDe.h:847
std::vector< void * > InitFunctionVector
This vector stores the address of registered init functions.
Definition: DtDe.h:683
The DtAgentManager manages the distributed scene object framework.
Definition: DtAgentManager.h:38
boost::signalslib::signal< void()> signal_postInitialize
Signal emitted at the end of the initialization function.
Definition: DtDe.h:465
Definition: asyncJobServer.h:39
The class responsible for managing communication between multiple DtDe instances typically running in...
Definition: DtDeCommunicator.h:31
The DtRenderer is the component responsible for rendering 3D images onto the screen.
Definition: DtRenderer.h:43
DtMessageDispatcher * myDispatcher
Definition: DtDe.h:709
FastRootedSingletonMap myFastRootedSingletonMap
Definition: DtDe.h:696
void registerFastInstance(Class &(*staticInstFunc)(DtDe &), DtVirtualBaseClass *inst)
The instance key is always return the subclass of the virtual base class, since it returns a referenc...
Definition: DtDe.h:385
DtDataBank is the repository for common element data and simulation-specific state data...
Definition: DtDataBank.h:20
RootedSingletonMap myRootedSingletonMap
Definition: DtDe.h:695
DtDeSharedState * myDeSharedState
Definition: DtDe.h:714
bool myStartProfilerNextFrame
Definition: DtDe.h:766
The configuration of the Display Engine.
Definition: DtDeConfiguration.h:22
Configuration for a single channel Serialized and sent to remote displays as necessary to configure r...
Definition: DtChannelConfiguration.h:26
boost::signalslib::signal< void(const std::string &, const std::string &, const DtWindowConfiguration &)> signal_windowConfigurationModified
Emitted when an realized window is modified.
Definition: DtDe.h:519
DtBoost::shared_ptr< DtDisplayProxy > DtDisplayProxySP
Definition: DtDisplayProxy.h:91
ManagerClass & defaultManagerInstanceFunction(DtDe &de, bool allowedInSlave)
default Manager instance function.
Definition: DtDe.h:809
boost::signalslib::signal< void(const std::string &, const DtDisplayConfiguration &)> signal_displayModified
Emitted when a display is modified.
Definition: DtDe.h:500
virtual void registerFastInstance(StaticInstanceFunction classInstanceFunction, DtVirtualBaseClass *inst)
Register a fast instance, if the inst is a null pointer the instance key is removed.
bool myResettingFlag
Definition: DtDe.h:752
IGI Manager managers both IGI clients and IGI interfaces.
Definition: DtMessageDispatcher.h:31
Contains makVrv::DtMainEventQueue class.
std::map< std::string, DtVirtualBaseClass * > RootedSingletonMap
Definition: DtDe.h:686
double myNextFixedTime
Definition: DtDe.h:703
boost::signalslib::signal< void(const DtDeError &error, bool critical)> signal_deError
Listen to this signal for Display Engine errors.
Definition: DtDe.h:542
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
Handles the caching of files.
Definition: DtFileCache.h:52
The schema manager is responsible to managing all of the schemas in the system.
Definition: DtSchemaManager.h:78
double mySimulationTime
Definition: DtDe.h:701
double myTargetFrameTime
used to budget streaming at the end of a frame
Definition: DtDe.h:760
DtDeInitializer myInitializer
Definition: DtDe.h:697
The initialization configuration for the makVrv::DtDe.
Definition: DtDeInitializer.h:32
bool myDestructionFlag
Definition: DtDe.h:726
std::map< std::string, DtDisplayProxyWP > DisplayEngineProxyMap
Definition: DtDe.h:689