17 #include <vlutil/vlThreadSysWrapper.h>
21 #include <boost/bind.hpp>
25 #define DT_DE_INIT_ONCE(de)\
26 if(de.isInitFunctionRegistered((void*)&init))\
32 de.registerInitFunction((void*)&init);\
42 class DtDeSharedState;
44 class DtDriverManager;
46 class DtMessageDispatcher;
50 class DtVirtualBaseClass;
51 class DtSchemaManager;
54 class DtDisplayConfiguration;
55 class DtWindowConfiguration;
56 class DtChannelConfiguration;
57 class DtDriverConfiguration;
58 class DtSynchronizedTimeManager;
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;
217 virtual double syncedTime()
const;
225 virtual int displayCount()
const;
234 virtual bool isInMasterMode()
const;
237 virtual bool isInSlaveMode()
const;
251 virtual const DeErrors& deErrors()
const;
254 virtual void clearDeErrors();
260 bool renderFrameThisTick()
const;
265 virtual bool licenseAvailable()
const;
286 virtual void realizeDisplayConfiguration(
const std::string& clientName,
287 const std::string& displayName);
295 virtual void destroyDisplay(
const std::string& displayName);
298 virtual void destroyAllDisplays();
301 virtual bool modifyDisplay(
const std::string& displayName,
311 virtual void setSimulationTime(
double time);
316 virtual double systemTime()
const;
324 StaticInstanceFunction classInstanceFunction)
const;
329 template <
typename Class>
332 return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
337 virtual void registerFastInstance(
343 template <
typename Class>
346 registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
352 const std::string& instanceName)
const;
363 virtual void registerInstance(
const std::string& instanceName,
367 virtual void registerProctor(
unsigned short handlerId,
DtProctor*);
371 virtual void unregisterProctor(
unsigned short handlerId);
374 DtProctor* findProctor(
unsigned short handlerId)
const;
384 void setRenderFrameThisTick(
bool update);
424 boost::signal<void (const std::string&, const std::string&)>
440 boost::signal<void (const std::string&, const DtDisplayConfiguration&)>
446 boost::signal<void (const std::string&, const DtWindowConfiguration&)>
453 boost::signal<void (const std::string&, const std::string&)>
459 boost::signal<void (
const std::string&,
const std::string&,
465 boost::signal<void (
const std::string&,
const std::string&,
471 boost::signal<void (
const std::string&,
const std::string&,
477 boost::signal<void (
const std::string&,
const std::string&,
496 virtual void onSlaveConnected(
const std::string& igName);
499 virtual void emitDeError(
const DtDeError&
error,
bool criticalError);
505 static const char* className();
509 void registerInitFunction(
void* address);
512 bool isInitFunctionRegistered(
void* address);
516 inline bool shouldSendMesssage()
518 return isInMasterMode() && myCommunicator && !myCommunicator->masterIgOnly();
521 inline void setPagedLodMagnificationScaleFactor(
float factor )
523 myPagedLodMagnificationScaleFactor = factor;
526 inline float pagedLodMagnificationScaleFactor()
const
528 return myPagedLodMagnificationScaleFactor;
542 virtual void initializeSchemaManager();
544 virtual void initializeLibXmlIfNecessary();
548 virtual bool shouldSkipThisTick(
double simulationTime );
551 virtual void postInitialize();
554 virtual void postInitializeMaster();
557 virtual void checkForData();
565 void masterTick(
double simulationTime );
574 virtual bool local_realizeDisplayConfiguration(
575 const std::string& clientName,
const std::string& displayName);
579 virtual void local_destroyDisplay(
const std::string& displayName);
582 virtual bool local_modifyDisplay(
const std::string& displayName,
592 void destroyDisplay();
657 Master3D_License = 0,
669 template <
typename ManagerClass>
706 template <
typename ManagerClass>
709 ManagerClass* mgr =
dynamic_cast<ManagerClass*
>
717 DtTHROW_NEW(DtCorruptedState,
718 "Manager created after display engine was initialized.");
723 DtTHROW_NEW(DtCorruptedState,
"Create unsupported manager in slave.");
727 mgr =
new ManagerClass(de);
744 template <
typename ManagerClass>
750 DtTHROW_NEW(DtCorruptedState,
751 "Manager created after display engine was initialized.");
754 de.registerFastInstance(&ManagerClass::instance,mgr);
758 mgr->myConnections.manageConnection(
759 de.signal_initializeDefaultState.connect(
boost::bind(
760 &ManagerClass::loadDefaults,mgr)));