From 7d08a5788f547e869c1914b7d67dd9fc01568d48 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 25 Aug 2017 16:21:00 -0700 Subject: [PATCH] Move outputFiles from FBXBaker to Baker --- assignment-client/src/assets/AssetServer.cpp | 33 +++++++++----------- libraries/baking/src/Baker.h | 6 ++++ libraries/baking/src/FBXBaker.h | 4 --- libraries/baking/src/TextureBaker.cpp | 5 ++- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/assignment-client/src/assets/AssetServer.cpp b/assignment-client/src/assets/AssetServer.cpp index 6e3195f570..ac1ef1c3ed 100644 --- a/assignment-client/src/assets/AssetServer.cpp +++ b/assignment-client/src/assets/AssetServer.cpp @@ -61,28 +61,24 @@ void BakeAssetTask::run() { qRegisterMetaType >("QVector"); TextureBakerThreadGetter fn = []() -> QThread* { return QThread::currentThread(); }; - if (_filePath.endsWith(".fbx")) { - FBXBaker baker(QUrl("file:///" + _filePath), fn, PathUtils::generateTemporaryDir()); + std::unique_ptr baker; - QEventLoop loop; - connect(&baker, &Baker::finished, &loop, &QEventLoop::quit); - QMetaObject::invokeMethod(&baker, "bake", Qt::QueuedConnection); - qDebug() << "Running the bake!"; - loop.exec(); - - qDebug() << "Finished baking: " << _assetHash << _assetPath << baker.getOutputFiles(); - emit bakeComplete(_assetHash, _assetPath, QVector::fromStdVector(baker.getOutputFiles())); + if (_assetPath.endsWith(".fbx")) { + baker = std::make_unique(QUrl("file:///" + _filePath), fn, PathUtils::generateTemporaryDir()); } else { - TextureBaker baker(QUrl("file:///" + _filePath), image::TextureUsage::CUBE_TEXTURE, PathUtils::generateTemporaryDir()); + baker = std::make_unique(QUrl("file:///" + _filePath), image::TextureUsage::CUBE_TEXTURE, PathUtils::generateTemporaryDir()); + } - QEventLoop loop; - connect(&baker, &Baker::finished, &loop, &QEventLoop::quit); - QMetaObject::invokeMethod(&baker, "bake", Qt::QueuedConnection); - qDebug() << "Running the bake!"; - loop.exec(); + QEventLoop loop; + connect(baker.get(), &Baker::finished, &loop, &QEventLoop::quit); + QMetaObject::invokeMethod(baker.get(), "bake", Qt::QueuedConnection); + loop.exec(); - qDebug() << "Finished baking: " << _assetHash << _assetPath << baker.getBakedTextureFileName(); - emit bakeComplete(_assetHash, _assetPath, { baker.getDestinationFilePath() }); + if (baker->hasErrors()) { + qDebug() << "Failed to bake: " << _assetHash << _assetPath; + } else { + qDebug() << "Finished baking: " << _assetHash << _assetPath << baker->getOutputFiles(); + emit bakeComplete(_assetHash, _assetPath, QVector::fromStdVector(baker->getOutputFiles())); } } @@ -454,7 +450,6 @@ void AssetServer::handleGetMappingOperation(ReceivedMessage& message, SharedNode replyPacket.write(QByteArray::fromHex(originalAssetHash.toUtf8())); replyPacket.writePrimitive(wasRedirected); - auto query = QUrlQuery(url.query()); bool isSkybox = query.hasQueryItem("skybox"); qDebug() << "Is skybox? " << isSkybox; diff --git a/libraries/baking/src/Baker.h b/libraries/baking/src/Baker.h index d7107428bf..fd76246497 100644 --- a/libraries/baking/src/Baker.h +++ b/libraries/baking/src/Baker.h @@ -24,6 +24,8 @@ public: bool hasWarnings() const { return !_warningList.isEmpty(); } QStringList getWarnings() const { return _warningList; } + std::vector getOutputFiles() const { return _outputFiles; } + public slots: virtual void bake() = 0; @@ -36,6 +38,10 @@ protected: void handleErrors(const QStringList& errors); + // List of baked output files. For instance, for an FBX this would + // include the .fbx and all of its texture files. + std::vector _outputFiles; + QStringList _errorList; QStringList _warningList; }; diff --git a/libraries/baking/src/FBXBaker.h b/libraries/baking/src/FBXBaker.h index 0e52f2e4c3..00e7987422 100644 --- a/libraries/baking/src/FBXBaker.h +++ b/libraries/baking/src/FBXBaker.h @@ -44,7 +44,6 @@ public: QUrl getFBXUrl() const { return _fbxURL; } QString getBakedFBXFilePath() const { return _bakedFBXFilePath; } - std::vector getOutputFiles() const { return _outputFiles; } public slots: // all calls to FBXBaker::bake for FBXBaker instances must be from the same thread @@ -88,9 +87,6 @@ private: QDir _tempDir; QString _originalFBXFilePath; - // List of baked output files, includes the FBX and textures - std::vector _outputFiles; - static FBXSDKManagerUniquePointer _sdkManager; fbxsdk::FbxScene* _scene { nullptr }; diff --git a/libraries/baking/src/TextureBaker.cpp b/libraries/baking/src/TextureBaker.cpp index 70df511d2c..44995fa026 100644 --- a/libraries/baking/src/TextureBaker.cpp +++ b/libraries/baking/src/TextureBaker.cpp @@ -120,10 +120,13 @@ void TextureBaker::processTexture() { const size_t length = memKTX->_storage->size(); // attempt to write the baked texture to the destination file path - QFile bakedTextureFile { _outputDirectory.absoluteFilePath(_bakedTextureFileName) }; + auto filePath = _outputDirectory.absoluteFilePath(_bakedTextureFileName); + QFile bakedTextureFile { filePath }; if (!bakedTextureFile.open(QIODevice::WriteOnly) || bakedTextureFile.write(data, length) == -1) { handleError("Could not write baked texture for " + _textureURL.toString()); + } else { + _outputFiles.push_back(filePath); } qCDebug(model_baking) << "Baked texture" << _textureURL;