From 975f0bfbd2ce7ba22650b117b58895c623aaf624 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Wed, 7 Mar 2018 16:30:23 -0800 Subject: [PATCH] Fix OBJBaker not correctly waiting until all assets have been baked to finish --- libraries/baking/src/FBXBaker.cpp | 2 +- libraries/baking/src/ModelBaker.cpp | 1 + libraries/baking/src/OBJBaker.cpp | 14 ++++++++++++-- tools/oven/src/ui/ModelBakeWidget.cpp | 2 +- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/libraries/baking/src/FBXBaker.cpp b/libraries/baking/src/FBXBaker.cpp index e4405d91e3..0407c8508c 100644 --- a/libraries/baking/src/FBXBaker.cpp +++ b/libraries/baking/src/FBXBaker.cpp @@ -95,7 +95,7 @@ void FBXBaker::setupOutputFolder() { } // attempt to make the output folder if (!QDir().mkpath(_originalOutputDir)) { - handleError("Failed to create FBX output folder " + _bakedOutputDir); + handleError("Failed to create FBX output folder " + _originalOutputDir); return; } } diff --git a/libraries/baking/src/ModelBaker.cpp b/libraries/baking/src/ModelBaker.cpp index a6f366562b..1fec049259 100644 --- a/libraries/baking/src/ModelBaker.cpp +++ b/libraries/baking/src/ModelBaker.cpp @@ -327,6 +327,7 @@ void ModelBaker::bakeTexture(const QUrl& textureURL, image::TextureUsage::Type t void ModelBaker::handleBakedTexture() { TextureBaker* bakedTexture = qobject_cast(sender()); + qDebug() << "Handling baked texture" << bakedTexture->getTextureURL(); // make sure we haven't already run into errors, and that this is a valid texture if (bakedTexture) { diff --git a/libraries/baking/src/OBJBaker.cpp b/libraries/baking/src/OBJBaker.cpp index 7159d9ed99..e806fe29db 100644 --- a/libraries/baking/src/OBJBaker.cpp +++ b/libraries/baking/src/OBJBaker.cpp @@ -150,6 +150,16 @@ void OBJBaker::bakeOBJ() { _bakedModelFilePath = _bakedOutputDir + "/" + bakedFilename; + if (!QDir().mkpath(_bakedOutputDir)) { + handleError("Failed to create baked OBJ output folder " + _bakedOutputDir); + return; + } + + if (!QDir().mkpath(_originalOutputDir)) { + handleError("Failed to create original OBJ output folder " + _originalOutputDir); + return; + } + QFile bakedFile; bakedFile.setFileName(_bakedModelFilePath); if (!bakedFile.open(QIODevice::WriteOnly)) { @@ -163,8 +173,7 @@ void OBJBaker::bakeOBJ() { _outputFiles.push_back(_bakedModelFilePath); qCDebug(model_baking) << "Exported" << _modelURL << "to" << _bakedModelFilePath; - // Export done emit finished - emit finished(); + checkIfTexturesFinished(); } void OBJBaker::createFBXNodeTree(FBXNode& rootNode, FBXGeometry& geometry) { @@ -279,6 +288,7 @@ void OBJBaker::createFBXNodeTree(FBXNode& rootNode, FBXGeometry& geometry) { auto textureFile = compressTexture(textureFileName, textureType); if (textureFile.isNull()) { // Baking failed return + handleError("Failed to compress texture: " + textureFileName); return; } relativeFilenameNode.properties = { textureFile }; diff --git a/tools/oven/src/ui/ModelBakeWidget.cpp b/tools/oven/src/ui/ModelBakeWidget.cpp index 5425c0069f..b660a145b7 100644 --- a/tools/oven/src/ui/ModelBakeWidget.cpp +++ b/tools/oven/src/ui/ModelBakeWidget.cpp @@ -191,7 +191,7 @@ void ModelBakeWidget::bakeButtonClicked() { subFolderName = modelName + "-" + QString::number(++iteration) + "/"; } - outputDirectory.mkdir(subFolderName); + outputDirectory.mkpath(subFolderName); if (!outputDirectory.exists()) { QMessageBox::warning(this, "Unable to create directory", "Unable to create output directory. Please create it manually or choose a different directory.");