VR-Vantage 2.4 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DtDe.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2018 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
13 #include <vrvCore/DtDisplayProxy.h>
14 
16 
17 #include <vlutil/vlThreadSysWrapper.h>
18 
19 #include <vector>
20 
21 #include <boost/bind.hpp>
22 
25 #define DT_DE_INIT_ONCE(de)\
26 if(de.isInitFunctionRegistered((void*)&init))\
27 {\
28  return;\
29 }\
30 else\
31 {\
32  de.registerInitFunction((void*)&init);\
33 }
34 
35 class DtClock;
36 
37 namespace makVrv
38 {
39  class DtAgentManager;
40  class DtDataBank;
41  class DtDeProctor;
42  class DtDeSharedState;
43  class DtDisplay;
44  class DtDriverManager;
45  class DtFileCache;
46  class DtInMemoryProfilerDistributorAgent;
47  class DtMessageDispatcher;
48  class DtProctor;
49  class DtRenderer;
50  class DtScene;
51  class DtVirtualBaseClass;
52  class DtSchemaManager;
53  class DtStatsSet;
54  class DtDeError;
55  class DtDisplayConfiguration;
56  class DtWindowConfiguration;
57  class DtChannelConfiguration;
58  class DtDriverConfiguration;
59  class DtSynchronizedTimeManager;
60 
65  {
66  public:
67 
68  friend class DtDeProctor;
69 
71  typedef std::vector<std::pair<DtDeError,bool> > DeErrors;
72 
73  public:
74 
76  DtDe();
77 
80  virtual ~DtDe();
81 
85  bool destructing();
86 
93  bool resetting();
94 
98  virtual void setDeInitializer(const DtDeInitializer& initializer);
99 
104  virtual void setPathConfiguration(const DtDePathConfiguration& pathConfig);
105 
108  {
109  Initialized = 1,
110  UnableToInitialize = 0,
111  UnableToInitializeDueToLicense = -1
112  };
113 
126  virtual InitializationResult initialize( bool abortOnLicenseFailure = true, bool useLicenseErrorDialog=true );
127 
129  bool initialized() const;
130 
134  DtThreadId threadId();
135 
141  virtual void setDeConfiguration(const DtDeConfiguration& deConfig);
142 
151  virtual void tick(double simTime);
152 
156  inline void retick() { tick(simulationTime()); }
157 
161  virtual bool timeToStop() const;
162 
164  virtual void setTimeToStop(bool flag = true);
165 
167  virtual void quit();
168 
170  virtual void reset();
171 
173  virtual void updateScene();
174 
176 
177 
179  virtual const DtDeConfiguration& deConfiguration() const;
180 
183  virtual DtDeCommunicator& igCommunicator();
184 
186  DtMainEventQueue& mainEventQueue();
187 
190  virtual DtDisplay* display();
191 
196  virtual DtScene& scene();
197 
201  virtual DtDataBank& dataBank();
202 
206  virtual DtDriverManager& driverManager();
207 
209  bool driverManagerCreated() const;
210 
212  virtual DtMessageDispatcher& dispatcher();
213 
215  inline DtDebugLog& log() { return *myDebugLog; }
216 
219  DtAgentManager& agentManager();
220 
222  virtual double simulationTime() const;
223 
226  virtual double syncedTime() const;
227 
231  virtual DtSynchronizedTimeManager* findSynchronizedTimeManager();
232 
234  virtual int displayCount() const;
235 
237  virtual const DtDeInitializer& deInitializer() const;
238 
240  virtual const DtDePathConfiguration& dePathConfiguration() const;
241 
243  virtual bool isInMasterMode() const;
244 
246  virtual bool isInSlaveMode() const;
247 
249  virtual DtDeSharedState& sharedState();
250  virtual const DtDeSharedState& sharedState() const;
251 
254  virtual const DtSchemaManager& schemaManager() const;
255  virtual DtSchemaManager& schemaManager();
256 
258  virtual DtFileCache* fileCache();
259 
261  virtual const DeErrors& deErrors() const;
262 
264  virtual void clearDeErrors();
265 
267  virtual DtRenderer& renderer() const;
268 
270  bool renderFrameThisTick() const;
271 
275  virtual bool licenseAvailable() const;
276 
278 
280 
281 
285  virtual bool addDisplayConfiguration(const DtDisplayConfiguration&);
286 
296  virtual void realizeDisplayConfiguration(const std::string& clientName,
297  const std::string& displayName);
298 
301  virtual void destroyDisplay(DtDisplayProxySP display);
302 
305  virtual void destroyDisplay(const std::string& displayName);
306 
308  virtual void destroyAllDisplays();
309 
311  virtual bool modifyDisplay( const std::string& displayName,
312  const DtDisplayConfiguration& config );
313 
315 
317 
318 
321  virtual void setSimulationTime(double time);
322 
326  virtual double systemTime() const;
327 
329  virtual bool isPaused() const;
330 
334  virtual void pause();
335 
337  virtual void resume();
338 
343  double pausedTime() const;
344 
346  typedef DtVirtualBaseClass& (*StaticInstanceFunction)(DtDe&);
347 
350  virtual DtVirtualBaseClass* findFastInstance(
351  StaticInstanceFunction classInstanceFunction) const;
352 
356  template <typename Class>
357  DtVirtualBaseClass* findFastInstance(Class& (*staticInstFunc)(DtDe&)) const
358  {
359  return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
360  }
361 
364  virtual void registerFastInstance(
365  StaticInstanceFunction classInstanceFunction, DtVirtualBaseClass* inst);
366 
370  template <typename Class>
371  void registerFastInstance(Class& (*staticInstFunc)(DtDe&),DtVirtualBaseClass* inst)
372  {
373  registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
374  }
375 
378  virtual DtVirtualBaseClass* findInstance(
379  const std::string& instanceName) const;
380 
390  virtual void registerInstance(const std::string& instanceName,
391  DtVirtualBaseClass* instance);
392 
394  virtual void registerProctor(unsigned short handlerId,DtProctor*);
395 
398  virtual void unregisterProctor(unsigned short handlerId);
399 
401  DtProctor* findProctor(unsigned short handlerId) const;
402 
405  DtDisplayProxySP findDisplay(const std::string& displayName );
406 
408  virtual DtDisplayProxySP findDisplayByIndex(int index);
409 
411  void setRenderFrameThisTick(bool update);
412 
414  virtual bool isValidDisplayConfiguration( const DtDisplayConfiguration& dec );
415 
417  virtual void createDebugLog(const std::string& fileName, DtDebugLog::PrintLevel level);
418 
423  virtual void startLogFrameTime();
424  virtual void stopLogFrameTime();
425 
427 
428  //
430 
431 
437  boost::signal<void ()> signal_initializeDefaultState;
438 
443  boost::signal<void ()> signal_postInitialize;
444 
450  boost::signal<void (DtDe&)> signal_preTick;
451 
457  boost::signal<void ()> signal_postTick;
458 
461  boost::signal<void (const std::string&, const std::string&)>
463 
467  boost::signal<void (const DtDisplayConfiguration&)> signal_displayConfigurationAdded;
468 
472  boost::signal<void (const std::string&)> signal_displayToBeDestroyed;
473 
477  boost::signal<void (const std::string&, const DtDisplayConfiguration&)>
479 
483  boost::signal<void (const std::string&, const DtWindowConfiguration&)>
485 
490  boost::signal<void (const std::string&, const std::string&)>
492 
496  boost::signal<void (const std::string&, const std::string&,
498 
502  boost::signal<void (const std::string&, const std::string&,
504 
508  boost::signal<void (const std::string&, const std::string&,
510 
514  boost::signal<void (const std::string&, const std::string&,
515  const std::string&, const DtChannelConfiguration&)>
517 
520  boost::signal<void (const DtDeError& error, bool critical)> signal_deError;
521 
524  boost::signal<void ()> signal_quit;
525 
527  boost::signal<void()> signal_pause;
528 
530  boost::signal<void()> signal_resume;
531 
532  boost::signal<void()> signal_aboutToAutoStartDrivers;
533 
535 
536  //
538 
539 
541  virtual void onSlaveConnected(const std::string& igName);
542 
544  virtual void emitDeError(const DtDeError& error, bool criticalError);
545 
547 
550  static const char* className();
551 
554  void registerInitFunction(void* address);
555 
557  bool isInitFunctionRegistered(void* address);
558 
561  inline bool shouldSendMesssage()
562  {
563  return isInMasterMode() && myCommunicator && !myCommunicator->masterIgOnly();
564  }
565 
566  inline void setPagedLodMagnificationScaleFactor( float factor )
567  {
568  myPagedLodMagnificationScaleFactor = factor;
569  }
570 
571  inline float pagedLodMagnificationScaleFactor() const
572  {
573  return myPagedLodMagnificationScaleFactor;
574  }
575 
576  protected:
577 
579 
580 
582  virtual unsigned int countEmbeddedWindows( const DtDisplayConfiguration &dec );
583 
585 
586 
587  virtual void initializeSchemaManager();
588 
589  virtual void initializeLibXmlIfNecessary();
590 
593  virtual bool shouldSkipThisTick( double simulationTime );
594 
596  virtual void postInitialize();
597 
599  virtual void postInitializeMaster();
600 
602  virtual void checkForData();
603 
605 
606  //Default implementation of a slave's tick.
607  void slaveTick();
608 
609  //Default implementation of a master's tick.
610  void masterTick( double simulationTime );
611 
613  void renderTick();
614 
616  DtDeProctor* proctor();
617 
619  virtual bool local_realizeDisplayConfiguration(
620  const std::string& clientName, const std::string& displayName);
621 
624  virtual void local_destroyDisplay(const std::string& displayName);
625 
627  virtual bool local_modifyDisplay( const std::string& displayName,
628  const DtDisplayConfiguration& config );
629 
631  void createDisplay(DtDisplayConfiguration&);
632 
634  void createIgCommunicator( DtDriverConfiguration& config);
635 
637  void destroyDisplay();
638 
640  bool local_addDisplayConfiguration( const DtDisplayConfiguration& dec);
641 
643  virtual void intializeStatsManager(void);
644 
646 
647  protected:
648 
650  typedef std::vector<void*> InitFunctionVector;
651 
652  // Normal map here since add/remove order matters for destruction order
653  typedef std::map<std::string,DtVirtualBaseClass*> RootedSingletonMap;
654  typedef std::map<StaticInstanceFunction,DtVirtualBaseClass*> FastRootedSingletonMap;
655 
656  typedef std::map<std::string,DtDisplayProxyWP> DisplayEngineProxyMap;
657 
658  protected:
659 
660  static const char* myClassName;
661 
666  bool myStopFlag;
683 
686 
693 
695  mutable RootedSingletonMap::const_iterator myLastInstance;
696 
697  DtThreadId myThreadId;
698 
701 
703  {
704  NoLicense = -1,
705  Master3D_License = 0,
706  XR_License = 1,
707  PVD_License = 2
708  };
709 
711 
712  //temporary until this becomes a render setting (maybe)
714 
719 
720  // This is used to provide an advancing time to the observer and observer event processor
721  // when simulation time is paused. Users of this 'pausedTime' must deal with the fact that
722  // the switch from paused time back to simTime will go 'into the past'
724  };
725 
726 
727  template <typename ManagerClass>
728  void defaultManagerRegisterInstanceFunction(DtDe& de, ManagerClass* mgr);
729 
764  template <typename ManagerClass>
765  ManagerClass& defaultManagerInstanceFunction(DtDe& de, bool allowedInSlave)
766  {
767  ManagerClass* mgr = dynamic_cast<ManagerClass*>
768  (de.findFastInstance(&ManagerClass::instance));
769 
770  if(!mgr)
771  {
772  //Require that manager is created before de is initialized.
773  if(de.initialized())
774  {
775  DtTHROW_NEW(DtCorruptedState,
776  "Manager created after display engine was initialized.");
777  }
778 
779  if(!allowedInSlave && de.isInSlaveMode())
780  {
781  DtTHROW_NEW(DtCorruptedState, "Create unsupported manager in slave.");
782  }
783 
784  //Create and register the manager.
785  mgr = new ManagerClass(de);
787  }
788  return *mgr;
789  }
790 
802  template <typename ManagerClass>
803  void defaultManagerRegisterInstanceFunction(DtDe& de, ManagerClass* mgr)
804  {
805  //Always override before init.
806  if(de.initialized())
807  {
808  DtTHROW_NEW(DtCorruptedState,
809  "Manager created after display engine was initialized.");
810  }
811 
812  de.registerFastInstance(&ManagerClass::instance,mgr);
813 
816  mgr->myConnections.manageConnection(
818  &ManagerClass::loadDefaults,mgr)));
819  }
820 
821 }


Copyright © 2005-2018 VT MAK. All Rights Reserved (www.mak.com)