diff --git a/apps/openmw/mwrender/animation.cpp b/apps/openmw/mwrender/animation.cpp index aa12d7adb..688937ce9 100644 --- a/apps/openmw/mwrender/animation.cpp +++ b/apps/openmw/mwrender/animation.cpp @@ -1481,10 +1481,12 @@ namespace MWRender void Animation::setObjectRoot(const std::string &model, bool forceskeleton, bool baseonly, bool isCreature) { osg::ref_ptr previousStateset; - osg::ref_ptr previousCullCallback; if (mObjectRoot) { - previousCullCallback = mObjectRoot->getCullCallback(); + if (mLightListCallback) + mObjectRoot->removeCullCallback(mLightListCallback); + if (mTransparencyUpdater) + mObjectRoot->removeCullCallback(mTransparencyUpdater); previousStateset = mObjectRoot->getStateSet(); mObjectRoot->getParent(0)->removeChild(mObjectRoot); } @@ -1573,9 +1575,11 @@ namespace MWRender removeTriBipVisitor.remove(); } - if (!previousCullCallback) - previousCullCallback = mLightListCallback; - mObjectRoot->setCullCallback(previousCullCallback); + if (!mLightListCallback) + mLightListCallback = new SceneUtil::LightListCallback; + mObjectRoot->addCullCallback(mLightListCallback); + if (mTransparencyUpdater) + mObjectRoot->addCullCallback(mTransparencyUpdater); } osg::Group* Animation::getObjectRoot()