VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtMainThreadJobsManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2019 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <osg/OperationThread>
13 #include <osgUtil/IncrementalCompileOperation>
14 #include <osgUtil/SceneView>
15 
16 #include <tbb/atomic.h>
17 
18 #include <vrvOsg/vrvOsg.h>
19 #include <vrvOsg/DtOsgRenderer.h>
22 
23 namespace makVrv
24 {
25 
26 
39 
47 
79 
80  class DT_DLL_VRVOSG DtMainThreadJobsManager : public osg::Operation
81  {
82  public:
84 
87  {
88  // Raising exception in destructor is illegal
89  try {
90  // The viewer is getting rid of us, so tell the renderer
91  // so that is doesn't try to delete us again
92  DtOsgRenderer& renderer = dynamic_cast<DtOsgRenderer&>(myDe.renderer());
93  renderer.clearMainThreadJobsManager();
94  }
95  catch (...)
96  {
97  assert(false);
98  }
99  }
100 
102  virtual void operator () (osg::Object* obj);
103 
105  virtual void startUp();
106 
108  virtual void release();
109 
111  void setIco(osgUtil::IncrementalCompileOperation* ico);
112 
114  virtual void addPersistantJob(osg::Operation* job);
115 
117  virtual void removePersistantJob(osg::Operation* job);
118 
120  virtual void addTransientJob(osg::Operation* job);
121 
123  virtual void addRequiredTransientJob(osg::Operation* job);
124 
126  virtual int numberOfTransientJobs();
127 
129  virtual void finishFrameTime(double budget, osg::Object* obj);
130 
132  virtual double lastFrameTime() { return myLastFrameTime; }
133 
134  protected:
135 
137  virtual void runTransientJobs(osgUtil::SceneView* sceneView);
138 
139  std::vector<osg::ref_ptr<osg::Operation> > myPersistantJobs;
140 
141  std::vector<osg::ref_ptr<osg::Operation> > myRequiredTransientJobs;
142  // transient jobs
143  tbb::atomic<int> myNumberOfTransientJobs;
144  std::vector<osg::ref_ptr<osg::Operation> > myTransientJobs;
145  std::vector<osg::ref_ptr<osg::Operation> > myNextFrameJobs;
146 
147  osgUtil::IncrementalCompileOperation* myIco;
149  OpenThreads::Condition myRunThreadWaitCond;
150  tbb::atomic<bool> myKeepGoing;
152 
154 
155  private:
159  DtMainThreadJobsManager& operator=(const DtMainThreadJobsManager& rhs);
160 
162 
163  };
164 
165 
166 
169  {
170  public:
173 
176  private:
181  public:
183  virtual DtMainThreadJobsManager* create() const;
184 
187  static DtMainThreadJobsManagerCreator& instance(DtDe& de);
188 
190  static const std::string& theClassName();
191 
192  protected:
194  };
195 };
The DtOsgRenderer is the component responsible for rendering 3D images onto the screen via OpenSceneG...
Definition: DtOsgRenderer.h:125
Virtual base class.
Definition: DtVirtualBaseClass.h:22
tbb::atomic< int > myNumberOfTransientJobs
Definition: DtMainThreadJobsManager.h:143
A light weight system for running jobs in the main thread during cull Transient Jobs run once and are...
Definition: DtMainThreadJobsManager.h:80
OpenThreads::Condition myRunThreadWaitCond
Definition: DtMainThreadJobsManager.h:149
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
double myLastFrameTime
Definition: DtMainThreadJobsManager.h:153
creator for DtMainThreadJobsManager
Definition: DtMainThreadJobsManager.h:168
std::vector< osg::ref_ptr< osg::Operation > > myNextFrameJobs
Definition: DtMainThreadJobsManager.h:145
osg::ref_ptr< osg::Operation > myCurrentJob
Definition: DtMainThreadJobsManager.h:151
Contains makVrv::DtVirtualBaseClass class.
std::vector< osg::ref_ptr< osg::Operation > > myRequiredTransientJobs
Definition: DtMainThreadJobsManager.h:141
OpenThreads::Mutex myMutex
Definition: DtMainThreadJobsManager.h:148
virtual ~DtMainThreadJobsManager()
DTOR.
Definition: DtMainThreadJobsManager.h:86
OpenThreads::Mutex Mutex
Definition: DtOsgThreadingUtils.h:12
DtDe & myDe
Definition: DtMainThreadJobsManager.h:193
DtDe & myDe
Definition: DtMainThreadJobsManager.h:161
std::vector< osg::ref_ptr< osg::Operation > > myTransientJobs
Definition: DtMainThreadJobsManager.h:144
std::vector< osg::ref_ptr< osg::Operation > > myPersistantJobs
Definition: DtMainThreadJobsManager.h:139
virtual void clearMainThreadJobsManager()
Contains DLL export macros.
osgUtil::IncrementalCompileOperation * myIco
Definition: DtMainThreadJobsManager.h:147
virtual double lastFrameTime()
used by profiler
Definition: DtMainThreadJobsManager.h:132
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
Contains makVrv::DtOsgRenderer class.
tbb::atomic< bool > myKeepGoing
Definition: DtMainThreadJobsManager.h:150

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)