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;
65 class DtDrawnIntersectorManager;
77 typedef std::vector<std::pair<DtDeError,bool> >
DeErrors;
116 UnableToInitialize = 0,
117 UnableToInitializeDueToLicense = -1
132 virtual InitializationResult initialize(
bool abortOnLicenseFailure =
true,
bool useLicenseErrorDialog=
true );
135 bool initialized()
const;
140 DtThreadId threadId();
157 virtual void tick(
double simTime);
162 inline void retick() { tick(simulationTime()); }
167 virtual bool timeToStop()
const;
170 virtual void setTimeToStop(
bool flag =
true);
176 virtual void reset();
179 virtual void updateScene();
215 bool driverManagerCreated()
const;
231 virtual double simulationTime()
const;
235 virtual double syncedTime()
const;
243 virtual int displayCount()
const;
252 virtual bool isInMasterMode()
const;
255 virtual bool isInSlaveMode()
const;
271 virtual const DeErrors deErrors()
const;
274 virtual void clearDeErrors();
280 bool renderFrameThisTick()
const;
285 virtual bool licenseAvailable()
const;
312 virtual void realizeDisplayConfiguration(
const std::string& clientName,
321 virtual void destroyDisplay(
const std::string& displayName);
324 virtual void destroyAllDisplays();
327 virtual bool modifyDisplay(
const std::string& displayName,
337 virtual void setSimulationTime(
double time);
342 virtual double systemTime()
const;
345 virtual void setCurrentFrameNumber(
unsigned int frameNumber);
348 virtual unsigned int currentFrameNumber()
const;
351 virtual bool isPaused()
const;
356 virtual void pause();
359 virtual void resume();
365 double pausedTime()
const;
373 StaticInstanceFunction classInstanceFunction)
const;
378 template <
typename Class>
381 return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
386 virtual void registerFastInstance(
392 template <
typename Class>
395 registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
412 virtual void registerInstance(
const std::string& instanceName,
416 virtual void registerProctor(
unsigned short handlerId,
DtProctor*);
420 virtual void unregisterProctor(
unsigned short handlerId);
423 DtProctor* findProctor(
unsigned short handlerId)
const;
433 void setRenderFrameThisTick(
bool update);
437 virtual bool modelSetActive(
int i)
const;
441 virtual void determineActiveModelSets();
453 virtual void startLogFrameTime();
454 virtual void stopLogFrameTime();
491 boost::signalslib::signal<void (const std::string&, const std::string&)>
507 boost::signalslib::signal<void (const std::string&, const DtDisplayConfiguration&)>
513 boost::signalslib::signal<void (const std::string&, const DtWindowConfiguration&)>
520 boost::signalslib::signal<void (const std::string&, const std::string&)>
550 boost::signalslib::signal<void (const DtDeError& error, bool critical)>
signal_deError;
571 virtual void onSlaveConnected(
const std::string& igName);
574 virtual void emitDeError(
const DtDeError& error,
bool criticalError);
580 static const char* className();
584 void registerInitFunction(
void*
address);
587 bool isInitFunctionRegistered(
void*
address);
591 inline bool shouldSendMesssage()
593 return isInMasterMode() && myCommunicator && !myCommunicator->masterIgOnly();
598 virtual void setTargetFrameTime(
double frameTimeInMs);
601 virtual double targetFrameTime();
605 virtual void runSwapBufferWork();
608 virtual void startProfilerNextFrame();
610 virtual void stopProfilerNextFrame();
613 virtual double lastUpdateTime()
const;
616 virtual void setShowErrorDialogs(
bool show);
619 virtual bool showErrorDialogs()
const;
632 virtual void initializeSchemaManager();
634 virtual void initializeLibXmlIfNecessary();
638 virtual bool shouldSkipThisTick(
double simulationTime );
641 virtual void postInitialize();
644 virtual void postInitializeMaster();
647 virtual void checkForData();
655 void masterTick(
double simulationTime );
659 void renderTick(
double elapsedTime);
665 virtual bool local_realizeDisplayConfiguration(
670 virtual void local_destroyDisplay(
const std::string& displayName);
673 virtual bool local_modifyDisplay(
const std::string& displayName,
683 void destroyDisplay();
689 virtual void intializeStatsManager(
void);
757 Master3D_License = 0,
790 template <
typename ManagerClass>
827 template <
typename ManagerClass>
830 ManagerClass* mgr =
dynamic_cast<ManagerClass*
>
838 DtTHROW_NEW(DtCorruptedState,
839 "Manager created after display engine was initialized.");
844 DtTHROW_NEW(DtCorruptedState,
"Create unsupported manager in slave.");
848 mgr =
new ManagerClass(de);
865 template <
typename ManagerClass>
871 DtTHROW_NEW(DtCorruptedState,
872 "Manager created after display engine was initialized.");
879 mgr->myConnections.manageConnection(
881 &ManagerClass::loadDefaults,mgr)));