fix: loading of gltf with multiple meshes

This commit is contained in:
Jan 2025-01-23 22:25:38 +00:00
parent 94ca0ab79e
commit 826c1d2f2d
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C

View File

@ -547,9 +547,6 @@ namespace
if (!jRoot.nodes)
return false;
if (!common.m_bones.empty())
throw GltfLoadException("Only scenes with at most one skin are supported");
const auto rootNode = GetRootNodeForSkin(jRoot, skin).value_or(skin.joints[0]);
const auto skinBoneOffset = common.m_bones.size();
common.m_bones.resize(skinBoneOffset + skin.joints.size());
@ -566,13 +563,27 @@ namespace
if (!jRoot.meshes)
return;
std::optional<unsigned> alreadyLoadedSkinIndex;
for (const auto& loadObject : m_load_objects)
{
if (loadObject.skinIndex && jRoot.skins)
{
const auto& skin = jRoot.skins.value()[*loadObject.skinIndex];
if (!ConvertSkin(jRoot, skin, common))
return;
if (alreadyLoadedSkinIndex)
{
if (*alreadyLoadedSkinIndex != *loadObject.skinIndex)
throw GltfLoadException("Only scenes with at most one skin are supported");
// Do not load already loaded skin
}
else
{
const auto& skin = jRoot.skins.value()[*loadObject.skinIndex];
if (!ConvertSkin(jRoot, skin, common))
return;
alreadyLoadedSkinIndex = *loadObject.skinIndex;
}
}
const auto& mesh = jRoot.meshes.value()[loadObject.meshIndex];