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);\
46 class DtDeSharedState;
48 class DtDriverManager;
50 class DtMessageDispatcher;
54 class DtVirtualBaseClass;
55 class DtSchemaManager;
68 typedef std::vector<std::pair<DtDeError,bool> >
DeErrors;
76 void buildPerformanceStats();
102 UnableToInitialize = 0,
103 UnableToInitializeDueToLicense = -1
111 virtual InitializationResult initialize();
114 bool initialized()
const;
119 DtThreadId threadId();
136 virtual void tick(
double simTime);
141 inline void retick() { tick(simulationTime()); }
146 virtual bool timeToStop()
const;
149 virtual void setTimeToStop(
bool flag =
true);
155 virtual void reset();
194 bool driverManagerCreated()
const;
207 virtual double simulationTime()
const;
210 virtual int displayCount()
const;
219 virtual bool isInMasterMode()
const;
222 virtual bool isInSlaveMode()
const;
236 virtual const DeErrors& deErrors()
const;
239 virtual void clearDeErrors();
245 bool renderFrameThisTick()
const;
266 virtual void realizeDisplayConfiguration(
const std::string& clientName,
267 const std::string& displayName);
275 virtual void destroyDisplay(
const std::string& displayName);
278 virtual void destroyAllDisplays();
281 virtual bool modifyDisplay(
const std::string& displayName,
291 virtual void setSimulationTime(
double time);
300 StaticInstanceFunction classInstanceFunction)
const;
305 template <
typename Class>
308 return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
313 virtual void registerFastInstance(
319 template <
typename Class>
322 registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
328 const std::string& instanceName)
const;
339 virtual void registerInstance(
const std::string& instanceName,
343 virtual void registerProctor(
unsigned short handlerId,
DtProctor*);
347 virtual void unregisterProctor(
unsigned short handlerId);
350 DtProctor* findProctor(
unsigned short handlerId)
const;
360 void setRenderFrameThisTick(
bool update);
400 boost::signal<void (const std::string&, const std::string&)>
416 boost::signal<void (const std::string&, const DtDisplayConfiguration&)>
422 boost::signal<void (const std::string&, const DtWindowConfiguration&)>
429 boost::signal<void (const std::string&, const std::string&)>
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&,
472 virtual void onSlaveConnected(
const std::string& igName);
475 virtual void emitDeError(
const DtDeError& error,
bool criticalError);
481 static const char* className();
485 void registerInitFunction(
void* address);
488 bool isInitFunctionRegistered(
void* address);
492 inline bool shouldSendMesssage()
494 return isInMasterMode() && myCommunicator && !myCommunicator->masterIgOnly();
512 virtual void timingFinishTick();
515 virtual void timingFinishBetweenTicks();
520 virtual void initializeSchemaManager();
522 virtual void initializeLibXmlIfNecessary();
526 virtual bool shouldSkipThisTick(
double simulationTime );
529 virtual void postInitialize();
532 virtual void postInitializeMaster();
535 virtual void checkForData();
543 void masterTick(
double simulationTime );
552 virtual bool local_realizeDisplayConfiguration(
553 const std::string& clientName,
const std::string& displayName);
557 virtual void local_destroyDisplay(
const std::string& displayName);
560 virtual bool local_modifyDisplay(
const std::string& displayName,
570 void destroyDisplay();
633 template <
typename ManagerClass>
670 template <
typename ManagerClass>
673 ManagerClass* mgr =
dynamic_cast<ManagerClass*
>
681 DtTHROW_NEW(DtCorruptedState,
682 "Manager created after display engine was initialized.");
687 DtTHROW_NEW(DtCorruptedState,
"Create unsupported manager in slave.");
691 mgr =
new ManagerClass(de);
708 template <
typename ManagerClass>
714 DtTHROW_NEW(DtCorruptedState,
715 "Manager created after display engine was initialized.");
722 mgr->myConnections.manageConnection(
724 &ManagerClass::loadDefaults,mgr)));