diff --git a/apps/openmw/mwrender/globalmap.cpp b/apps/openmw/mwrender/globalmap.cpp index bcf9e74bf..9109be799 100644 --- a/apps/openmw/mwrender/globalmap.cpp +++ b/apps/openmw/mwrender/globalmap.cpp @@ -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 mCamera; MWRender::GlobalMap* mParent; }; diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index 77138a124..6ce54a4ba 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -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 mCamera; MWRender::LocalMap* mParent; };