17 #include <vlutil/vlThreadSysWrapper.h>
21 #include <boost/bind.hpp>
22 #include <boost/thread.hpp>
26 #define DT_DE_INIT_ONCE(de)\
27 if(de.isInitFunctionRegistered((void*)&init))\
33 de.registerInitFunction((void*)&init);\
41 class DtBackgroundLoader;
44 class DtDeSharedState;
46 class DtDriverManager;
48 class DtInMemoryProfilerDistributorAgent;
49 class DtMessageDispatcher;
53 class DtVirtualBaseClass;
54 class DtSchemaManager;
57 class DtDisplayConfiguration;
58 class DtWindowConfiguration;
59 class DtChannelConfiguration;
60 class DtDriverConfiguration;
61 class DtSynchronizedTimeManager;
73 typedef std::vector<std::pair<DtDeError,bool> >
DeErrors;
112 UnableToInitialize = 0,
113 UnableToInitializeDueToLicense = -1
128 virtual InitializationResult initialize(
bool abortOnLicenseFailure =
true,
bool useLicenseErrorDialog=
true );
131 bool initialized()
const;
136 DtThreadId threadId();
153 virtual void tick(
double simTime);
158 inline void retick() { tick(simulationTime()); }
163 virtual bool timeToStop()
const;
166 virtual void setTimeToStop(
bool flag =
true);
172 virtual void reset();
175 virtual void updateScene();
211 bool driverManagerCreated()
const;
227 virtual double simulationTime()
const;
231 virtual double syncedTime()
const;
239 virtual int displayCount()
const;
248 virtual bool isInMasterMode()
const;
251 virtual bool isInSlaveMode()
const;
266 virtual const DeErrors& deErrors()
const;
269 virtual void clearDeErrors();
275 bool renderFrameThisTick()
const;
280 virtual bool licenseAvailable()
const;
301 virtual void realizeDisplayConfiguration(
const std::string& clientName,
310 virtual void destroyDisplay(
const std::string& displayName);
313 virtual void destroyAllDisplays();
316 virtual bool modifyDisplay(
const std::string& displayName,
326 virtual void setSimulationTime(
double time);
331 virtual double systemTime()
const;
334 virtual bool isPaused()
const;
339 virtual void pause();
342 virtual void resume();
348 double pausedTime()
const;
356 StaticInstanceFunction classInstanceFunction)
const;
361 template <
typename Class>
364 return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
369 virtual void registerFastInstance(
375 template <
typename Class>
378 registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
395 virtual void registerInstance(
const std::string& instanceName,
399 virtual void registerProctor(
unsigned short handlerId,
DtProctor*);
403 virtual void unregisterProctor(
unsigned short handlerId);
406 DtProctor* findProctor(
unsigned short handlerId)
const;
416 void setRenderFrameThisTick(
bool update);
428 virtual void startLogFrameTime();
429 virtual void stopLogFrameTime();
466 boost::signal<void (const std::string&, const std::string&)>
482 boost::signal<void (const std::string&, const DtDisplayConfiguration&)>
488 boost::signal<void (const std::string&, const DtWindowConfiguration&)>
495 boost::signal<void (const std::string&, const std::string&)>
546 virtual void onSlaveConnected(
const std::string& igName);
549 virtual void emitDeError(
const DtDeError& error,
bool criticalError);
555 static const char* className();
559 void registerInitFunction(
void*
address);
562 bool isInitFunctionRegistered(
void*
address);
566 inline bool shouldSendMesssage()
568 return isInMasterMode() && myCommunicator && !myCommunicator->masterIgOnly();
582 virtual void initializeSchemaManager();
584 virtual void initializeLibXmlIfNecessary();
588 virtual bool shouldSkipThisTick(
double simulationTime );
591 virtual void postInitialize();
594 virtual void postInitializeMaster();
597 virtual void checkForData();
605 void masterTick(
double simulationTime );
614 virtual bool local_realizeDisplayConfiguration(
619 virtual void local_destroyDisplay(
const std::string& displayName);
622 virtual bool local_modifyDisplay(
const std::string& displayName,
632 void destroyDisplay();
638 virtual void intializeStatsManager(
void);
702 Master3D_License = 0,
720 template <
typename ManagerClass>
757 template <
typename ManagerClass>
760 ManagerClass* mgr =
dynamic_cast<ManagerClass*
>
768 DtTHROW_NEW(DtCorruptedState,
769 "Manager created after display engine was initialized.");
774 DtTHROW_NEW(DtCorruptedState,
"Create unsupported manager in slave.");
778 mgr =
new ManagerClass(de);
795 template <
typename ManagerClass>
801 DtTHROW_NEW(DtCorruptedState,
802 "Manager created after display engine was initialized.");
809 mgr->myConnections.manageConnection(
811 &ManagerClass::loadDefaults,mgr)));