From e25f04c4db72e950a52fcda521952be98d914424 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 4 Jun 2007 17:11:40 +0000 Subject: [PATCH] Added control of threading model, setting default to SingleThreaded to avoid crash associated with mixing useCursor(false) and multi-threading. --- examples/osgstereoimage/osgstereoimage.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/examples/osgstereoimage/osgstereoimage.cpp b/examples/osgstereoimage/osgstereoimage.cpp index 3bd0ce4fe..f2eea49ce 100644 --- a/examples/osgstereoimage/osgstereoimage.cpp +++ b/examples/osgstereoimage/osgstereoimage.cpp @@ -399,6 +399,10 @@ int main( int argc, char **argv ) arguments.getApplicationUsage()->addCommandLineOption("-x ","Horizontal offset of left and right images."); arguments.getApplicationUsage()->addCommandLineOption("-y ","Vertical offset of left and right images."); arguments.getApplicationUsage()->addCommandLineOption("-h or --help","Display this information"); + arguments.getApplicationUsage()->addCommandLineOption("--SingleThreaded","Select SingleThreaded threading model for viewer."); + arguments.getApplicationUsage()->addCommandLineOption("--CullDrawThreadPerContext","Select CullDrawThreadPerContext threading model for viewer."); + arguments.getApplicationUsage()->addCommandLineOption("--DrawThreadPerContext","Select DrawThreadPerContext threading model for viewer."); + arguments.getApplicationUsage()->addCommandLineOption("--CullThreadPerCameraDrawThreadPerContext","Select CullThreadPerCameraDrawThreadPerContext threading model for viewer."); // construct the viewer. @@ -428,6 +432,14 @@ int main( int argc, char **argv ) return 1; } + osgViewer::Viewer::ThreadingModel threading = osgViewer::Viewer::SingleThreaded; + while (arguments.read("--SingleThreaded")) threading = osgViewer::Viewer::SingleThreaded; + while (arguments.read("--CullDrawThreadPerContext")) threading = osgViewer::Viewer::CullDrawThreadPerContext; + while (arguments.read("--DrawThreadPerContext")) threading = osgViewer::Viewer::DrawThreadPerContext; + while (arguments.read("--CullThreadPerCameraDrawThreadPerContext")) threading = osgViewer::Viewer::CullThreadPerCameraDrawThreadPerContext; + + viewer.setThreadingModel(threading); + // any option left unread are converted into errors to write out later. arguments.reportRemainingOptionsAsUnrecognized(); @@ -486,6 +498,7 @@ int main( int argc, char **argv ) // set the scene to render viewer.setSceneData(rootNode.get()); + // create the windows and run the threads. viewer.realize();