Hi, above node visitor is actually working. I just happened to edit a .cpp file of same name, but belonging to a different project. Hence my changes never had any effect. ;-)
Christian 2014-11-26 15:29 GMT+01:00 Christian Buchner <[email protected]>: > Sorry, the second block of flags in my posting should have said this: > > useDisplayList FALSE > useVertexBufferObjects TRUE > > > 2014-11-26 15:28 GMT+01:00 Christian Buchner <[email protected]> > : > >> Hi, >> >> I wrote the following little node visitor to switch part of a scene graph >> from using display lists to using VBOs. >> >> class VBOVisitor : public osg::NodeVisitor >> { >> public: >> VBOVisitor() >> { >> setTraversalMode(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN); >> } >> >> virtual void apply(osg::Node& node) >> { >> osg::Geode *geode = node.asGeode(); >> if (geode != NULL) >> { >> for (unsigned int i = 0; i < geode->getNumDrawables(); i++) >> { >> osg::Drawable &drawable = *geode->getDrawable(i); >> drawable.setUseDisplayList(false); >> drawable.setUseVertexBufferObjects(true); >> } >> } >> traverse(node); >> } >> }; >> >> >> >> I use it like this before attaching the object to the Viewer and >> rendering it. >> >> osg::Node *object = osgDB::readNodeFile("some_object.osg"); >> VBOVisitor vbo; >> object->accept(vbo); >> >> >> >> The OSG file in question contains a lot of Drawbles with the flags >> useDisplayList TRUE >> useVertexBufferObjects FALSE >> >> This prevents advanced rendering techniques such as hardware instancing. >> The idea was to use the VBOVisitor to get the same effect as if I had >> changed these lines to >> >> useDisplayList TRUE >> useVertexBufferObjects FALSE >> >> >> Editing the OSG file manually works, but using the VBOVisitor instead >> does not produce the desired effect (i.e. hardware instancing fails) >> >> What am I missing? >> >> Christian >> >> >
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

