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.
This commit is contained in:
parent
90bd49100f
commit
e5b76975a9
@ -173,6 +173,23 @@ void multipleWindowMultipleCameras(osgViewer::Viewer& viewer, bool multipleScree
|
||||
}
|
||||
}
|
||||
|
||||
class EnableVBOVisitor : public osg::NodeVisitor
|
||||
{
|
||||
public:
|
||||
EnableVBOVisitor():
|
||||
osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN) {}
|
||||
|
||||
void apply(osg::Geode& geode)
|
||||
{
|
||||
for(unsigned int i=0; i<geode.getNumDrawables();++i)
|
||||
{
|
||||
osg::Geometry* geom = geode.getDrawable(i)->asGeometry();
|
||||
osg::notify(osg::NOTICE)<<"Enabling VBO"<<std::endl;
|
||||
geom->setUseVertexBufferObjects(true);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
int main( int argc, char **argv )
|
||||
{
|
||||
// use an ArgumentParser object to manage the program arguments.
|
||||
@ -187,9 +204,22 @@ int main( int argc, char **argv )
|
||||
unsigned int numRepeats = 2;
|
||||
if (arguments.read("--repeat",numRepeats) || arguments.read("-r",numRepeats) || arguments.read("--repeat") || arguments.read("-r"))
|
||||
{
|
||||
|
||||
bool sharedModel = arguments.read("--shared");
|
||||
bool enableVBO = arguments.read("--vbo");
|
||||
|
||||
osg::ref_ptr<osg::Node> model;
|
||||
if (sharedModel) model = osgDB::readNodeFiles(arguments);
|
||||
if (sharedModel)
|
||||
{
|
||||
model = osgDB::readNodeFiles(arguments);
|
||||
if (!model) return 0;
|
||||
|
||||
if (enableVBO)
|
||||
{
|
||||
EnableVBOVisitor enableVBOs;
|
||||
model->accept(enableVBOs);
|
||||
}
|
||||
}
|
||||
|
||||
osgViewer::Viewer::ThreadingModel threadingModel = osgViewer::Viewer::AutomaticSelection;
|
||||
while (arguments.read("-s")) { threadingModel = osgViewer::Viewer::SingleThreaded; }
|
||||
@ -206,7 +236,19 @@ int main( int argc, char **argv )
|
||||
viewer.setThreadingModel(threadingModel);
|
||||
|
||||
if (sharedModel) viewer.setSceneData(model.get());
|
||||
else viewer.setSceneData(osgDB::readNodeFiles(arguments));
|
||||
else
|
||||
{
|
||||
osg::ref_ptr<osg::Node> node = osgDB::readNodeFiles(arguments);
|
||||
if (!node) return 0;
|
||||
|
||||
if (enableVBO)
|
||||
{
|
||||
EnableVBOVisitor enableVBOs;
|
||||
node->accept(enableVBOs);
|
||||
}
|
||||
|
||||
viewer.setSceneData(node.get());
|
||||
}
|
||||
|
||||
viewer.run();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user