20 #include <vlutil/vlUtil.h>
21 #include <vlutil/vlThread.h>
22 #include <vlutil/vlPerformanceStats.h>
24 #include <boost/bind.hpp>
25 #include <boost/signal.hpp>
31 #define DT_DE_INIT_ONCE(de)\
32 if(de.isInitFunctionRegistered((void*)&init))\
38 de.registerInitFunction((void*)&init);\
48 class DtDeSharedState;
50 class DtDriverManager;
52 class DtMessageDispatcher;
56 class DtVirtualBaseClass;
57 class DtSchemaManager;
70 typedef std::vector<std::pair<DtDeError,bool> >
DeErrors;
101 UnableToInitialize = 0,
102 UnableToInitializeDueToLicense = -1
117 virtual InitializationResult initialize(
bool abortOnLicenseFailure =
true,
bool useLicenseErrorDialog=
true );
120 bool initialized()
const;
125 DtThreadId threadId();
142 virtual void tick(
double simTime);
147 inline void retick() { tick(simulationTime()); }
152 virtual bool timeToStop()
const;
155 virtual void setTimeToStop(
bool flag =
true);
161 virtual void reset();
200 bool driverManagerCreated()
const;
213 virtual double simulationTime()
const;
216 virtual double syncedTime()
const;
219 virtual int displayCount()
const;
228 virtual bool isInMasterMode()
const;
231 virtual bool isInSlaveMode()
const;
245 virtual const DeErrors& deErrors()
const;
248 virtual void clearDeErrors();
254 bool renderFrameThisTick()
const;
259 virtual bool licenseAvailable()
const;
280 virtual void realizeDisplayConfiguration(
const std::string& clientName,
289 virtual void destroyDisplay(
const std::string& displayName);
292 virtual void destroyAllDisplays();
295 virtual bool modifyDisplay(
const std::string& displayName,
305 virtual void setSimulationTime(
double time);
310 virtual double systemTime()
const;
318 StaticInstanceFunction classInstanceFunction)
const;
323 template <
typename Class>
326 return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
331 virtual void registerFastInstance(
337 template <
typename Class>
340 registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
357 virtual void registerInstance(
const std::string& instanceName,
361 virtual void registerProctor(
unsigned short handlerId,
DtProctor*);
365 virtual void unregisterProctor(
unsigned short handlerId);
368 DtProctor* findProctor(
unsigned short handlerId)
const;
378 void setRenderFrameThisTick(
bool update);
418 boost::signal<void (const std::string&, const std::string&)>
434 boost::signal<void (const std::string&, const DtDisplayConfiguration&)>
440 boost::signal<void (const std::string&, const DtWindowConfiguration&)>
447 boost::signal<void (const std::string&, const std::string&)>
490 virtual void onSlaveConnected(
const std::string& igName);
493 virtual void emitDeError(
const DtDeError& error,
bool criticalError);
499 static const char* className();
503 void registerInitFunction(
void*
address);
506 bool isInitFunctionRegistered(
void*
address);
510 inline bool shouldSendMesssage()
512 return isInMasterMode() && myCommunicator && !myCommunicator->masterIgOnly();
515 inline void setPagedLodMagnificationScaleFactor(
float factor )
517 myPagedLodMagnificationScaleFactor = factor;
520 inline float pagedLodMagnificationScaleFactor()
const
522 return myPagedLodMagnificationScaleFactor;
536 virtual void initializeSchemaManager();
538 virtual void initializeLibXmlIfNecessary();
542 virtual bool shouldSkipThisTick(
double simulationTime );
545 virtual void postInitialize();
548 virtual void postInitializeMaster();
551 virtual void checkForData();
559 void masterTick(
double simulationTime );
568 virtual bool local_realizeDisplayConfiguration(
573 virtual void local_destroyDisplay(
const std::string& displayName);
576 virtual bool local_modifyDisplay(
const std::string& displayName,
586 void destroyDisplay();
652 Master3D_License = 0,
664 template <
typename ManagerClass>
701 template <
typename ManagerClass>
704 ManagerClass* mgr =
dynamic_cast<ManagerClass*
>
712 DtTHROW_NEW(DtCorruptedState,
713 "Manager created after display engine was initialized.");
718 DtTHROW_NEW(DtCorruptedState,
"Create unsupported manager in slave.");
722 mgr =
new ManagerClass(de);
739 template <
typename ManagerClass>
745 DtTHROW_NEW(DtCorruptedState,
746 "Manager created after display engine was initialized.");
749 de.registerFastInstance(&ManagerClass::instance,mgr);
753 mgr->myConnections.manageConnection(
754 de.signal_initializeDefaultState.connect(
boost::bind(
755 &ManagerClass::loadDefaults,mgr)));