Hi Rudolf,

The lazy makeCurrent() calling on each new frame is probably the cause
of problem here.  To fix this we'd probably need a hint to
osgViewer::Viewer to always call makeCurrent on a new frame.

As a general note, you should use a single CompositeViewer composed of
two views, rather than two separate viewers like you have done here -
your type of usage is exactly what CompositeViewer was written for.

Robert.

On Tue, Jun 3, 2008 at 3:20 PM, Wiedemann, Rudolf, OPS3
<[EMAIL PROTECTED]> wrote:
> Hi,
>
> when I create two instances of "osgViewer::Viewer" in one program, then
> the first viewer freezes (no trackball manipulation possible) when
> setting threading model of both viewers to "SingleThreaded". Is that
> expected behaviour and why, or is it a bug?
> When I'm setting one or both viewer(s) to e.g. "ThreadPerContext", then
> both viewers are working properly.
>
> I'm using OSG-Rev. 8402 and OpenSUSE-10.2-64.
>
> Thanks in advance!
> Rudi
>
>
> The following code reproduces the problem:
>
> #include <osg/ref_ptr>
> #include <osgDB/ReadFile>
> #include <osgViewer/Viewer>
> #include <osgGA/TrackballManipulator>
>
> int main( int argc, char * argv[] )
> {
>  // read model
>  osg::ref_ptr< osg::Node > model = osgDB::readNodeFile( "cow.osg" );
>
>  // create viewer #1
>  osg::ref_ptr< osgViewer::Viewer > viewer1 = new osgViewer::Viewer;
>  viewer1->setSceneData( model.get() );
>  viewer1->setUpViewInWindow( 10, 10, 400, 300 );
>  viewer1->setCameraManipulator( new osgGA::TrackballManipulator() );
>  viewer1->setThreadingModel( osgViewer::Viewer::SingleThreaded );
> //  viewer1->setThreadingModel( osgViewer::Viewer::ThreadPerContext );
>
>  // create viewer #2
>  osg::ref_ptr< osgViewer::Viewer > viewer2 = new osgViewer::Viewer;
>  viewer2->setSceneData( model.get() );
>  viewer2->setUpViewInWindow( 500, 10, 200, 300 );
>  viewer2->setCameraManipulator( new osgGA::TrackballManipulator() );
>  viewer2->setThreadingModel( osgViewer::Viewer::SingleThreaded );
> //  viewer2->setThreadingModel( osgViewer::Viewer::ThreadPerContext );
>
>  // render
>  while( ( viewer1->done() == false ) && ( viewer2->done() == false ) )
>  {
>    viewer1->frame();
>    viewer2->frame();
>  }
>
>  return 0;
> }
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to