Show
Ignore:
Timestamp:
11/25/09 17:31:14 (5 years ago)
Author:
robert
Message:

For testing purposes added code path and options for testing viewer creation in series, including with enabling of VBO's. Options are:

osgcamera -r 5 --vbo cow.osg

Which repeats construction of the viewer 5 times in a row, and enables VBO, and on each repeat a new model is loaded.

osgcamera -r 2 --vbo --shared cow.osg

Which repeats construction of the viewer 2 times in a row, and enables VBO, and on each loads the model once and shares it between each instance of the viewer.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgcamera/osgcamera.cpp

    r10830 r10831  
    174174} 
    175175 
     176class EnableVBOVisitor : public osg::NodeVisitor 
     177{ 
     178public: 
     179    EnableVBOVisitor(): 
     180        osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN) {} 
     181 
     182    void apply(osg::Geode& geode) 
     183    { 
     184        for(unsigned int i=0; i<geode.getNumDrawables();++i) 
     185        { 
     186            osg::Geometry* geom = geode.getDrawable(i)->asGeometry(); 
     187            osg::notify(osg::NOTICE)<<"Enabling VBO"<<std::endl; 
     188            geom->setUseVertexBufferObjects(true); 
     189        } 
     190    } 
     191}; 
     192 
    176193int main( int argc, char **argv ) 
    177194{ 
     
    188205    if (arguments.read("--repeat",numRepeats) || arguments.read("-r",numRepeats) || arguments.read("--repeat") || arguments.read("-r")) 
    189206    { 
     207 
    190208        bool sharedModel = arguments.read("--shared"); 
     209        bool enableVBO = arguments.read("--vbo"); 
     210 
    191211        osg::ref_ptr<osg::Node> model; 
    192         if (sharedModel) model = osgDB::readNodeFiles(arguments); 
     212        if (sharedModel) 
     213        { 
     214            model = osgDB::readNodeFiles(arguments); 
     215            if (!model) return 0; 
     216 
     217            if (enableVBO) 
     218            { 
     219                EnableVBOVisitor enableVBOs; 
     220                model->accept(enableVBOs); 
     221            } 
     222        } 
    193223 
    194224        osgViewer::Viewer::ThreadingModel threadingModel = osgViewer::Viewer::AutomaticSelection; 
     
    207237 
    208238            if (sharedModel) viewer.setSceneData(model.get()); 
    209             else viewer.setSceneData(osgDB::readNodeFiles(arguments)); 
     239            else 
     240            { 
     241                osg::ref_ptr<osg::Node> node = osgDB::readNodeFiles(arguments); 
     242                if (!node) return 0; 
     243 
     244                if (enableVBO) 
     245                { 
     246                    EnableVBOVisitor enableVBOs; 
     247                    node->accept(enableVBOs); 
     248                } 
     249 
     250                viewer.setSceneData(node.get()); 
     251            } 
    210252 
    211253            viewer.run();