From 06b9bb0c34b6aee7be0e2d837256ad88faec11bc Mon Sep 17 00:00:00 2001 From: Philip Rideout Date: Fri, 3 Jan 2020 09:18:59 -0800 Subject: [PATCH] gltfio: honor node labels if they exist. In glTF, multiple nodes can refer to the same mesh, and each node can be assigned a unqiue string label. Previously we used NameComponentManager to annotate entities with mesh labels rather than node labels. This was wrong because Filament entities are 1:1 with nodes, not meshes. We still fall back to mesh labels when node labels are not provided. --- libs/gltfio/src/AssetLoader.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libs/gltfio/src/AssetLoader.cpp b/libs/gltfio/src/AssetLoader.cpp index 5eec9134f8..afd4909754 100644 --- a/libs/gltfio/src/AssetLoader.cpp +++ b/libs/gltfio/src/AssetLoader.cpp @@ -323,11 +323,15 @@ void FAssetLoader::createRenderable(const cgltf_node* node, Entity entity) { Primitive* outputPrim = mMeshCache[mesh].data(); const cgltf_primitive* inputPrim = &mesh->primitives[0]; - if (mNameManager && mesh->name) { + // Create a name component using the node label if it exists, otherwise use the mesh label. + const char* name = node->name ? node->name : mesh->name; + if (mNameManager && name) { mNameManager->addComponent(entity); - mNameManager->setName(mNameManager->getInstance(entity), mesh->name); + mNameManager->setName(mNameManager->getInstance(entity), name); } - const char* name = mesh->name ? mesh->name : (node->name ? node->name : "mesh"); + + // If neither a node or mesh name is provided in the glTF, use "node" for error messages. + name = name ? name : "node"; Aabb aabb;