Merge branch 'idempotent-parallax' into 'master'
Some checks failed
Build and test / Ubuntu (push) Has been cancelled
Build and test / MacOS (push) Has been cancelled
Build and test / Read .env file and expose it as output (push) Has been cancelled
Build and test / Windows (2019) (push) Has been cancelled
Build and test / Windows (2022) (push) Has been cancelled

Don't forget parallax when reapplying shader visitor

Closes #8341

See merge request OpenMW/openmw!4634
This commit is contained in:
AnyOldName3 2025-04-24 12:06:43 +00:00
commit 215ac1078e

View file

@ -287,11 +287,17 @@ namespace Shader
addedState->setName("addedState");
}
// This list is used both for detecting known texture types (including added normal maps etc.) and setting the
// shader defines. Normal maps and normal height maps both get sent to the shader as a normal map, so the latter
// must be detected separately.
const char* defaultTextures[] = { "diffuseMap", "normalMap", "emissiveMap", "darkMap", "detailMap", "envMap",
"specularMap", "decalMap", "bumpMap", "glossMap" };
bool isTextureNameRecognized(std::string_view name)
{
return std::find(std::begin(defaultTextures), std::end(defaultTextures), name) != std::end(defaultTextures);
if (std::find(std::begin(defaultTextures), std::end(defaultTextures), name) != std::end(defaultTextures))
return true;
else
return name == "normalHeightMap";
}
void ShaderVisitor::applyStateSet(osg::ref_ptr<osg::StateSet> stateset, osg::Node& node)
@ -439,8 +445,9 @@ namespace Shader
if (!writableStateSet)
writableStateSet = getWritableStateSet(node);
writableStateSet->setTextureAttributeAndModes(unit, normalMapTex, osg::StateAttribute::ON);
writableStateSet->setTextureAttributeAndModes(
unit, new SceneUtil::TextureType("normalMap"), osg::StateAttribute::ON);
writableStateSet->setTextureAttributeAndModes(unit,
new SceneUtil::TextureType(normalHeight ? "normalHeightMap" : "normalMap"),
osg::StateAttribute::ON);
mRequirements.back().mTextures[unit] = "normalMap";
mRequirements.back().mTexStageRequiringTangents = unit;
mRequirements.back().mShaderRequired = true;