VR-Forces Development_Version Class 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) 2013 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 DtMessageDispatcher;
47  class DtProctor;
48  class DtRenderer;
49  class DtScene;
50  class DtVirtualBaseClass;
51  class DtSchemaManager;
52  class DtStatsSet;
53  class DtDeError;
54  class DtDisplayConfiguration;
55  class DtWindowConfiguration;
56  class DtChannelConfiguration;
57  class DtDriverConfiguration;
58  class DtSynchronizedTimeManager;
59 
64  {
65  public:
66 
67  friend class DtDeProctor;
68 
70  typedef std::vector<std::pair<DtDeError,bool> > DeErrors;
71 
72  public:
73 
75  DtDe();
76 
79  virtual ~DtDe();
80 
84  bool destructing();
85 
89  virtual void setDeInitializer(const DtDeInitializer& initializer);
90 
95  virtual void setPathConfiguration(const DtDePathConfiguration& pathConfig);
96 
99  {
100  Initialized = 1,
101  UnableToInitialize = 0,
102  UnableToInitializeDueToLicense = -1
103  };
104 
117  virtual InitializationResult initialize( bool abortOnLicenseFailure = true, bool useLicenseErrorDialog=true );
118 
120  bool initialized() const;
121 
125  DtThreadId threadId();
126 
132  virtual void setDeConfiguration(const DtDeConfiguration& deConfig);
133 
142  virtual void tick(double simTime);
143 
147  inline void retick() { tick(simulationTime()); }
148 
152  virtual bool timeToStop() const;
153 
155  virtual void setTimeToStop(bool flag = true);
156 
158  virtual void quit();
159 
161  virtual void reset();
162 
164  void updateScene();
165 
167 
168 
170  virtual const DtDeConfiguration& deConfiguration() const;
171 
174  virtual DtDeCommunicator& igCommunicator();
175 
177  DtMainEventQueue& mainEventQueue();
178 
181  virtual DtDisplay* display();
182 
187  virtual DtScene& scene();
188 
192  virtual DtDataBank& dataBank();
193 
197  virtual DtDriverManager& driverManager();
198 
200  bool driverManagerCreated() const;
201 
203  virtual DtMessageDispatcher& dispatcher();
204 
206  inline DtDebugLog& log() { return myDebugLog; }
207 
210  DtAgentManager& agentManager();
211 
213  virtual double simulationTime() const;
214 
217  virtual double syncedTime() const;
218 
222  virtual DtSynchronizedTimeManager* findSynchronizedTimeManager();
223 
225  virtual int displayCount() const;
226 
228  virtual const DtDeInitializer& deInitializer() const;
229 
231  virtual const DtDePathConfiguration& dePathConfiguration() const;
232 
234  virtual bool isInMasterMode() const;
235 
237  virtual bool isInSlaveMode() const;
238 
240  virtual DtDeSharedState& sharedState();
241 
244  virtual const DtSchemaManager& schemaManager() const;
245  virtual DtSchemaManager& schemaManager();
246 
248  virtual DtFileCache* fileCache();
249 
251  virtual const DeErrors& deErrors() const;
252 
254  virtual void clearDeErrors();
255 
257  virtual DtRenderer& renderer() const;
258 
260  bool renderFrameThisTick() const;
261 
265  virtual bool licenseAvailable() const;
266 
268 
270 
271 
275  virtual bool addDisplayConfiguration(const DtDisplayConfiguration&);
276 
286  virtual void realizeDisplayConfiguration(const std::string& clientName,
287  const std::string& displayName);
288 
291  virtual void destroyDisplay(DtDisplayProxySP display);
292 
295  virtual void destroyDisplay(const std::string& displayName);
296 
298  virtual void destroyAllDisplays();
299 
301  virtual bool modifyDisplay( const std::string& displayName,
302  const DtDisplayConfiguration& config );
303 
305 
307 
308 
311  virtual void setSimulationTime(double time);
312 
316  virtual double systemTime() const;
317 
319  typedef DtVirtualBaseClass& (*StaticInstanceFunction)(DtDe&);
320 
323  virtual DtVirtualBaseClass* findFastInstance(
324  StaticInstanceFunction classInstanceFunction) const;
325 
329  template <typename Class>
330  DtVirtualBaseClass* findFastInstance(Class& (*staticInstFunc)(DtDe&)) const
331  {
332  return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
333  }
334 
337  virtual void registerFastInstance(
338  StaticInstanceFunction classInstanceFunction, DtVirtualBaseClass* inst);
339 
343  template <typename Class>
344  void registerFastInstance(Class& (*staticInstFunc)(DtDe&),DtVirtualBaseClass* inst)
345  {
346  registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
347  }
348 
351  virtual DtVirtualBaseClass* findInstance(
352  const std::string& instanceName) const;
353 
363  virtual void registerInstance(const std::string& instanceName,
364  DtVirtualBaseClass* instance);
365 
367  virtual void registerProctor(unsigned short handlerId,DtProctor*);
368 
371  virtual void unregisterProctor(unsigned short handlerId);
372 
374  DtProctor* findProctor(unsigned short handlerId) const;
375 
378  DtDisplayProxySP findDisplay(const std::string& displayName );
379 
381  virtual DtDisplayProxySP findDisplayByIndex(int index);
382 
384  void setRenderFrameThisTick(bool update);
385 
387  virtual bool isValidDisplayConfiguration( const DtDisplayConfiguration& dec );
388 
390 
391  //
393 
394 
400  boost::signal<void ()> signal_initializeDefaultState;
401 
406  boost::signal<void ()> signal_postInitialize;
407 
413  boost::signal<void (DtDe&)> signal_preTick;
414 
420  boost::signal<void ()> signal_postTick;
421 
424  boost::signal<void (const std::string&, const std::string&)>
426 
430  boost::signal<void (const DtDisplayConfiguration&)> signal_displayConfigurationAdded;
431 
435  boost::signal<void (const std::string&)> signal_displayToBeDestroyed;
436 
440  boost::signal<void (const std::string&, const DtDisplayConfiguration&)>
442 
446  boost::signal<void (const std::string&, const DtWindowConfiguration&)>
448 
453  boost::signal<void (const std::string&, const std::string&)>
455 
459  boost::signal<void (const std::string&, const std::string&,
461 
465  boost::signal<void (const std::string&, const std::string&,
467 
471  boost::signal<void (const std::string&, const std::string&,
472  const std::string&)> signal_channelToBeDestroyed;
473 
477  boost::signal<void (const std::string&, const std::string&,
478  const std::string&, const DtChannelConfiguration&)>
480 
483  boost::signal<void (const DtDeError& error, bool critical)> signal_deError;
484 
487  boost::signal<void ()> signal_quit;
488 
490 
491  //
493 
494 
496  virtual void onSlaveConnected(const std::string& igName);
497 
499  virtual void emitDeError(const DtDeError& error, bool criticalError);
500 
502 
505  static const char* className();
506 
509  void registerInitFunction(void* address);
510 
512  bool isInitFunctionRegistered(void* address);
513 
516  inline bool shouldSendMesssage()
517  {
518  return isInMasterMode() && myCommunicator && !myCommunicator->masterIgOnly();
519  }
520 
521  inline void setPagedLodMagnificationScaleFactor( float factor )
522  {
523  myPagedLodMagnificationScaleFactor = factor;
524  }
525 
526  inline float pagedLodMagnificationScaleFactor() const
527  {
528  return myPagedLodMagnificationScaleFactor;
529  }
530 
531  protected:
532 
534 
535 
537  virtual unsigned int countEmbeddedWindows( const DtDisplayConfiguration &dec );
538 
540 
541 
542  virtual void initializeSchemaManager();
543 
544  virtual void initializeLibXmlIfNecessary();
545 
548  virtual bool shouldSkipThisTick( double simulationTime );
549 
551  virtual void postInitialize();
552 
554  virtual void postInitializeMaster();
555 
557  virtual void checkForData();
558 
560 
561  //Default implementation of a slave's tick.
562  void slaveTick();
563 
564  //Default implementation of a master's tick.
565  void masterTick( double simulationTime );
566 
568  void renderTick();
569 
571  DtDeProctor* proctor();
572 
574  virtual bool local_realizeDisplayConfiguration(
575  const std::string& clientName, const std::string& displayName);
576 
579  virtual void local_destroyDisplay(const std::string& displayName);
580 
582  virtual bool local_modifyDisplay( const std::string& displayName,
583  const DtDisplayConfiguration& config );
584 
586  void createDisplay(DtDisplayConfiguration&);
587 
589  void createIgCommunicator( DtDriverConfiguration& config);
590 
592  void destroyDisplay();
593 
595  bool local_addDisplayConfiguration( const DtDisplayConfiguration& dec);
596 
597 
599 
600  protected:
601 
603  typedef std::vector<void*> InitFunctionVector;
604 
605  // Normal map here since add/remove order matters for destruction order
606  typedef std::map<std::string,DtVirtualBaseClass*> RootedSingletonMap;
607  typedef std::map<StaticInstanceFunction,DtVirtualBaseClass*> FastRootedSingletonMap;
608 
609  typedef std::map<std::string,DtDisplayProxyWP> DisplayEngineProxyMap;
610 
611  protected:
612 
613  static const char* myClassName;
614 
619  bool myStopFlag;
636 
639 
646 
647  mutable std::string myLastInstanceName;
648  mutable RootedSingletonMap::const_iterator myLastInstance;
649 
650  DtThreadId myThreadId;
651 
654 
656  {
657  NoLicense = -1,
658  Master3D_License = 0,
659  XR_License = 1,
660  PVD_License = 2
661  };
662 
664 
665  //temporary until this becomes a render setting (maybe)
668  };
669 
670 
671  template <typename ManagerClass>
672  void defaultManagerRegisterInstanceFunction(DtDe& de, ManagerClass* mgr);
673 
708  template <typename ManagerClass>
709  ManagerClass& defaultManagerInstanceFunction(DtDe& de, bool allowedInSlave)
710  {
711  ManagerClass* mgr = dynamic_cast<ManagerClass*>
712  (de.findFastInstance(&ManagerClass::instance));
713 
714  if(!mgr)
715  {
716  //Require that manager is created before de is initialized.
717  if(de.initialized())
718  {
719  DtTHROW_NEW(DtCorruptedState,
720  "Manager created after display engine was initialized.");
721  }
722 
723  if(!allowedInSlave && de.isInSlaveMode())
724  {
725  DtTHROW_NEW(DtCorruptedState, "Create unsupported manager in slave.");
726  }
727 
728  //Create and register the manager.
729  mgr = new ManagerClass(de);
731  }
732  return *mgr;
733  }
734 
746  template <typename ManagerClass>
747  void defaultManagerRegisterInstanceFunction(DtDe& de, ManagerClass* mgr)
748  {
749  //Always override before init.
750  if(de.initialized())
751  {
752  DtTHROW_NEW(DtCorruptedState,
753  "Manager created after display engine was initialized.");
754  }
755 
756  de.registerFastInstance(&ManagerClass::instance,mgr);
757 
760  mgr->myConnections.manageConnection(
761  de.signal_initializeDefaultState.connect(boost::bind(
762  &ManagerClass::loadDefaults,mgr)));
763  }
764 
765 }

Document ID: Generated on Mon Jul 4 01:00:18 EDT 2016 from SVN revision 166489
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)