Fix for "GlobalMap trying to erase an inactive camera" spam in main menu

This commit is contained in:
scrawl 2015-06-04 16:32:21 +02:00
parent e046119487
commit ce0d93caed
2 changed files with 28 additions and 4 deletions

View file

@ -63,17 +63,31 @@ namespace
{
public:
CameraUpdateCallback(osg::Camera* cam, MWRender::GlobalMap* parent)
: mCamera(cam), mParent(parent)
: mRendered(false)
, mCamera(cam)
, mParent(parent)
{
}
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
{
mParent->markForRemoval(mCamera);
if (mRendered)
{
mCamera->setNodeMask(0);
return;
}
traverse(node, nv);
if (!mRendered)
{
mRendered = true;
mParent->markForRemoval(mCamera);
}
}
private:
bool mRendered;
osg::ref_ptr<osg::Camera> mCamera;
MWRender::GlobalMap* mParent;
};

View file

@ -30,13 +30,22 @@ namespace
{
public:
CameraUpdateCallback(osg::Camera* cam, MWRender::LocalMap* parent)
: mCamera(cam), mParent(parent)
: mRendered(false)
, mCamera(cam)
, mParent(parent)
{
}
virtual void operator()(osg::Node*, osg::NodeVisitor*)
{
mParent->markForRemoval(mCamera);
if (mRendered)
mCamera->setNodeMask(0);
if (!mRendered)
{
mRendered = true;
mParent->markForRemoval(mCamera);
}
// Note, we intentionally do not traverse children here. The map camera's scene data is the same as the master camera's,
// so it has been updated already.
@ -44,6 +53,7 @@ namespace
}
private:
bool mRendered;
osg::ref_ptr<osg::Camera> mCamera;
MWRender::LocalMap* mParent;
};