19 #include <vlutil/vlThreadSysWrapper.h>
23 #include <boost/bind.hpp>
24 #include <tbb/mutex.h>
25 #include <tbb/recursive_mutex.h>
29 #define DT_DE_INIT_ONCE(de)\
30 if(de.isInitFunctionRegistered((void*)&init))\
36 de.registerInitFunction((void*)&init);\
44 class DtBackgroundLoader;
47 class DtDeSharedState;
49 class DtDriverManager;
51 class DtInMemoryProfilerDistributorAgent;
52 class DtMessageDispatcher;
56 class DtVirtualBaseClass;
57 class DtSchemaManager;
60 class DtDisplayConfiguration;
61 class DtWindowConfiguration;
62 class DtChannelConfiguration;
63 class DtDriverConfiguration;
64 class DtSynchronizedTimeManager;
76 typedef std::vector<std::pair<DtDeError,bool> >
DeErrors;
115 UnableToInitialize = 0,
116 UnableToInitializeDueToLicense = -1
131 virtual InitializationResult initialize(
bool abortOnLicenseFailure =
true,
bool useLicenseErrorDialog=
true );
134 bool initialized()
const;
139 DtThreadId threadId();
156 virtual void tick(
double simTime);
161 inline void retick() { tick(simulationTime()); }
166 virtual bool timeToStop()
const;
169 virtual void setTimeToStop(
bool flag =
true);
175 virtual void reset();
178 virtual void updateScene();
214 bool driverManagerCreated()
const;
230 virtual double simulationTime()
const;
234 virtual double syncedTime()
const;
242 virtual int displayCount()
const;
251 virtual bool isInMasterMode()
const;
254 virtual bool isInSlaveMode()
const;
269 virtual const DeErrors deErrors()
const;
272 virtual void clearDeErrors();
278 bool renderFrameThisTick()
const;
283 virtual bool licenseAvailable()
const;
304 virtual void realizeDisplayConfiguration(
const std::string& clientName,
313 virtual void destroyDisplay(
const std::string& displayName);
316 virtual void destroyAllDisplays();
319 virtual bool modifyDisplay(
const std::string& displayName,
329 virtual void setSimulationTime(
double time);
334 virtual double systemTime()
const;
337 virtual void setCurrentFrameNumber(
unsigned int frameNumber);
340 virtual unsigned int currentFrameNumber()
const;
343 virtual bool isPaused()
const;
348 virtual void pause();
351 virtual void resume();
357 double pausedTime()
const;
365 StaticInstanceFunction classInstanceFunction)
const;
370 template <
typename Class>
373 return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
378 virtual void registerFastInstance(
384 template <
typename Class>
387 registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
404 virtual void registerInstance(
const std::string& instanceName,
408 virtual void registerProctor(
unsigned short handlerId,
DtProctor*);
412 virtual void unregisterProctor(
unsigned short handlerId);
415 DtProctor* findProctor(
unsigned short handlerId)
const;
425 void setRenderFrameThisTick(
bool update);
429 virtual bool modelSetActive(
int i)
const;
433 virtual void determineActiveModelSets();
445 virtual void startLogFrameTime();
446 virtual void stopLogFrameTime();
483 boost::signalslib::signal<void (const std::string&, const std::string&)>
499 boost::signalslib::signal<void (const std::string&, const DtDisplayConfiguration&)>
505 boost::signalslib::signal<void (const std::string&, const DtWindowConfiguration&)>
512 boost::signalslib::signal<void (const std::string&, const std::string&)>
542 boost::signalslib::signal<void (const DtDeError& error, bool critical)>
signal_deError;
563 virtual void onSlaveConnected(
const std::string& igName);
566 virtual void emitDeError(
const DtDeError& error,
bool criticalError);
572 static const char* className();
576 void registerInitFunction(
void*
address);
579 bool isInitFunctionRegistered(
void*
address);
583 inline bool shouldSendMesssage()
585 return isInMasterMode() && myCommunicator && !myCommunicator->masterIgOnly();
590 virtual void setTargetFrameTime(
double frameTimeInMs);
593 virtual double targetFrameTime();
597 virtual void runSwapBufferWork();
600 virtual void startProfilerNextFrame();
602 virtual void stopProfilerNextFrame();
605 virtual double lastUpdateTime()
const;
618 virtual void initializeSchemaManager();
620 virtual void initializeLibXmlIfNecessary();
624 virtual bool shouldSkipThisTick(
double simulationTime );
627 virtual void postInitialize();
630 virtual void postInitializeMaster();
633 virtual void checkForData();
641 void masterTick(
double simulationTime );
645 void renderTick(
double elapsedTime);
651 virtual bool local_realizeDisplayConfiguration(
656 virtual void local_destroyDisplay(
const std::string& displayName);
659 virtual bool local_modifyDisplay(
const std::string& displayName,
669 void destroyDisplay();
675 virtual void intializeStatsManager(
void);
743 Master3D_License = 0,
771 template <
typename ManagerClass>
808 template <
typename ManagerClass>
811 ManagerClass* mgr =
dynamic_cast<ManagerClass*
>
819 DtTHROW_NEW(DtCorruptedState,
820 "Manager created after display engine was initialized.");
825 DtTHROW_NEW(DtCorruptedState,
"Create unsupported manager in slave.");
829 mgr =
new ManagerClass(de);
846 template <
typename ManagerClass>
852 DtTHROW_NEW(DtCorruptedState,
853 "Manager created after display engine was initialized.");
860 mgr->myConnections.manageConnection(
862 &ManagerClass::loadDefaults,mgr)));