18 #include <vlutil/vlThreadSysWrapper.h>
22 #include <boost/bind/bind.hpp>
26 #include <shared_mutex>
30 #define DT_DE_INIT_ONCE(de)\
31 if(de.isInitFunctionRegistered((void*)&init))\
37 de.registerInitFunction((void*)&init);\
45 class DtBackgroundLoader;
48 class DtDeSharedState;
50 class DtDriverManager;
52 class DtInMemoryProfilerDistributorAgent;
53 class DtMessageDispatcher;
57 class DtVirtualBaseClass;
58 class DtSchemaManager;
61 class DtDisplayConfiguration;
62 class DtWindowConfiguration;
63 class DtChannelConfiguration;
64 class DtDriverConfiguration;
65 class DtSynchronizedTimeManager;
66 class DtDrawnIntersectorManager;
67 class DtDeSplashScreen;
68 class DtDeCommunicator;
70 class DtEnvironmentVariables;
83 typedef std::vector<std::pair<DtDeError,bool> >
DeErrors;
129 UnableToInitialize = 0,
130 UnableToInitializeDueToLicense = -1
145 virtual InitializationResult initialize(
bool abortOnLicenseFailure =
true,
bool useLicenseErrorDialog =
true);
148 bool initialized()
const;
153 DtThreadId threadId();
170 virtual void tick(
double simTime);
175 inline void retick() { tick(simulationTime()); }
180 virtual bool timeToStop()
const;
183 virtual void setTimeToStop(
bool flag =
true);
191 virtual void reset();
194 virtual void updateScene();
230 bool driverManagerCreated()
const;
246 virtual double simulationTime()
const;
250 virtual double syncedTime()
const;
258 virtual int displayCount()
const;
267 virtual bool isInMasterMode()
const;
270 virtual bool isInSlaveMode()
const;
286 virtual const DeErrors deErrors()
const;
289 virtual void clearDeErrors();
295 bool renderFrameThisTick()
const;
300 virtual bool licenseAvailable()
const;
327 virtual void realizeDisplayConfiguration(
const std::string& clientName,
328 const std::string& displayName);
336 virtual void destroyDisplay(
const std::string& displayName);
339 virtual void destroyAllDisplays();
342 virtual bool modifyDisplay(
const std::string& displayName,
352 virtual void setSimulationTime(
double time);
357 virtual double systemTime()
const;
360 virtual void setCurrentFrameNumber(
unsigned int frameNumber);
363 virtual unsigned int currentFrameNumber()
const;
366 virtual bool isPaused()
const;
371 virtual void pause();
374 virtual void resume();
380 double pausedTime()
const;
388 StaticInstanceFunction classInstanceFunction)
const;
393 template <
typename Class>
396 return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
401 virtual void registerFastInstance(
407 template <
typename Class>
410 registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
416 const std::string& instanceName)
const;
427 virtual void registerInstance(
const std::string& instanceName,
431 virtual void registerProctor(
unsigned short handlerId,
DtProctor*);
435 virtual void unregisterProctor(
unsigned short handlerId);
438 DtProctor* findProctor(
unsigned short handlerId)
const;
448 void setRenderFrameThisTick(
bool update);
456 virtual void determineActiveModelSets();
468 virtual void startLogFrameTime();
469 virtual void stopLogFrameTime();
506 boost::signalslib::signal<void (const std::string&, const std::string&)>
522 boost::signalslib::signal<void (const std::string&, const DtDisplayConfiguration&)>
528 boost::signalslib::signal<void (const std::string&, const DtWindowConfiguration&)>
535 boost::signalslib::signal<void (const std::string&, const std::string&)>
541 boost::signalslib::signal<void (
const std::string&,
const std::string&,
547 boost::signalslib::signal<void (
const std::string&,
const std::string&,
553 boost::signalslib::signal<void (
const std::string&,
const std::string&,
559 boost::signalslib::signal<void (
const std::string&,
const std::string&,
568 boost::signalslib::signal<void (const DtDeError& error, bool critical)>
signal_deError;
589 virtual void onSlaveConnected(
const std::string& igName);
592 virtual void emitDeError(
const DtDeError& error,
bool criticalError);
598 static const char* className();
602 void registerInitFunction(
void* address);
605 bool isInitFunctionRegistered(
void* address);
609 bool shouldSendMesssage();
613 virtual void setTargetFrameTime(
double frameTimeInMs);
616 virtual double targetFrameTime();
619 virtual void startProfilerNextFrame();
621 virtual void stopProfilerNextFrame();
624 virtual double lastUpdateTime()
const;
627 virtual void setShowErrorDialogs(
bool show);
630 virtual bool showErrorDialogs()
const;
650 virtual void initializeSchemaManager();
652 virtual void initializeLibXmlIfNecessary();
656 virtual bool shouldSkipThisTick(
double simulationTime );
659 virtual void postInitialize();
662 virtual void postInitializeMaster();
665 virtual void checkForData();
673 void masterTick(
double simulationTime );
677 virtual void renderTick(
double elapsedTime);
683 virtual bool local_realizeDisplayConfiguration(
684 const std::string& clientName,
const std::string& displayName);
688 virtual void local_destroyDisplay(
const std::string& displayName);
691 virtual bool local_modifyDisplay(
const std::string& displayName,
701 void destroyDisplay();
707 virtual void intializeStatsManager(
void);
775 Master3D_License = 0,
811 template <
typename ManagerClass>
848 template <
typename ManagerClass>
851 ManagerClass* mgr =
dynamic_cast<ManagerClass*
>
859 DtTHROW_NEW(DtCorruptedState,
860 "Manager created after display engine was initialized.");
865 DtTHROW_NEW(DtCorruptedState,
"Create unsupported manager in slave.");
869 mgr =
new ManagerClass(de);
886 template <
typename ManagerClass>
892 DtTHROW_NEW(DtCorruptedState,
893 "Manager created after display engine was initialized.");
900 mgr->myConnections.manageConnection(
902 &ManagerClass::loadDefaults,mgr)));