Added a render order sort to the list of Cameras being tested by the *Viewer::generatePointerData(..) method to ensure that the highest Camera gets focus.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14308 16af8721-9629-0410-8352-f15c8da7e697
This commit is contained in:
@@ -774,7 +774,9 @@ void Viewer::generatePointerData(osgGA::GUIEventAdapter& event)
|
||||
event.addPointerData(new osgGA::PointerData(gw, x, 0, gw->getTraits()->width,
|
||||
y, 0, gw->getTraits()->height));
|
||||
|
||||
// new code for populating the PointerData
|
||||
typedef std::vector<osg::Camera*> CameraVector;
|
||||
CameraVector activeCameras;
|
||||
|
||||
osgViewer::View* this_view = dynamic_cast<osgViewer::View*>(this);
|
||||
osg::GraphicsContext::Cameras& cameras = gw->getCameras();
|
||||
for(osg::GraphicsContext::Cameras::iterator citr = cameras.begin();
|
||||
@@ -791,17 +793,28 @@ void Viewer::generatePointerData(osgGA::GUIEventAdapter& event)
|
||||
x >= viewport->x() && y >= viewport->y() &&
|
||||
x <= (viewport->x()+viewport->width()) && y <= (viewport->y()+viewport->height()) )
|
||||
{
|
||||
event.addPointerData(new osgGA::PointerData(camera, (x-viewport->x())/viewport->width()*2.0f-1.0f, -1.0, 1.0,
|
||||
(y-viewport->y())/viewport->height()*2.0f-1.0f, -1.0, 1.0));
|
||||
|
||||
// if camera isn't the master it must be a slave and could need reprojecting.
|
||||
if (camera!=getCamera())
|
||||
{
|
||||
generateSlavePointerData(camera, event);
|
||||
}
|
||||
activeCameras.push_back(camera);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::sort(activeCameras.begin(), activeCameras.end(), osg::CameraRenderOrderSortOp());
|
||||
|
||||
osg::Camera* camera = activeCameras.empty() ? 0 : activeCameras.back();
|
||||
|
||||
if (camera)
|
||||
{
|
||||
osg::Viewport* viewport = camera ? camera->getViewport() : 0;
|
||||
|
||||
event.addPointerData(new osgGA::PointerData(camera, (x-viewport->x())/viewport->width()*2.0f-1.0f, -1.0, 1.0,
|
||||
(y-viewport->y())/viewport->height()*2.0f-1.0f, -1.0, 1.0));
|
||||
|
||||
// if camera isn't the master it must be a slave and could need reprojecting.
|
||||
if (camera!=getCamera())
|
||||
{
|
||||
generateSlavePointerData(camera, event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Viewer::reprojectPointerData(osgGA::GUIEventAdapter& source_event, osgGA::GUIEventAdapter& dest_event)
|
||||
|
||||
Reference in New Issue
Block a user