mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 12:17:45 +02:00
Merge pull request #11472 from huffman/fix/baking-tmp-files
Add removal of temporary files in FBXBaker
This commit is contained in:
commit
faa06e78eb
9 changed files with 57 additions and 8 deletions
|
@ -1162,7 +1162,8 @@ void AssetServer::handleFailedBake(QString originalAssetHash, QString assetPath,
|
||||||
_pendingBakes.remove(originalAssetHash);
|
_pendingBakes.remove(originalAssetHash);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetServer::handleCompletedBake(QString originalAssetHash, QString originalAssetPath, QVector<QString> bakedFilePaths) {
|
void AssetServer::handleCompletedBake(QString originalAssetHash, QString originalAssetPath,
|
||||||
|
QString bakedTempOutputDir, QVector<QString> bakedFilePaths) {
|
||||||
bool errorCompletingBake { false };
|
bool errorCompletingBake { false };
|
||||||
QString errorReason;
|
QString errorReason;
|
||||||
|
|
||||||
|
@ -1234,6 +1235,16 @@ void AssetServer::handleCompletedBake(QString originalAssetHash, QString origina
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (auto& filePath : bakedFilePaths) {
|
||||||
|
QFile file(filePath);
|
||||||
|
if (!file.remove()) {
|
||||||
|
qWarning() << "Failed to remove temporary file:" << filePath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!QDir(bakedTempOutputDir).rmdir(".")) {
|
||||||
|
qWarning() << "Failed to remove temporary directory:" << bakedTempOutputDir;
|
||||||
|
}
|
||||||
|
|
||||||
if (!errorCompletingBake) {
|
if (!errorCompletingBake) {
|
||||||
// create the meta file to store which version of the baking process we just completed
|
// create the meta file to store which version of the baking process we just completed
|
||||||
writeMetaFile(originalAssetHash);
|
writeMetaFile(originalAssetHash);
|
||||||
|
|
|
@ -100,7 +100,8 @@ private:
|
||||||
void bakeAsset(const AssetHash& assetHash, const AssetPath& assetPath, const QString& filePath);
|
void bakeAsset(const AssetHash& assetHash, const AssetPath& assetPath, const QString& filePath);
|
||||||
|
|
||||||
/// Move baked content for asset to baked directory and update baked status
|
/// Move baked content for asset to baked directory and update baked status
|
||||||
void handleCompletedBake(QString originalAssetHash, QString assetPath, QVector<QString> bakedFilePaths);
|
void handleCompletedBake(QString originalAssetHash, QString assetPath, QString bakedTempOutputDir,
|
||||||
|
QVector<QString> bakedFilePaths);
|
||||||
void handleFailedBake(QString originalAssetHash, QString assetPath, QString errors);
|
void handleFailedBake(QString originalAssetHash, QString assetPath, QString errors);
|
||||||
void handleAbortedBake(QString originalAssetHash, QString assetPath);
|
void handleAbortedBake(QString originalAssetHash, QString assetPath);
|
||||||
|
|
||||||
|
|
|
@ -24,20 +24,39 @@ BakeAssetTask::BakeAssetTask(const AssetHash& assetHash, const AssetPath& assetP
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cleanupTempFiles(QString tempOutputDir, std::vector<QString> files) {
|
||||||
|
for (const auto& filename : files) {
|
||||||
|
QFile f { filename };
|
||||||
|
if (!f.remove()) {
|
||||||
|
qDebug() << "Failed to remove:" << filename;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!tempOutputDir.isEmpty()) {
|
||||||
|
QDir dir { tempOutputDir };
|
||||||
|
if (!dir.rmdir(".")) {
|
||||||
|
qDebug() << "Failed to remove temporary directory:" << tempOutputDir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void BakeAssetTask::run() {
|
void BakeAssetTask::run() {
|
||||||
_isBaking.store(true);
|
_isBaking.store(true);
|
||||||
|
|
||||||
qRegisterMetaType<QVector<QString> >("QVector<QString>");
|
qRegisterMetaType<QVector<QString> >("QVector<QString>");
|
||||||
TextureBakerThreadGetter fn = []() -> QThread* { return QThread::currentThread(); };
|
TextureBakerThreadGetter fn = []() -> QThread* { return QThread::currentThread(); };
|
||||||
|
|
||||||
|
QString tempOutputDir;
|
||||||
|
|
||||||
if (_assetPath.endsWith(".fbx")) {
|
if (_assetPath.endsWith(".fbx")) {
|
||||||
|
tempOutputDir = PathUtils::generateTemporaryDir();
|
||||||
_baker = std::unique_ptr<FBXBaker> {
|
_baker = std::unique_ptr<FBXBaker> {
|
||||||
new FBXBaker(QUrl("file:///" + _filePath), fn, PathUtils::generateTemporaryDir())
|
new FBXBaker(QUrl("file:///" + _filePath), fn, tempOutputDir)
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
|
tempOutputDir = PathUtils::generateTemporaryDir();
|
||||||
_baker = std::unique_ptr<TextureBaker> {
|
_baker = std::unique_ptr<TextureBaker> {
|
||||||
new TextureBaker(QUrl("file:///" + _filePath), image::TextureUsage::CUBE_TEXTURE,
|
new TextureBaker(QUrl("file:///" + _filePath), image::TextureUsage::CUBE_TEXTURE,
|
||||||
PathUtils::generateTemporaryDir())
|
tempOutputDir)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,6 +71,8 @@ void BakeAssetTask::run() {
|
||||||
|
|
||||||
_wasAborted.store(true);
|
_wasAborted.store(true);
|
||||||
|
|
||||||
|
cleanupTempFiles(tempOutputDir, _baker->getOutputFiles());
|
||||||
|
|
||||||
emit bakeAborted(_assetHash, _assetPath);
|
emit bakeAborted(_assetHash, _assetPath);
|
||||||
} else if (_baker->hasErrors()) {
|
} else if (_baker->hasErrors()) {
|
||||||
qDebug() << "Failed to bake: " << _assetHash << _assetPath << _baker->getErrors();
|
qDebug() << "Failed to bake: " << _assetHash << _assetPath << _baker->getErrors();
|
||||||
|
@ -60,6 +81,8 @@ void BakeAssetTask::run() {
|
||||||
|
|
||||||
_didFinish.store(true);
|
_didFinish.store(true);
|
||||||
|
|
||||||
|
cleanupTempFiles(tempOutputDir, _baker->getOutputFiles());
|
||||||
|
|
||||||
emit bakeFailed(_assetHash, _assetPath, errors);
|
emit bakeFailed(_assetHash, _assetPath, errors);
|
||||||
} else {
|
} else {
|
||||||
auto vectorOutputFiles = QVector<QString>::fromStdVector(_baker->getOutputFiles());
|
auto vectorOutputFiles = QVector<QString>::fromStdVector(_baker->getOutputFiles());
|
||||||
|
@ -68,7 +91,7 @@ void BakeAssetTask::run() {
|
||||||
|
|
||||||
_didFinish.store(true);
|
_didFinish.store(true);
|
||||||
|
|
||||||
emit bakeComplete(_assetHash, _assetPath, vectorOutputFiles);
|
emit bakeComplete(_assetHash, _assetPath, tempOutputDir, vectorOutputFiles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ public:
|
||||||
bool didFinish() const { return _didFinish.load(); }
|
bool didFinish() const { return _didFinish.load(); }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void bakeComplete(QString assetHash, QString assetPath, QVector<QString> outputFiles);
|
void bakeComplete(QString assetHash, QString assetPath, QString tempOutputDir, QVector<QString> outputFiles);
|
||||||
void bakeFailed(QString assetHash, QString assetPath, QString errors);
|
void bakeFailed(QString assetHash, QString assetPath, QString errors);
|
||||||
void bakeAborted(QString assetHash, QString assetPath);
|
void bakeAborted(QString assetHash, QString assetPath);
|
||||||
|
|
||||||
|
|
|
@ -171,7 +171,7 @@ ScrollingWindow {
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleGetMappingsError(errorString) {
|
function handleGetMappingsError(errorString) {
|
||||||
errorMessageBox("There was a problem retreiving the list of assets from your Asset Server.\n" + errorString);
|
errorMessageBox("There was a problem retrieving the list of assets from your Asset Server.\n" + errorString);
|
||||||
}
|
}
|
||||||
|
|
||||||
function addToWorld() {
|
function addToWorld() {
|
||||||
|
|
|
@ -172,7 +172,7 @@ Rectangle {
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleGetMappingsError(errorString) {
|
function handleGetMappingsError(errorString) {
|
||||||
errorMessageBox("There was a problem retreiving the list of assets from your Asset Server.\n" + errorString);
|
errorMessageBox("There was a problem retrieving the list of assets from your Asset Server.\n" + errorString);
|
||||||
}
|
}
|
||||||
|
|
||||||
function addToWorld() {
|
function addToWorld() {
|
||||||
|
|
|
@ -18,6 +18,8 @@ class Baker : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
virtual ~Baker() = default;
|
||||||
|
|
||||||
bool shouldStop();
|
bool shouldStop();
|
||||||
|
|
||||||
bool hasErrors() const { return !_errorList.isEmpty(); }
|
bool hasErrors() const { return !_errorList.isEmpty(); }
|
||||||
|
|
|
@ -56,6 +56,17 @@ FBXBaker::FBXBaker(const QUrl& fbxURL, TextureBakerThreadGetter textureThreadGet
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FBXBaker::~FBXBaker() {
|
||||||
|
if (_tempDir.exists()) {
|
||||||
|
if (!_tempDir.remove(_originalFBXFilePath)) {
|
||||||
|
qCWarning(model_baking) << "Failed to remove temporary copy of fbx file:" << _originalFBXFilePath;
|
||||||
|
}
|
||||||
|
if (!_tempDir.rmdir(".")) {
|
||||||
|
qCWarning(model_baking) << "Failed to remove temporary directory:" << _tempDir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void FBXBaker::abort() {
|
void FBXBaker::abort() {
|
||||||
Baker::abort();
|
Baker::abort();
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ class FBXBaker : public Baker {
|
||||||
public:
|
public:
|
||||||
FBXBaker(const QUrl& fbxURL, TextureBakerThreadGetter textureThreadGetter,
|
FBXBaker(const QUrl& fbxURL, TextureBakerThreadGetter textureThreadGetter,
|
||||||
const QString& bakedOutputDir, const QString& originalOutputDir = "");
|
const QString& bakedOutputDir, const QString& originalOutputDir = "");
|
||||||
|
~FBXBaker() override;
|
||||||
|
|
||||||
QUrl getFBXUrl() const { return _fbxURL; }
|
QUrl getFBXUrl() const { return _fbxURL; }
|
||||||
QString getBakedFBXFilePath() const { return _bakedFBXFilePath; }
|
QString getBakedFBXFilePath() const { return _bakedFBXFilePath; }
|
||||||
|
|
Loading…
Reference in a new issue