From 2d5cfbf4f50b8a65713f23498124ee952cf61923 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 16 Apr 2019 15:16:26 -0700 Subject: [PATCH] fix oven crash --- libraries/baking/src/FBXBaker.cpp | 7 ++++++- libraries/render-utils/src/Model.cpp | 8 ++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/libraries/baking/src/FBXBaker.cpp b/libraries/baking/src/FBXBaker.cpp index b7eb56c921..01897ee5e9 100644 --- a/libraries/baking/src/FBXBaker.cpp +++ b/libraries/baking/src/FBXBaker.cpp @@ -104,13 +104,15 @@ void FBXBaker::rewriteAndBakeSceneModels(const QVector& meshes, const int meshIndex = 0; for (FBXNode& rootChild : _rootNode.children) { if (rootChild.name == "Objects") { - for (auto object = rootChild.children.begin(); object != rootChild.children.end(); object++) { + auto object = rootChild.children.begin(); + while (object != rootChild.children.end()) { if (object->name == "Geometry") { if (object->properties.at(2) == "Mesh") { int meshNum = meshIndexToRuntimeOrder[meshIndex]; replaceMeshNodeWithDraco(*object, dracoMeshes[meshNum], dracoMaterialLists[meshNum]); meshIndex++; } + object++; } else if (object->name == "Model") { for (FBXNode& modelChild : object->children) { if (modelChild.name == "Properties60" || modelChild.name == "Properties70") { @@ -136,9 +138,12 @@ void FBXBaker::rewriteAndBakeSceneModels(const QVector& meshes, const meshIndex++; } } + object++; } else if (object->name == "Texture" || object->name == "Video") { // this is an embedded texture, we need to remove it from the FBX object = rootChild.children.erase(object); + } else { + object++; } if (hasErrors()) { diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 2a35b0d161..e2d78a8d94 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -1572,9 +1572,13 @@ void Model::applyMaterialMapping() { auto& materialMapping = getMaterialMapping(); for (auto& mapping : materialMapping) { - std::set shapeIDs = getMeshIDsFromMaterialID(QString(mapping.first.c_str())); auto networkMaterialResource = mapping.second; - if (!networkMaterialResource || shapeIDs.size() == 0) { + if (!networkMaterialResource) { + continue; + } + + std::set shapeIDs = getMeshIDsFromMaterialID(QString(mapping.first.c_str())); + if (shapeIDs.size() == 0) { continue; }