看看全流程,
主要讲sceneview::cull(),跟过去
重点在cullstage()
状态树与渲染树的构建都是在pushStateSet和popStateSet函数中完成的。而CullVisitor::apply函数(在遍历节点时调用),则负责根据不同的节点类型,在不同的时机调用这两个函数。
在遍历场景节点树时,使用pushStateSet将某个节点的渲染位置置入,然后再将它的子节点的渲染状态置入,如此反复。。。。。。结束这个子树的遍历时,则依次使用popStateSet弹出_currentRenderBin和_currentStateGraph,知道返回初始位置为止。如此即可在遍历节点子树中构建起渲染后台的状态树和渲染树;并且,如果在筛选(cull)过程中,我们判断某个节点(及其子树)应当被剔除掉时,只要跳过pushStateSet和popStateSet的步骤,直接返回,就不会在渲染时留下节点的任何蛛丝马迹。
下一步深入展开osgUtil::CullVisitor::pushStateSet(const osg::StateSet* ss)
popStateSet,是pushStateSet的逆过程。
下一步进行CullVisitor