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;
78 void buildPerformanceStats();
104 UnableToInitialize = 0,
105 UnableToInitializeDueToLicense = -1
120 virtual InitializationResult initialize(
bool abortOnLicenseFailure =
true,
bool useLicenseErrorDialog=
true );
123 bool initialized()
const;
128 DtThreadId threadId();
145 virtual void tick(
double simTime);
150 inline void retick() { tick(simulationTime()); }
155 virtual bool timeToStop()
const;
158 virtual void setTimeToStop(
bool flag =
true);
164 virtual void reset();
203 bool driverManagerCreated()
const;
216 virtual double simulationTime()
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();
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();
530 virtual void timingFinishTick();
533 virtual void timingFinishBetweenTicks();
538 virtual void initializeSchemaManager();
540 virtual void initializeLibXmlIfNecessary();
544 virtual bool shouldSkipThisTick(
double simulationTime );
547 virtual void postInitialize();
550 virtual void postInitializeMaster();
553 virtual void checkForData();
561 void masterTick(
double simulationTime );
570 virtual bool local_realizeDisplayConfiguration(
575 virtual void local_destroyDisplay(
const std::string& displayName);
578 virtual bool local_modifyDisplay(
const std::string& displayName,
588 void destroyDisplay();
654 Master3D_License = 0,
663 template <
typename ManagerClass>
700 template <
typename ManagerClass>
703 ManagerClass* mgr =
dynamic_cast<ManagerClass*
>
711 DtTHROW_NEW(DtCorruptedState,
712 "Manager created after display engine was initialized.");
717 DtTHROW_NEW(DtCorruptedState,
"Create unsupported manager in slave.");
721 mgr =
new ManagerClass(de);
738 template <
typename ManagerClass>
744 DtTHROW_NEW(DtCorruptedState,
745 "Manager created after display engine was initialized.");
752 mgr->myConnections.manageConnection(
754 &ManagerClass::loadDefaults,mgr)));