1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-05 06:40:09 +00:00

Merge pull request #2263 from akortunov/actor_culling

Do not recreate shaders to update transparency
This commit is contained in:
Chris Djali 2019-03-26 14:13:50 +00:00 committed by GitHub
commit 1860d720bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 1 additions and 17 deletions

View File

@ -1798,17 +1798,13 @@ namespace MWRender
material->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(1,1,1,alpha)); material->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(1,1,1,alpha));
material->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(1,1,1,1)); material->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(1,1,1,1));
stateset->setAttributeAndModes(material, osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE); stateset->setAttributeAndModes(material, osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);
stateset->addUniform(new osg::Uniform("colorMode", 0), osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);
mObjectRoot->setStateSet(stateset); mObjectRoot->setStateSet(stateset);
mResourceSystem->getSceneManager()->recreateShaders(mObjectRoot);
} }
} }
else else
{ {
mObjectRoot->setStateSet(nullptr); mObjectRoot->setStateSet(nullptr);
mResourceSystem->getSceneManager()->recreateShaders(mObjectRoot);
} }
setRenderBin(); setRenderBin();

View File

@ -649,9 +649,6 @@ void NpcAnimation::updateParts()
if (wasArrowAttached) if (wasArrowAttached)
attachArrow(); attachArrow();
if (mAlpha != 1.f)
mResourceSystem->getSceneManager()->recreateShaders(mObjectRoot);
} }
@ -914,9 +911,6 @@ void NpcAnimation::showWeapons(bool showWeapon)
attachArrow(); attachArrow();
} }
} }
// Note: we will need to recreate shaders later if we use weapon sheathing anyway, so there is no point to update them here
if (mAlpha != 1.f && !mWeaponSheathing)
mResourceSystem->getSceneManager()->recreateShaders(mObjectRoot);
} }
else else
{ {
@ -928,10 +922,6 @@ void NpcAnimation::showWeapons(bool showWeapon)
updateHolsteredWeapon(!mShowWeapons); updateHolsteredWeapon(!mShowWeapons);
updateQuiver(); updateQuiver();
// Recreate shaders for invisible actors, otherwise sheath nodes will be visible
if (mAlpha != 1.f && mWeaponSheathing)
mResourceSystem->getSceneManager()->recreateShaders(mObjectRoot);
} }
void NpcAnimation::showCarriedLeft(bool show) void NpcAnimation::showCarriedLeft(bool show)
@ -949,8 +939,6 @@ void NpcAnimation::showCarriedLeft(bool show)
if (iter->getTypeName() == typeid(ESM::Light).name() && mObjectParts[ESM::PRT_Shield]) if (iter->getTypeName() == typeid(ESM::Light).name() && mObjectParts[ESM::PRT_Shield])
addExtraLight(mObjectParts[ESM::PRT_Shield]->getNode()->asGroup(), iter->get<ESM::Light>()->mBase); addExtraLight(mObjectParts[ESM::PRT_Shield]->getNode()->asGroup(), iter->get<ESM::Light>()->mBase);
} }
if (mAlpha != 1.f)
mResourceSystem->getSceneManager()->recreateShaders(mObjectRoot);
} }
else else
removeIndividualPart(ESM::PRT_Shield); removeIndividualPart(ESM::PRT_Shield);