mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-21 16:09:42 +00:00
Merge branch 'alpha-test-override' into 'master'
Ensure original (removed) state overrides replacement state when recreating shaders Closes #6108 See merge request OpenMW/openmw!966
This commit is contained in:
commit
07a7a903a7
1 changed files with 10 additions and 5 deletions
|
@ -275,10 +275,12 @@ namespace Shader
|
|||
osg::StateSet::AttributeList removedAttributes;
|
||||
if (osg::ref_ptr<osg::StateSet> removedState = getRemovedState(*stateset))
|
||||
removedAttributes = removedState->getAttributeList();
|
||||
for (const auto& attributeMap : { attributes, removedAttributes })
|
||||
for (const auto* attributeMap : std::initializer_list<const osg::StateSet::AttributeList*>{ &attributes, &removedAttributes })
|
||||
{
|
||||
for (osg::StateSet::AttributeList::const_iterator it = attributeMap.begin(); it != attributeMap.end(); ++it)
|
||||
for (osg::StateSet::AttributeList::const_iterator it = attributeMap->begin(); it != attributeMap->end(); ++it)
|
||||
{
|
||||
if (attributeMap != &removedAttributes && removedAttributes.count(it->first))
|
||||
continue;
|
||||
if (it->first.first == osg::StateAttribute::MATERIAL)
|
||||
{
|
||||
// This should probably be moved out of ShaderRequirements and be applied directly now it's a uniform instead of a define
|
||||
|
@ -400,9 +402,12 @@ namespace Shader
|
|||
{
|
||||
writableStateSet->addUniform(new osg::Uniform("alphaRef", reqs.mAlphaRef));
|
||||
|
||||
const auto* alphaFunc = writableStateSet->getAttributePair(osg::StateAttribute::ALPHAFUNC);
|
||||
if (alphaFunc)
|
||||
removedState->setAttribute(alphaFunc->first, alphaFunc->second);
|
||||
if (!removedState->getAttributePair(osg::StateAttribute::ALPHAFUNC))
|
||||
{
|
||||
const auto* alphaFunc = writableStateSet->getAttributePair(osg::StateAttribute::ALPHAFUNC);
|
||||
if (alphaFunc)
|
||||
removedState->setAttribute(alphaFunc->first, alphaFunc->second);
|
||||
}
|
||||
// This prevents redundant glAlphaFunc calls while letting the shadows bin still see the test
|
||||
writableStateSet->setAttribute(RemovedAlphaFunc::getInstance(reqs.mAlphaFunc), osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
|
||||
|
||||
|
|
Loading…
Reference in a new issue