From 2a62bac4f92960b7b5e57622940cc041228d8160 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 14 Sep 2017 16:00:20 -0700 Subject: [PATCH] refuse to re-bake an already baked FBX --- libraries/baking/src/FBXBaker.cpp | 7 ++++++- libraries/fbx/src/FBX.h | 1 + libraries/fbx/src/FBXReader_Mesh.cpp | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/libraries/baking/src/FBXBaker.cpp b/libraries/baking/src/FBXBaker.cpp index 791d89e503..2a9deb44f1 100644 --- a/libraries/baking/src/FBXBaker.cpp +++ b/libraries/baking/src/FBXBaker.cpp @@ -301,6 +301,11 @@ void FBXBaker::rewriteAndBakeSceneModels() { auto extractedMesh = FBXReader::extractMesh(objectChild, meshIndex); auto& mesh = extractedMesh.mesh; + if (mesh.wasCompressed) { + handleError("Cannot re-bake a file that contains compressed mesh"); + return; + } + Q_ASSERT(mesh.normals.size() == 0 || mesh.normals.size() == mesh.vertices.size()); Q_ASSERT(mesh.colors.size() == 0 || mesh.colors.size() == mesh.vertices.size()); Q_ASSERT(mesh.texCoords.size() == 0 || mesh.texCoords.size() == mesh.vertices.size()); @@ -529,7 +534,7 @@ void FBXBaker::rewriteAndBakeSceneTextures() { if (textureFileInfo.suffix() == BAKED_TEXTURE_EXT.mid(1)) { // re-baking an FBX that already references baked textures is a fail // so we add an error and return from here - handleError("Cannot re-bake a partially baked FBX file that references baked KTX textures"); + handleError("Cannot re-bake a file that references compressed textures"); return; } diff --git a/libraries/fbx/src/FBX.h b/libraries/fbx/src/FBX.h index 9f5fad7d66..89bc893df2 100644 --- a/libraries/fbx/src/FBX.h +++ b/libraries/fbx/src/FBX.h @@ -234,6 +234,7 @@ public: unsigned int meshIndex; // the order the meshes appeared in the object file model::MeshPointer _mesh; + bool wasCompressed { false }; }; class ExtractedMesh { diff --git a/libraries/fbx/src/FBXReader_Mesh.cpp b/libraries/fbx/src/FBXReader_Mesh.cpp index bef36770a0..93976afe90 100644 --- a/libraries/fbx/src/FBXReader_Mesh.cpp +++ b/libraries/fbx/src/FBXReader_Mesh.cpp @@ -338,6 +338,7 @@ ExtractedMesh FBXReader::extractMesh(const FBXNode& object, unsigned int& meshIn } } else if (child.name == "DracoMesh") { isDracoMesh = true; + data.extracted.mesh.wasCompressed = true; // load the draco mesh from the FBX and create a draco::Mesh draco::Decoder decoder;