OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ViewerBase.h
Go to the documentation of this file.
1 /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2  *
3  * This library is open source and may be redistributed and/or modified under
4  * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5  * (at your option) any later version. The full license is in LICENSE file
6  * included with this distribution, and on the openscenegraph.org website.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * OpenSceneGraph Public License for more details.
12 */
13 
14 #ifndef OSGVIEWER_VIEWERBASE
15 #define OSGVIEWER_VIEWERBASE 1
16 
17 #include <osg/Stats>
18 
19 #include <osgUtil/UpdateVisitor>
20 #include <osgUtil/IncrementalCompileOperation>
21 
22 #include <osgGA/EventVisitor>
23 #include <osgGA/EventQueue>
24 
25 #include <osgViewer/Scene>
26 #include <osgViewer/GraphicsWindow>
27 
28 namespace osgViewer {
29 
30 #define USE_REFERENCE_TIME DBL_MAX
31 
32 class View;
33 
35 class OSGVIEWER_EXPORT ViewerBase : public virtual osg::Object
36 {
37  public:
38 
39  ViewerBase();
40  ViewerBase(const ViewerBase& vb);
41 
42 
44  virtual void setViewerStats(osg::Stats* stats) = 0;
45 
47  virtual osg::Stats* getViewerStats() = 0;
48 
50  virtual const osg::Stats* getViewerStats() const = 0;
51 
52 
54  virtual bool readConfiguration(const std::string& filename) = 0;
55 
57  virtual bool isRealized() const = 0;
58 
60  virtual void realize() = 0;
61 
63  {
66  ThreadPerContext = CullDrawThreadPerContext,
69  ThreadPerCamera = CullThreadPerCameraDrawThreadPerContext,
70  AutomaticSelection
71  };
72 
74  virtual void setThreadingModel(ThreadingModel threadingModel);
75 
77  ThreadingModel getThreadingModel() const { return _threadingModel; }
78 
80  virtual ThreadingModel suggestBestThreadingModel();
81 
83  virtual void setUpThreading();
84 
86  bool areThreadsRunning() const { return _threadsRunning; }
87 
89  virtual void stopThreading();
90 
92  virtual void startThreading();
93 
95  {
97  AfterSwapBuffers
98  };
99 
105  void setEndBarrierPosition(BarrierPosition bp);
106 
108  BarrierPosition getEndBarrierPosition() const { return _endBarrierPosition; }
109 
114  void setEndBarrierOperation(osg::BarrierOperation::PreBlockOp op);
115 
117  osg::BarrierOperation::PreBlockOp getEndBarrierOperation() const { return _endBarrierOperation; }
118 
119 
121  void setDone(bool done) { _done = done; }
122 
124  bool done() const { return _done; }
125 
127  void setEventVisitor(osgGA::EventVisitor* eventVisitor) { _eventVisitor = eventVisitor; }
128 
130  osgGA::EventVisitor* getEventVisitor() { return _eventVisitor.get(); }
131 
133  const osgGA::EventVisitor* getEventVisitor() const { return _eventVisitor.get(); }
134 
139  void setKeyEventSetsDone(int key) { _keyEventSetsDone = key; }
140 
142  int getKeyEventSetsDone() const { return _keyEventSetsDone; }
143 
145  void setQuitEventSetsDone(bool flag) { _quitEventSetsDone = flag; }
146 
148  bool getQuitEventSetsDone() const { return _quitEventSetsDone; }
149 
150 
158  void setReleaseContextAtEndOfFrameHint(bool hint) { _releaseContextAtEndOfFrameHint = hint; }
159 
161  bool getReleaseContextAtEndOfFrameHint() const { return _releaseContextAtEndOfFrameHint; }
162 
163 
165  void setUpdateVisitor(osgUtil::UpdateVisitor* updateVisitor) { _updateVisitor = updateVisitor; }
166 
168  osgUtil::UpdateVisitor* getUpdateVisitor() { return _updateVisitor.get(); }
169 
171  const osgUtil::UpdateVisitor* getUpdateVisitor() const { return _updateVisitor.get(); }
172 
173 
175  void setUpdateOperations(osg::OperationQueue* operations) { _updateOperations = operations; }
176 
178  osg::OperationQueue* getUpdateOperations() { return _updateOperations.get(); }
179 
181  const osg::OperationQueue* getUpdateOperations() const { return _updateOperations.get(); }
182 
184  void addUpdateOperation(osg::Operation* operation);
185 
187  void removeUpdateOperation(osg::Operation* operation);
188 
189 
191  void setRealizeOperation(osg::Operation* op) { _realizeOperation = op; }
192 
194  osg::Operation* getRealizeOperation() { return _realizeOperation.get(); }
195 
196 
200  void setIncrementalCompileOperation(osgUtil::IncrementalCompileOperation* ico);
201 
203  osgUtil::IncrementalCompileOperation* getIncrementalCompileOperation() { return _incrementalCompileOperation.get(); }
204 
205 
207  {
209  CONTINUOUS
210  };
211 
212  void setRunFrameScheme(FrameScheme fs) { _runFrameScheme = fs; }
213  FrameScheme getRunFrameScheme() const { return _runFrameScheme; }
214 
215  void setRunMaxFrameRate(double frameRate) { _runMaxFrameRate = frameRate; }
216  double getRunMaxFrameRate() const { return _runMaxFrameRate; }
217 
223  virtual int run();
224 
226  virtual bool checkNeedToDoFrame() = 0;
227 
229  virtual bool checkEvents() = 0;
230 
233  virtual void frame(double simulationTime=USE_REFERENCE_TIME);
234 
235  virtual void advance(double simulationTime=USE_REFERENCE_TIME) = 0;
236 
237  virtual void eventTraversal() = 0;
238 
239  virtual void updateTraversal() = 0;
240 
241  virtual void renderingTraversals();
242 
243  typedef std::vector<osg::Camera*> Cameras;
244  virtual void getCameras(Cameras& cameras, bool onlyActive=true) = 0;
245 
246  typedef std::vector<osg::GraphicsContext*> Contexts;
247  virtual void getContexts(Contexts& contexts, bool onlyValid=true) = 0;
248 
249  typedef std::vector<osgViewer::GraphicsWindow*> Windows;
250  virtual void getWindows(Windows& windows, bool onlyValid=true);
251 
252  typedef std::vector<OpenThreads::Thread*> Threads;
253  virtual void getAllThreads(Threads& threads, bool onlyActive=true) = 0;
254 
255  typedef std::vector<osg::OperationThread*> OperationThreads;
256  virtual void getOperationThreads(OperationThreads& threads, bool onlyActive=true) = 0;
257 
258  typedef std::vector<osgViewer::Scene*> Scenes;
259  virtual void getScenes(Scenes& scenes, bool onlyValid=true) = 0;
260 
261  typedef std::vector<osgViewer::View*> Views;
262  virtual void getViews(Views& views, bool onlyValid=true) = 0;
263 
265  void checkWindowStatus();
266 
271  void checkWindowStatus(const Contexts& contexts);
272 
273  virtual double elapsedTime() = 0;
274 
275  virtual osg::FrameStamp* getViewerFrameStamp() = 0;
276 
278  virtual void getUsage(osg::ApplicationUsage& usage) const = 0;
279 
280  protected:
281 
282  void viewerBaseInit();
283 
284  friend class osgViewer::View;
285 
287  {
288  if (_currentContext==gc) return;
289 
290  releaseContext();
291 
292  if (gc && gc->valid() && gc->makeCurrent()) _currentContext = gc;
293  }
294 
295  inline void releaseContext()
296  {
297  if (_currentContext.valid() && _currentContext->valid())
298  {
299  _currentContext->releaseContext();
300  }
301  _currentContext = 0;
302  }
303 
304  virtual void viewerInit() = 0;
305 
307  bool _done;
311 
314 
317 
320 
321 
324 
328 
330 
333 
336 
338 
339  private:
340 
341  // Define private copy constructor
342  // otherwsie VS2015 will construct it's own which will call the private copy operator from osg::Object resulting in an compile error.
343  ViewerBase& operator = (const ViewerBase&) { return *this; }
344 };
345 
346 }
347 
348 #endif
void setUpdateOperations(osg::OperationQueue *operations)
Definition: ViewerBase.h:175
osgGA::EventVisitor * getEventVisitor()
Definition: ViewerBase.h:130
osg::ref_ptr< osg::EndOfDynamicDrawBlock > _endDynamicDrawBlock
Definition: ViewerBase.h:327
std::vector< osgViewer::Scene * > Scenes
Definition: ViewerBase.h:258
const osg::OperationQueue * getUpdateOperations() const
Definition: ViewerBase.h:181
double getRunMaxFrameRate() const
Definition: ViewerBase.h:216
void setEventVisitor(osgGA::EventVisitor *eventVisitor)
Definition: ViewerBase.h:127
FrameScheme _runFrameScheme
Definition: ViewerBase.h:318
bool getQuitEventSetsDone() const
Definition: ViewerBase.h:148
#define OSGVIEWER_EXPORT
Definition: Export.h:40
void setDone(bool done)
Definition: ViewerBase.h:121
osg::ref_ptr< osgUtil::UpdateVisitor > _updateVisitor
Definition: ViewerBase.h:332
void setReleaseContextAtEndOfFrameHint(bool hint)
Definition: ViewerBase.h:158
#define USE_REFERENCE_TIME
Definition: ViewerBase.h:30
void setKeyEventSetsDone(int key)
Definition: ViewerBase.h:139
bool done() const
Definition: ViewerBase.h:124
BarrierPosition getEndBarrierPosition() const
Definition: ViewerBase.h:108
osgUtil::IncrementalCompileOperation * getIncrementalCompileOperation()
Definition: ViewerBase.h:203
void setRealizeOperation(osg::Operation *op)
Definition: ViewerBase.h:191
osg::OperationQueue * getUpdateOperations()
Definition: ViewerBase.h:178
osg::BarrierOperation::PreBlockOp getEndBarrierOperation() const
Definition: ViewerBase.h:117
std::vector< osg::Camera * > Cameras
Definition: ViewerBase.h:243
std::vector< osg::OperationThread * > OperationThreads
Definition: ViewerBase.h:255
bool _releaseContextAtEndOfFrameHint
Definition: ViewerBase.h:310
ThreadingModel getThreadingModel() const
Definition: ViewerBase.h:77
osg::ref_ptr< osgUtil::IncrementalCompileOperation > _incrementalCompileOperation
Definition: ViewerBase.h:335
const osgUtil::UpdateVisitor * getUpdateVisitor() const
Definition: ViewerBase.h:171
virtual bool valid() const =0
osg::ref_ptr< osgGA::EventVisitor > _eventVisitor
Definition: ViewerBase.h:329
void setQuitEventSetsDone(bool flag)
Definition: ViewerBase.h:145
std::vector< osgViewer::View * > Views
Definition: ViewerBase.h:261
ThreadingModel _threadingModel
Definition: ViewerBase.h:312
bool getReleaseContextAtEndOfFrameHint() const
Definition: ViewerBase.h:161
std::vector< osg::GraphicsContext * > Contexts
Definition: ViewerBase.h:246
int getKeyEventSetsDone() const
Definition: ViewerBase.h:142
osg::ref_ptr< osg::BarrierOperation > _endRenderingDispatchBarrier
Definition: ViewerBase.h:326
std::vector< OpenThreads::Thread * > Threads
Definition: ViewerBase.h:252
bool areThreadsRunning() const
Definition: ViewerBase.h:86
void makeCurrent(osg::GraphicsContext *gc)
Definition: ViewerBase.h:286
FrameScheme getRunFrameScheme() const
Definition: ViewerBase.h:213
osg::Operation * getRealizeOperation()
Definition: ViewerBase.h:194
osg::ref_ptr< osg::BarrierOperation > _startRenderingBarrier
Definition: ViewerBase.h:325
osg::ref_ptr< osg::Operation > _realizeOperation
Definition: ViewerBase.h:334
void setUpdateVisitor(osgUtil::UpdateVisitor *updateVisitor)
Definition: ViewerBase.h:165
std::vector< osgViewer::GraphicsWindow * > Windows
Definition: ViewerBase.h:249
BarrierPosition _endBarrierPosition
Definition: ViewerBase.h:322
osg::ref_ptr< osg::OperationQueue > _updateOperations
Definition: ViewerBase.h:331
void setRunFrameScheme(FrameScheme fs)
Definition: ViewerBase.h:212
osg::BarrierOperation::PreBlockOp _endBarrierOperation
Definition: ViewerBase.h:323
osgUtil::UpdateVisitor * getUpdateVisitor()
Definition: ViewerBase.h:168
osg::observer_ptr< osg::GraphicsContext > _currentContext
Definition: ViewerBase.h:337
void setRunMaxFrameRate(double frameRate)
Definition: ViewerBase.h:215
const osgGA::EventVisitor * getEventVisitor() const
Definition: ViewerBase.h:133