OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
RenderBin.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 OSGUTIL_RENDERBIN
15 #define OSGUTIL_RENDERBIN 1
16 
17 #include <osgUtil/StateGraph>
18 
19 #include <map>
20 #include <vector>
21 #include <string>
22 
23 namespace osgUtil {
24 
25 class RenderStage;
26 class Statistics;
34 {
35  public:
36 
37  typedef std::vector<RenderLeaf*> RenderLeafList;
38  typedef std::vector<StateGraph*> StateGraphList;
39  typedef std::map< int, osg::ref_ptr<RenderBin> > RenderBinList;
40 
41  enum SortMode
42  {
47  TRAVERSAL_ORDER
48  };
49 
50  // static methods.
51  static RenderBin* createRenderBin(const std::string& binName);
52  static RenderBin* getRenderBinPrototype(const std::string& binName);
53  static void addRenderBinPrototype(const std::string& binName,RenderBin* proto);
54  static void removeRenderBinPrototype(RenderBin* proto);
55 
56  static void setDefaultRenderBinSortMode(SortMode mode);
57  static SortMode getDefaultRenderBinSortMode();
58 
59 
60 
61  RenderBin();
62 
63  RenderBin(SortMode mode);
64 
66  RenderBin(const RenderBin& rhs,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
67 
68  virtual osg::Object* cloneType() const { return new RenderBin(); }
69  virtual osg::Object* clone(const osg::CopyOp& copyop) const { return new RenderBin(*this,copyop); } // note only implements a clone of type.
70  virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const RenderBin*>(obj)!=0L; }
71  virtual const char* libraryName() const { return "osgUtil"; }
72  virtual const char* className() const { return "RenderBin"; }
73 
74  virtual void reset();
75 
76  void setStateSet(osg::StateSet* stateset) { _stateset = stateset; }
77  osg::StateSet* getStateSet() { return _stateset.get(); }
78  const osg::StateSet* getStateSet() const { return _stateset.get(); }
79 
80 
81  RenderBin* getParent() { return _parent; }
82  const RenderBin* getParent() const { return _parent; }
83 
84  RenderStage* getStage() { return _stage; }
85  const RenderStage* getStage() const { return _stage; }
86 
87  int getBinNum() const { return _binNum; }
88 
89  StateGraphList& getStateGraphList() { return _stateGraphList; }
90  const StateGraphList& getStateGraphList() const { return _stateGraphList; }
91 
92  RenderBinList& getRenderBinList() { return _bins; }
93  const RenderBinList& getRenderBinList() const { return _bins; }
94 
95  RenderLeafList& getRenderLeafList() { return _renderLeafList; }
96  const RenderLeafList& getRenderLeafList() const { return _renderLeafList; }
97 
98 
99  RenderBin* find_or_insert(int binNum,const std::string& binName);
100 
102  {
103  _stateGraphList.push_back(rg);
104  }
105 
106  virtual void sort();
107 
108  virtual void sortImplementation();
109 
110  void setSortMode(SortMode mode);
111  SortMode getSortMode() const { return _sortMode; }
112 
113  virtual void sortByState();
114  virtual void sortByStateThenFrontToBack();
115  virtual void sortFrontToBack();
116  virtual void sortBackToFront();
117  virtual void sortTraversalOrder();
118 
120  {
121  virtual void sortImplementation(RenderBin*) = 0;
122  };
123 
124  void setSortCallback(SortCallback* sortCallback) { _sortCallback = sortCallback; }
125  SortCallback* getSortCallback() { return _sortCallback.get(); }
126  const SortCallback* getSortCallback() const { return _sortCallback.get(); }
127 
128 
129 
130  virtual void draw(osg::RenderInfo& renderInfo,RenderLeaf*& previous);
131 
132  virtual void drawImplementation(osg::RenderInfo& renderInfo,RenderLeaf*& previous);
133 
135  {
136  virtual void drawImplementation(RenderBin* bin,osg::RenderInfo& renderInfo,RenderLeaf*& previous) = 0;
137  };
138 
139  void setDrawCallback(DrawCallback* drawCallback) { _drawCallback = drawCallback; }
140  DrawCallback* getDrawCallback() { return _drawCallback.get(); }
141  const DrawCallback* getDrawCallback() const { return _drawCallback.get(); }
142 
144  bool getStats(Statistics& primStats) const;
145 
147  virtual unsigned int computeNumberOfDynamicRenderLeaves() const;
148 
149  void copyLeavesFromStateGraphListToRenderLeafList();
150 
154  virtual void releaseGLObjects(osg::State* state= 0) const;
155 
156  protected:
157 
158  virtual ~RenderBin();
159 
160  int _binNum;
163  RenderBinList _bins;
164  StateGraphList _stateGraphList;
165  RenderLeafList _renderLeafList;
166 
167  bool _sorted;
170 
172 
174 
175 };
176 
177 }
178 
179 #endif
180 
181 
SortMode getSortMode() const
Definition: RenderBin.h:111
StateGraphList & getStateGraphList()
Definition: RenderBin.h:89
const RenderLeafList & getRenderLeafList() const
Definition: RenderBin.h:96
virtual const char * className() const
Definition: RenderBin.h:72
RenderLeafList _renderLeafList
Definition: RenderBin.h:165
int getBinNum() const
Definition: RenderBin.h:87
virtual osg::Object * cloneType() const
Definition: RenderBin.h:68
RenderBinList _bins
Definition: RenderBin.h:163
std::map< int, osg::ref_ptr< RenderBin > > RenderBinList
Definition: RenderBin.h:39
std::vector< RenderLeaf * > RenderLeafList
Definition: RenderBin.h:37
void setSortCallback(SortCallback *sortCallback)
Definition: RenderBin.h:124
DrawCallback * getDrawCallback()
Definition: RenderBin.h:140
const RenderStage * getStage() const
Definition: RenderBin.h:85
void setStateSet(osg::StateSet *stateset)
Definition: RenderBin.h:76
virtual osg::Object * clone(const osg::CopyOp &copyop) const
Definition: RenderBin.h:69
const SortCallback * getSortCallback() const
Definition: RenderBin.h:126
virtual const char * libraryName() const
Definition: RenderBin.h:71
RenderBinList & getRenderBinList()
Definition: RenderBin.h:92
StateGraphList _stateGraphList
Definition: RenderBin.h:164
RenderBin * getParent()
Definition: RenderBin.h:81
osg::ref_ptr< osg::StateSet > _stateset
Definition: RenderBin.h:173
osg::ref_ptr< SortCallback > _sortCallback
Definition: RenderBin.h:169
virtual bool isSameKindAs(const osg::Object *obj) const
Definition: RenderBin.h:70
void addStateGraph(StateGraph *rg)
Definition: RenderBin.h:101
osg::ref_ptr< DrawCallback > _drawCallback
Definition: RenderBin.h:171
const StateGraphList & getStateGraphList() const
Definition: RenderBin.h:90
RenderLeafList & getRenderLeafList()
Definition: RenderBin.h:95
const osg::StateSet * getStateSet() const
Definition: RenderBin.h:78
SortCallback * getSortCallback()
Definition: RenderBin.h:125
SortMode _sortMode
Definition: RenderBin.h:168
const DrawCallback * getDrawCallback() const
Definition: RenderBin.h:141
#define OSGUTIL_EXPORT
Definition: Export.h:40
void setDrawCallback(DrawCallback *drawCallback)
Definition: RenderBin.h:139
const RenderBinList & getRenderBinList() const
Definition: RenderBin.h:93
const RenderBin * getParent() const
Definition: RenderBin.h:82
RenderStage * getStage()
Definition: RenderBin.h:84
std::vector< StateGraph * > StateGraphList
Definition: RenderBin.h:38
osg::StateSet * getStateSet()
Definition: RenderBin.h:77
Shader generator framework.
Definition: RenderInfo.h:20
RenderStage * _stage
Definition: RenderBin.h:162
RenderBin * _parent
Definition: RenderBin.h:161