Hi,

When we use StatsHandler in multiple views, then we are unable to control 1st 
view. Attached fix is based on OSG 3.2.1.

Reproduction Scenario:
1. Use "osgcompositeviewer.cpp" (modified osg example) provided with the 
following command line arguments "cow.osg -2".
2. After starting the application, use mouse inputs to control the scene in 
both the view (this should work as expected).
3. Now enable Stats via 's' key in 1st view then use mouse inputs ONLY in 1st 
view (this will work).
4. Now just hover the mouse pointer onto 2nd view (so that the 2nd view comes 
into focus) and then try to control 1st view using mouse inputs. ONLY 2nd view 
will respond. There is no healing other than restarting the application.

Reason for the Bug:
1. StatsHandler creates HUDCamera 
        1a. Using GraphicsContext of 1st view in StatsHandler::setUpHUDCamera() 
i.e. windows.front() context
        1b. With AllowEventFocus(true)
2. This causes 1st view's context to have 2 Cameras attached to it (Main + 
Stats HUD)
3. In CompositeViewer::generatePointerData(), whenever an event is handled for 
1st view it will always add PointerData of 1st view's Stats HUD camera instead 
of Main Camera due to "std::sort(activeCameras.begin(), activeCameras.end(), 
osg::CameraRenderOrderSortOp());"
4. Since HUD camera doesn't have a osgViewer::View*, the following code in 
CompositeViewer::eventTraversal() results in events being pushed to 
_viewWithFocus
        if (!view)
        {
                if (_viewWithFocus.valid())
                {
                        // OSG_NOTICE<<"Falling back to using 
_viewWithFocus"<<std::endl;
                        view = _viewWithFocus.get();
                }
                else if (!_views.empty())
                {
                        // OSG_NOTICE<<"Falling back to using first view as one 
with focus"<<std::endl;
                        view = _views[0].get();
                }
        }
5. As explained in reproduction scenario, once 2nd view comes to focus, then 
_viewWithFocus will be 2nd view and 1st view cannot be controlled there after

Fix:
To fix this issue StatsHandler's HUDCamera can be created with 
"_camera->setAllowEventFocus(false);"

Fix has been tested on Windows using "osgcompositeviewer.cpp" example provided 
with the following command line arguments "cow.osg -2"

Thank you!

Cheers,
Arjun

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=62665#62665




Attachments: 
http://forum.openscenegraph.org//files/multiview_statshandler_bug_fix_548.zip


_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org

Reply via email to