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
113 virtual InitializationResult initialize();
116 bool initialized()
const;
121 DtThreadId threadId();
138 virtual void tick(
double simTime);
143 inline void retick() { tick(simulationTime()); }
148 virtual bool timeToStop()
const;
151 virtual void setTimeToStop(
bool flag =
true);
157 virtual void reset();
196 bool driverManagerCreated()
const;
209 virtual double simulationTime()
const;
212 virtual int displayCount()
const;
221 virtual bool isInMasterMode()
const;
224 virtual bool isInSlaveMode()
const;
238 virtual const DeErrors& deErrors()
const;
241 virtual void clearDeErrors();
247 bool renderFrameThisTick()
const;
268 virtual void realizeDisplayConfiguration(
const std::string& clientName,
269 const std::string& displayName);
277 virtual void destroyDisplay(
const std::string& displayName);
280 virtual void destroyAllDisplays();
283 virtual bool modifyDisplay(
const std::string& displayName,
293 virtual void setSimulationTime(
double time);
298 virtual double systemTime();
306 StaticInstanceFunction classInstanceFunction)
const;
311 template <
typename Class>
314 return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
319 virtual void registerFastInstance(
325 template <
typename Class>
328 registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
334 const std::string& instanceName)
const;
345 virtual void registerInstance(
const std::string& instanceName,
349 virtual void registerProctor(
unsigned short handlerId,
DtProctor*);
353 virtual void unregisterProctor(
unsigned short handlerId);
356 DtProctor* findProctor(
unsigned short handlerId)
const;
366 void setRenderFrameThisTick(
bool update);
406 boost::signal<void (const std::string&, const std::string&)>
422 boost::signal<void (const std::string&, const DtDisplayConfiguration&)>
428 boost::signal<void (const std::string&, const DtWindowConfiguration&)>
435 boost::signal<void (const std::string&, const std::string&)>
441 boost::signal<void (
const std::string&,
const std::string&,
447 boost::signal<void (
const std::string&,
const std::string&,
453 boost::signal<void (
const std::string&,
const std::string&,
459 boost::signal<void (
const std::string&,
const std::string&,
478 virtual void onSlaveConnected(
const std::string& igName);
481 virtual void emitDeError(
const DtDeError&
error,
bool criticalError);
487 static const char* className();
491 void registerInitFunction(
void* address);
494 bool isInitFunctionRegistered(
void* address);
498 inline bool shouldSendMesssage()
500 return isInMasterMode() && myCommunicator && !myCommunicator->masterIgOnly();
518 virtual void timingFinishTick();
521 virtual void timingFinishBetweenTicks();
526 virtual void initializeSchemaManager();
528 virtual void initializeLibXmlIfNecessary();
532 virtual bool shouldSkipThisTick(
double simulationTime );
535 virtual void postInitialize();
538 virtual void postInitializeMaster();
541 virtual void checkForData();
549 void masterTick(
double simulationTime );
558 virtual bool local_realizeDisplayConfiguration(
559 const std::string& clientName,
const std::string& displayName);
563 virtual void local_destroyDisplay(
const std::string& displayName);
566 virtual bool local_modifyDisplay(
const std::string& displayName,
576 void destroyDisplay();
641 template <
typename ManagerClass>
678 template <
typename ManagerClass>
681 ManagerClass* mgr =
dynamic_cast<ManagerClass*
>
689 DtTHROW_NEW(DtCorruptedState,
690 "Manager created after display engine was initialized.");
695 DtTHROW_NEW(DtCorruptedState,
"Create unsupported manager in slave.");
699 mgr =
new ManagerClass(de);
716 template <
typename ManagerClass>
722 DtTHROW_NEW(DtCorruptedState,
723 "Manager created after display engine was initialized.");
730 mgr->myConnections.manageConnection(
732 &ManagerClass::loadDefaults,mgr)));