Don't expect TangentSpaceGenerator to work without texcoords

pull/3236/head
AnyOldName3 2 months ago
parent e9627e9b0c
commit 6330d80b9e

@ -889,12 +889,29 @@ namespace Shader
if (mAllowedToModifyStateSets && (useShader || generateTangents)) if (mAllowedToModifyStateSets && (useShader || generateTangents))
{ {
// make sure that all UV sets are there // make sure that all UV sets are there
for (std::map<int, std::string>::const_iterator it = reqs.mTextures.begin(); it != reqs.mTextures.end(); // it's not safe to assume there's one for slot zero, so try and use one from another slot if possible
++it) // if there are none at all, bail.
// the TangentSpaceGenerator would bail, but getTangentArray would give an empty array, which is enough to
// bypass null checks, but feeds the driver a bad pointer
if (sourceGeometry.getTexCoordArray(0) == nullptr)
{
for (const auto& array : sourceGeometry.getTexCoordArrayList())
{
if (array)
{
sourceGeometry.setTexCoordArray(0, array);
break;
}
}
if (sourceGeometry.getTexCoordArray(0) == nullptr)
return changed;
}
for (const auto& [unit, name] : reqs.mTextures)
{ {
if (sourceGeometry.getTexCoordArray(it->first) == nullptr) if (sourceGeometry.getTexCoordArray(unit) == nullptr)
{ {
sourceGeometry.setTexCoordArray(it->first, sourceGeometry.getTexCoordArray(0)); sourceGeometry.setTexCoordArray(unit, sourceGeometry.getTexCoordArray(0));
changed = true; changed = true;
} }
} }

Loading…
Cancel
Save