[osg-users] Performance Problems

Shawn Cook sfncook at hotmail.com
Sun Oct 21 17:38:20 PDT 2007

Thanks for the response, Robert.  I'm in the midst of a small rewrite to try something else to optimize my code and now I have another question: In my UpdateCallBack for all my many quads I want to add a new quad only when it is needed.  However, with the code below I get a break point (exception) when OSG calls its draw() method.  So my question is: what is the appropriate way to add/update vertices in a dynamic fashion.  If you could just point me to one of OSG's many fine examples that would be sufficient.  Thanks.
virtual void operator() (osg::Node* node, osg::NodeVisitor* nv)
if( isInitialized ) {
osg::Geode *geode = dynamic_cast<osg::Geode*> (node);
if (nv && geode && nv->getFrameStamp())
osg::Geometry *nodeGeom = dynamic_cast<osg::Geometry*> (geode->getDrawable(1));
osg::Geometry *tailGeom = dynamic_cast<osg::Geometry*> (geode->getDrawable(0));
if( nodeGeom && tailGeom ) {
osg::Vec3Array *nodeVecs = dynamic_cast<osg::Vec3Array*> (nodeGeom->getVertexArray());
osg::Vec3Array *tailVecs = dynamic_cast<osg::Vec3Array*> (tailGeom->getVertexArray());
if( nodeVecs && tailVecs ) {
for( std::map< unsigned int,NODE >::iterator iter_node=nodeList.begin(); iter_node!=nodeList.end(); iter_node++ ) {
unsigned int nodeIndex = iter_node->first;
NODE thisNode = iter_node->second;
if( nodeIndex>=(nodeVecs->size()*4) ) {
nodeVecs->push_back(osg::Vec3(thisNode.pos_x-NODEWIDTH/2, thisNode.pos_y-NODEHEIGHT/2, 0.0));
nodeVecs->push_back(osg::Vec3(thisNode.pos_x+NODEWIDTH/2, thisNode.pos_y-NODEHEIGHT/2, 0.0));
nodeVecs->push_back(osg::Vec3(thisNode.pos_x+NODEWIDTH/2, thisNode.pos_y+NODEHEIGHT/2, 0.0));
nodeVecs->push_back(osg::Vec3(thisNode.pos_x-NODEWIDTH/2, thisNode.pos_y+NODEHEIGHT/2, 0.0));
}//for nodes

}//if vecs
}//if geom
}//if isInitialized
// must continue subgraph traversal.
Peek-a-boo FREE Tricks & Treats for You!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20071022/0898f32b/attachment-0003.htm>

More information about the osg-users mailing list