[osg-users] Updating scene properties instead of recreation it each frame.

Igor Spiridonov igwasm at rambler.ru
Sun Jul 1 22:34:34 PDT 2018

Hi. I'm wandering if it's ok what i'm doing and how to do it properly.

I have data of primitives which comes from source periodically. These primitives are points, lines, polygons. They have different sizes, colors, vertices, etc. My first approach was to create a new subscene each time i receive new data and replace a current node to a new one. But to create a new scene each frame is not very fast operation(a lot of allocation /deallocation). So instead of that I've decided to update existing scene by changing vertices, primitive types, etc. But I'v noticed that some data somewhat cached. For example. 


osg::Vec3Array& vertices = static_cast<osg::Vec3Array&>(*geometry.getVertexArray());
    for (int i = 0; i < logPolygon.points.size(); i++)
        auto& point = logPolygon.points[i];
        vertices.push_back(osg::Vec3(point.X / 100.f, point.Y / 100.f, 0.f));

   geometry.setVertexArray(&vertices); // i need to do that otherwise scene is incorrect.

My first question is why do I need to set vertex array again? "geometry.setVertexArray(&vertices);"

The second question is it ok to do such update of all properties instead of full scene recreation? What other drawbacks can be? Is there a better approach?

Read this topic online here:

More information about the osg-users mailing list