openscenegraph
RenderBin
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
23namespace osgUtil {
24
25class RenderStage;
26class 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
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);
55
58
59
60
62
64
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 setStateGraph(StateGraph* sg) { _rootStateGraph = sg; }
77 StateGraph* getStateGraph() { return _rootStateGraph.get(); }
78
79 void setStateSet(osg::StateSet* stateset) { _stateset = stateset; }
80 osg::StateSet* getStateSet() { return _stateset.get(); }
81 const osg::StateSet* getStateSet() const { return _stateset.get(); }
82
83
84 RenderBin* getParent() { return _parent; }
85 const RenderBin* getParent() const { return _parent; }
86
87 RenderStage* getStage() { return _stage; }
88 const RenderStage* getStage() const { return _stage; }
89
90 int getBinNum() const { return _binNum; }
91
92 StateGraphList& getStateGraphList() { return _stateGraphList; }
93 const StateGraphList& getStateGraphList() const { return _stateGraphList; }
94
95 RenderBinList& getRenderBinList() { return _bins; }
96 const RenderBinList& getRenderBinList() const { return _bins; }
97
98 RenderLeafList& getRenderLeafList() { return _renderLeafList; }
99 const RenderLeafList& getRenderLeafList() const { return _renderLeafList; }
100
101
102 RenderBin* find_or_insert(int binNum,const std::string& binName);
103
105 {
106 _stateGraphList.push_back(rg);
107 }
108
109 virtual void sort();
110
111 virtual void sortImplementation();
112
114 SortMode getSortMode() const { return _sortMode; }
115
116 virtual void sortByState();
118 virtual void sortFrontToBack();
119 virtual void sortBackToFront();
120 virtual void sortTraversalOrder();
121
123 {
124 virtual void sortImplementation(RenderBin*) = 0;
125 };
126
127 void setSortCallback(SortCallback* sortCallback) { _sortCallback = sortCallback; }
128 SortCallback* getSortCallback() { return _sortCallback.get(); }
129 const SortCallback* getSortCallback() const { return _sortCallback.get(); }
130
131
132
133 virtual void draw(osg::RenderInfo& renderInfo,RenderLeaf*& previous);
134
135 virtual void drawImplementation(osg::RenderInfo& renderInfo,RenderLeaf*& previous);
136
138 {
139 virtual void drawImplementation(RenderBin* bin,osg::RenderInfo& renderInfo,RenderLeaf*& previous) = 0;
140 };
141
142 void setDrawCallback(DrawCallback* drawCallback) { _drawCallback = drawCallback; }
143 DrawCallback* getDrawCallback() { return _drawCallback.get(); }
144 const DrawCallback* getDrawCallback() const { return _drawCallback.get(); }
145
147 bool getStats(Statistics& primStats) const;
148
150 virtual unsigned int computeNumberOfDynamicRenderLeaves() const;
151
153
157 virtual void releaseGLObjects(osg::State* state= 0) const;
158
159 protected:
160
161 virtual ~RenderBin();
162
164
171
175
177
179
180};
181
182}
183
184#endif
185
186
Definition RenderBin:34
RenderBin * getParent()
Definition RenderBin:84
osg::StateSet * getStateSet()
Definition RenderBin:80
void setStateSet(osg::StateSet *stateset)
Definition RenderBin:79
const RenderBin * getParent() const
Definition RenderBin:85
virtual void sortBackToFront()
virtual void sortImplementation()
int _binNum
Definition RenderBin:165
int getBinNum() const
Definition RenderBin:90
virtual const char * libraryName() const
Definition RenderBin:71
const RenderLeafList & getRenderLeafList() const
Definition RenderBin:99
RenderStage * getStage()
Definition RenderBin:87
std::vector< RenderLeaf * > RenderLeafList
Definition RenderBin:37
StateGraph * getStateGraph()
Definition RenderBin:77
const DrawCallback * getDrawCallback() const
Definition RenderBin:144
virtual osg::Object * cloneType() const
Definition RenderBin:68
RenderLeafList & getRenderLeafList()
Definition RenderBin:98
virtual void sortFrontToBack()
osg::ref_ptr< DrawCallback > _drawCallback
Definition RenderBin:176
RenderBin * _parent
Definition RenderBin:166
std::map< int, osg::ref_ptr< RenderBin > > RenderBinList
Definition RenderBin:39
bool getStats(Statistics &primStats) const
osg::ref_ptr< SortCallback > _sortCallback
Definition RenderBin:174
virtual void sortTraversalOrder()
SortMode
Definition RenderBin:42
@ SORT_BY_STATE_THEN_FRONT_TO_BACK
Definition RenderBin:44
@ SORT_BACK_TO_FRONT
Definition RenderBin:46
@ SORT_BY_STATE
Definition RenderBin:43
@ SORT_FRONT_TO_BACK
Definition RenderBin:45
virtual void reset()
RenderLeafList _renderLeafList
Definition RenderBin:170
std::vector< StateGraph * > StateGraphList
Definition RenderBin:38
StateGraphList _stateGraphList
Definition RenderBin:169
SortMode getSortMode() const
Definition RenderBin:114
virtual void drawImplementation(osg::RenderInfo &renderInfo, RenderLeaf *&previous)
RenderBin(SortMode mode)
void setSortCallback(SortCallback *sortCallback)
Definition RenderBin:127
static void addRenderBinPrototype(const std::string &binName, RenderBin *proto)
virtual void sortByStateThenFrontToBack()
void setStateGraph(StateGraph *sg)
Definition RenderBin:76
RenderBinList & getRenderBinList()
Definition RenderBin:95
void copyLeavesFromStateGraphListToRenderLeafList()
static void removeRenderBinPrototype(RenderBin *proto)
DrawCallback * getDrawCallback()
Definition RenderBin:143
RenderBin(const RenderBin &rhs, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
static RenderBin * createRenderBin(const std::string &binName)
virtual bool isSameKindAs(const osg::Object *obj) const
Definition RenderBin:70
void setDrawCallback(DrawCallback *drawCallback)
Definition RenderBin:142
static SortMode getDefaultRenderBinSortMode()
virtual const char * className() const
Definition RenderBin:72
virtual void sort()
const StateGraphList & getStateGraphList() const
Definition RenderBin:93
const RenderBinList & getRenderBinList() const
Definition RenderBin:96
static RenderBin * getRenderBinPrototype(const std::string &binName)
SortMode _sortMode
Definition RenderBin:173
const osg::StateSet * getStateSet() const
Definition RenderBin:81
SortCallback * getSortCallback()
Definition RenderBin:128
const RenderStage * getStage() const
Definition RenderBin:88
virtual void sortByState()
static void setDefaultRenderBinSortMode(SortMode mode)
osg::ref_ptr< osg::StateSet > _stateset
Definition RenderBin:178
osg::ref_ptr< StateGraph > _rootStateGraph
Definition RenderBin:163
RenderStage * _stage
Definition RenderBin:167
RenderBinList _bins
Definition RenderBin:168
virtual ~RenderBin()
StateGraphList & getStateGraphList()
Definition RenderBin:92
virtual unsigned int computeNumberOfDynamicRenderLeaves() const
void setSortMode(SortMode mode)
RenderBin * find_or_insert(int binNum, const std::string &binName)
bool _sorted
Definition RenderBin:172
const SortCallback * getSortCallback() const
Definition RenderBin:129
virtual osg::Object * clone(const osg::CopyOp &copyop) const
Definition RenderBin:69
void addStateGraph(StateGraph *rg)
Definition RenderBin:104
virtual void releaseGLObjects(osg::State *state=0) const
virtual void draw(osg::RenderInfo &renderInfo, RenderLeaf *&previous)
Definition RenderLeaf:34
Definition RenderStage:38
Definition StateGraph:42
Definition Statistics:48
Definition CopyOp:41
@ SHALLOW_COPY
Definition CopyOp:47
Definition Object:61
Definition Referenced:44
Definition RenderInfo:28
Definition StateSet:46
Definition State:80
Definition ref_ptr:32
Shader generator framework.
Definition NodeVisitor:25
#define OSGUTIL_EXPORT
Definition osgUtil/Export:40
Definition RenderBin:138
virtual void drawImplementation(RenderBin *bin, osg::RenderInfo &renderInfo, RenderLeaf *&previous)=0
Definition RenderBin:123
virtual void sortImplementation(RenderBin *)=0