[osg-users] problem with recycled context id's and OPTIMIZE_TEXTURE_SETTINGS

Robert Osfield robert.osfield at gmail.com
Thu Jul 17 13:50:49 PDT 2008


Hi Brett,

We've done work since 2.4.0 to address this issue, could you please
try 2.5.5 or the svn/trunk.

Cheers,
Robert.

On Thu, Jul 17, 2008 at 9:31 PM, Brett Wiesner <brettwiesner at gmail.com> wrote:
> Hi,
>
> Problem:
> Using OSG 2.4.0 I have built an app that dynamically creates composite
> viewers that have one of more views. The scene graph is kept around as a ref
> pointer during the course of multiple viewers. When I delete a composite
> viewer and create another one and then use the original root node of the
> scene graph, textures are gone (ie, everythings white).
>
> I've tracked the problem down to this. If you optimize your scene graph
> using the OPTIMIZE_TEXTURE_SETTINGS setting, then recycle the context id,
> textures are missing.
>
> I'm honestly not sure what the optimizer option OPTIMIZE_TEXTURE_SETTINGS
> does but I can reproduce the bug.
>
> I've included sample code below to reproduce the bug.
>
> Thanks,
> Brett
>
>
> // This method reads in a flt file and writes it out optimized using the
> "troublesome" flag.
>  writeOutModelAsIveOptimized()
>  {
>     std::string modelPath = testDataDir();
>     modelPath += "testTree\\Test_tree.flt";
>
>     std::string modelPathOut = testDataDir();
>     modelPathOut += "testTree\\Test_tree_optimized.ive";
>
>     // create a scene graph (and keep it around).
>     osg::ref_ptr<osg::Node> modelNode = osgDB::readNodeFile(modelPath);
>     osgUtil::Optimizer op;
>
> op.optimize(modelNode.get(),osgUtil::Optimizer::OPTIMIZE_TEXTURE_SETTINGS);
>
>     osgDB::writeNodeFile(*modelNode.get(), modelPathOut);
>  }
>
> // This method reads in a flt file and writes it out unoptimized. Please
> substitute any flt file you have.
>  writeOutModelAsIve()
>  {
>     std::string modelPath = testDataDir();
>     modelPath += "testTree\\Test_tree.flt";
>
>     std::string modelPathOut = testDataDir();
>     modelPathOut += "testTree\\Test_tree_unoptimized.ive";
>
>     // create a scene graph (and keep it around).
>     osg::ref_ptr<osg::Node> modelNode = osgDB::readNodeFile(modelPath);
> osgDB::writeNodeFile(*modelNode.get(), modelPathOut);
>  }
>
>
> // This method creates a scene graph and keeps it around after the
> destruction of a viewer.
> // Then it creates a viewer and loads the model. You try this with both the
> unoptimized ive and the
> // optimized one. It runs the viewer waits for you to look at the model and
> then hit esc to quit.
> // Then it destroys the viewer, and creates another one using the same scene
> graph.
> // You'll notice that the scene no longer has textures.
>  TEST(test_osgKeepSceneGraphAround)
>  {
>     std::string modelPath = testDataDir();
>     modelPath += "testTree\\Test_tree_optimized.ive";
>
>     // create a scene graph (and keep it around).
>     osg::ref_ptr<osg::Node> modelNode = osgDB::readNodeFile(modelPath);
>
>     // create viewer1 and set the scene graph data.
>     osgViewer::Viewer* viewer1 = new osgViewer::Viewer;
>     viewer1->setUpViewOnSingleScreen(0);
>     viewer1->setSceneData(modelNode.get());
>     viewer1->setCameraManipulator(new osgGA::TrackballManipulator());
>
>     // render
>     viewer1->realize();
>     while(!viewer1->done())
>     {
>        viewer1->frame();
>     }
>
>     // delete viewer1.
>     delete viewer1;
>     viewer1 = 0;
>
>     // create viewer2 and set the scene graph data.
>     osgViewer::Viewer* viewer2 = new osgViewer::Viewer;
>     viewer2->setUpViewOnSingleScreen(0);
>     viewer2->setSceneData(modelNode.get());
>     viewer2->setCameraManipulator(new osgGA::TrackballManipulator());
>
>     // render
>     viewer2->realize();
>     while(!viewer2->done())
>     {
>        viewer2->frame();
>     }
>
>     // delete viewer2.
>     delete viewer2;
>     viewer2 = 0;
> }
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>



More information about the osg-users mailing list