From 65d85138ccb1477ebadc3f17b89b8b1abddd2668 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Tue, 10 Sep 2019 16:31:30 -0700 Subject: [PATCH] TIL that std::vector is a bit field https://howardhinnant.github.io/onvectorbool.html --- libraries/baking/src/ModelBaker.cpp | 9 ++++----- .../model-baker/src/model-baker/BuildDracoMeshTask.cpp | 8 +++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/libraries/baking/src/ModelBaker.cpp b/libraries/baking/src/ModelBaker.cpp index adf6deeb56..70290fe283 100644 --- a/libraries/baking/src/ModelBaker.cpp +++ b/libraries/baking/src/ModelBaker.cpp @@ -246,11 +246,10 @@ void ModelBaker::bakeSourceCopy() { // Begin hfm baking baker.run(); - for (auto error : baker.getDracoErrors()) { - if (error) { - handleError("Failed to finalize the baking of a draco Geometry node from model " + _modelURL.toString()); - return; - } + const auto& errors = baker.getDracoErrors(); + if (std::find(errors.cbegin(), errors.cend(), true) != errors.cend()) { + handleError("Failed to finalize the baking of a draco Geometry node from model " + _modelURL.toString()); + return; } _hfmModel = baker.getHFMModel(); diff --git a/libraries/model-baker/src/model-baker/BuildDracoMeshTask.cpp b/libraries/model-baker/src/model-baker/BuildDracoMeshTask.cpp index 180664a52a..9fff570cc0 100644 --- a/libraries/model-baker/src/model-baker/BuildDracoMeshTask.cpp +++ b/libraries/model-baker/src/model-baker/BuildDracoMeshTask.cpp @@ -222,21 +222,23 @@ void BuildDracoMeshTask::run(const baker::BakeContextPointer& context, const Inp auto& materialLists = output.edit2(); dracoBytesPerMesh.reserve(meshes.size()); - dracoErrorsPerMesh.reserve(meshes.size()); + // vector is an exception to the std::vector conventions as it is a bit field + // So a bool reference to an element doesn't work + dracoErrorsPerMesh.resize(meshes.size()); materialLists.reserve(meshes.size()); for (size_t i = 0; i < meshes.size(); i++) { const auto& mesh = meshes[i]; const auto& normals = baker::safeGet(normalsPerMesh, i); const auto& tangents = baker::safeGet(tangentsPerMesh, i); dracoBytesPerMesh.emplace_back(); - dracoErrorsPerMesh.emplace_back(); auto& dracoBytes = dracoBytesPerMesh.back(); - auto& dracoError = dracoErrorsPerMesh.back(); materialLists.push_back(createMaterialList(mesh)); const auto& materialList = materialLists.back(); + bool dracoError; std::unique_ptr dracoMesh; std::tie(dracoMesh, dracoError) = createDracoMesh(mesh, normals, tangents, materialList); + dracoErrorsPerMesh[dracoErrorsPerMesh.size()-1] = dracoError; if (dracoMesh) { draco::Encoder encoder;