状态树中每一个节点包含一个状态集StateSet,如果一个场景树节点下有多个子节点有相同的状态集,那么这几个子节点将共用一个状态树节点。
1、osgUtil::SceneView生成状态树根节点
osgUtil/SceneView.cpp
void SceneView::setDefaults(unsigned int options)
{
_stateGraph = new StateGraph;
_cullVisitor->setStateGraph(_stateGraph.get());
}
2、osgUtil::SceneView负责生成第二、第三、第四级树节点
osgUtil/SceneView.cpp
bool SceneView::cullStage(const osg::Matrixd& projection,const osg::Matrixd& modelview,osgUtil::CullVisitor* cullVisitor, osgUtil::StateGraph* rendergraph, osgUtil::RenderStage* renderStage, osg::Viewport *viewport)
{
if (_globalStateSet.valid()) cullVisitor->pushStateSet(_globalStateSet.get());
if (_secondaryStateSet.valid()) cullVisitor->pushStateSet(_secondaryStateSet.get());
if (_localStateSet.valid()) cullVisitor->pushStateSet(_localStateSet.get());
}