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;
66 class DtDeSplashScreen;
79 typedef std::vector<std::pair<DtDeError,bool> >
DeErrors;
125 UnableToInitialize = 0,
126 UnableToInitializeDueToLicense = -1
141 virtual InitializationResult initialize(
bool abortOnLicenseFailure =
true,
bool useLicenseErrorDialog =
true);
144 bool initialized()
const;
149 DtThreadId threadId();
166 virtual void tick(
double simTime);
171 inline void retick() { tick(simulationTime()); }
176 virtual bool timeToStop()
const;
179 virtual void setTimeToStop(
bool flag =
true);
185 virtual void reset();
188 virtual void updateScene();
224 bool driverManagerCreated()
const;
240 virtual double simulationTime()
const;
244 virtual double syncedTime()
const;
252 virtual int displayCount()
const;
261 virtual bool isInMasterMode()
const;
264 virtual bool isInSlaveMode()
const;
280 virtual const DeErrors deErrors()
const;
283 virtual void clearDeErrors();
289 bool renderFrameThisTick()
const;
294 virtual bool licenseAvailable()
const;
321 virtual void realizeDisplayConfiguration(
const std::string& clientName,
330 virtual void destroyDisplay(
const std::string& displayName);
333 virtual void destroyAllDisplays();
336 virtual bool modifyDisplay(
const std::string& displayName,
346 virtual void setSimulationTime(
double time);
351 virtual double systemTime()
const;
354 virtual void setCurrentFrameNumber(
unsigned int frameNumber);
357 virtual unsigned int currentFrameNumber()
const;
360 virtual bool isPaused()
const;
365 virtual void pause();
368 virtual void resume();
374 double pausedTime()
const;
382 StaticInstanceFunction classInstanceFunction)
const;
387 template <
typename Class>
390 return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
395 virtual void registerFastInstance(
401 template <
typename Class>
404 registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
421 virtual void registerInstance(
const std::string& instanceName,
425 virtual void registerProctor(
unsigned short handlerId,
DtProctor*);
429 virtual void unregisterProctor(
unsigned short handlerId);
432 DtProctor* findProctor(
unsigned short handlerId)
const;
442 void setRenderFrameThisTick(
bool update);
450 virtual void determineActiveModelSets();
462 virtual void startLogFrameTime();
463 virtual void stopLogFrameTime();
500 boost::signalslib::signal<void (const std::string&, const std::string&)>
516 boost::signalslib::signal<void (const std::string&, const DtDisplayConfiguration&)>
522 boost::signalslib::signal<void (const std::string&, const DtWindowConfiguration&)>
529 boost::signalslib::signal<void (const std::string&, const std::string&)>
559 boost::signalslib::signal<void (const DtDeError& error, bool critical)>
signal_deError;
580 virtual void onSlaveConnected(
const std::string& igName);
583 virtual void emitDeError(
const DtDeError& error,
bool criticalError);
589 static const char* className();
593 void registerInitFunction(
void*
address);
596 bool isInitFunctionRegistered(
void*
address);
600 inline bool shouldSendMesssage()
602 return isInMasterMode() && myCommunicator && !myCommunicator->masterIgOnly();
607 virtual void setTargetFrameTime(
double frameTimeInMs);
610 virtual double targetFrameTime();
613 virtual void startProfilerNextFrame();
615 virtual void stopProfilerNextFrame();
618 virtual double lastUpdateTime()
const;
621 virtual void setShowErrorDialogs(
bool show);
624 virtual bool showErrorDialogs()
const;
644 virtual void initializeSchemaManager();
646 virtual void initializeLibXmlIfNecessary();
650 virtual bool shouldSkipThisTick(
double simulationTime );
653 virtual void postInitialize();
656 virtual void postInitializeMaster();
659 virtual void checkForData();
667 void masterTick(
double simulationTime );
671 void renderTick(
double elapsedTime);
677 virtual bool local_realizeDisplayConfiguration(
682 virtual void local_destroyDisplay(
const std::string& displayName);
685 virtual bool local_modifyDisplay(
const std::string& displayName,
695 void destroyDisplay();
701 virtual void intializeStatsManager(
void);
769 Master3D_License = 0,
803 template <
typename ManagerClass>
840 template <
typename ManagerClass>
843 ManagerClass* mgr =
dynamic_cast<ManagerClass*
>
851 DtTHROW_NEW(DtCorruptedState,
852 "Manager created after display engine was initialized.");
857 DtTHROW_NEW(DtCorruptedState,
"Create unsupported manager in slave.");
861 mgr =
new ManagerClass(de);
878 template <
typename ManagerClass>
884 DtTHROW_NEW(DtCorruptedState,
885 "Manager created after display engine was initialized.");
892 mgr->myConnections.manageConnection(
894 &ManagerClass::loadDefaults,mgr)));