#include #include #include #include #include #include #include #include #include #include #include struct SortByAverageDistanceFunctor { bool operator() (const osgUtil::RenderGraph* lhs,const osgUtil::RenderGraph* rhs) const { return lhs->getAverageDistance()getAverageDistance(); } }; struct SortByMinimumDistanceFunctor { bool operator() (const osgUtil::RenderGraph* lhs,const osgUtil::RenderGraph* rhs) const { return lhs->getMinimumDistance()getMinimumDistance(); } }; struct MySortCallback : public osgUtil::RenderBin::SortCallback { virtual void sort(osgUtil::RenderBin* renderbin) { osgUtil::RenderBin::RenderGraphList& renderGraphList = renderbin->_renderGraphList; for(osgUtil::RenderBin::RenderGraphList::iterator itr=renderGraphList.begin(); itr!=renderGraphList.end(); ++itr) { (*itr)->sortFrontToBack(); } // std::sort(renderGraphList.begin(),renderGraphList.end(),SortByAverageDistanceFunctor()); std::sort(renderGraphList.begin(),renderGraphList.end(),SortByMinimumDistanceFunctor()); } }; void write_usage(std::ostream& out,const std::string& name) { out << std::endl; out <<"usage:"<< std::endl; out <<" "< commandLine; for(int i=1;isetSortMode(osgUtil::RenderBin::SORT_BY_STATE); // } osgUtil::RenderStage* renderstage = viewer.getViewportSceneView(0)->getRenderStage(); if (renderstage) { // renderstage->setSortLocalCallback(new MySortCallback); renderstage->setSortMode(osgUtil::RenderBin::SORT_FRONT_TO_BACK); } // open the viewer window. viewer.open(); // fire up the event loop. viewer.run(); return 0; }