diff options
author | Kaj Grönholm <kaj.gronholm@qt.io> | 2020-09-28 14:41:24 +0300 |
---|---|---|
committer | Kaj Grönholm <kaj.gronholm@qt.io> | 2020-10-01 12:38:30 +0300 |
commit | ec0dbb0ef010ea2d51838a51131b5028eb3237a8 (patch) | |
tree | 944e791d5a13fb605ac265f424ddf04c96602294 | |
parent | 1fc6a3a5aaf1f7d6b258d4fc7fee8a30562ba59f (diff) |
Try to resolve images only once
Task-number: QT3DS-4176
Change-Id: Ib1bcdd201a973122a36550971d9ce16148ef8d28
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: Antti Määttä <antti.maatta@qt.io>
Reviewed-by: Janne Koskinen <janne.p.koskinen@qt.io>
-rw-r--r-- | src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp | 30 | ||||
-rw-r--r-- | src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.h | 2 |
2 files changed, 24 insertions, 8 deletions
diff --git a/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp b/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp index 6a0fdff..7adba7b 100644 --- a/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp +++ b/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp @@ -178,7 +178,7 @@ static bool existingImageFileForPath(const QString &localFile, bool relative, bo // Return resolved image path for unresolved source path. // Handle preferKtx, search paths, empty suffixes, schemas etc. -QString IBufferManager::resolveImagePath(const QString &sourcePath, bool preferKtx) +QString IBufferManager::resolveImagePathInternal(const QString &sourcePath, bool preferKtx) { QString path = sourcePath; QUrl urlPath(path); @@ -197,10 +197,9 @@ QString IBufferManager::resolveImagePath(const QString &sourcePath, bool preferK // Find an image file corresponding to only filename without suffix if (!hasSuffix) { QString outPath; - if (!existingImageFileForPath(path, relative, preferKtx, outPath)) { - qCWarning(WARNING, "Failed to resolve path %s", qPrintable(sourcePath)); + if (!existingImageFileForPath(path, relative, preferKtx, outPath)) return {}; - } + return outPath; } @@ -216,16 +215,31 @@ QString IBufferManager::resolveImagePath(const QString &sourcePath, bool preferK } if (checkFileExists(ktxSource, relative, result)) return result; - if (originalIsKtx) { - qCWarning(WARNING, "Failed to resolve path %s", qPrintable(sourcePath)); + if (originalIsKtx) return {}; - } } if (checkFileExists(path, relative, result)) return result; - qCWarning(WARNING, "Failed to resolve path %s", qPrintable(sourcePath)); + return {}; +} + +static QStringList s_failedPaths = {}; + +QString IBufferManager::resolveImagePath(const QString &sourcePath, bool preferKtx) +{ + if (sourcePath.isEmpty()) + return {}; + + if (!s_failedPaths.contains(sourcePath)) { + QString path = resolveImagePathInternal(sourcePath, preferKtx); + if (!path.isEmpty()) + return path; + + qCWarning(WARNING, "Failed to resolve path %s", qPrintable(sourcePath)); + s_failedPaths.append(sourcePath); + } return {}; } diff --git a/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.h b/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.h index 159e02b..922e502 100644 --- a/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.h +++ b/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.h @@ -129,6 +129,8 @@ namespace render { static IBufferManager &Create(NVRenderContext &inRenderContext, IStringTable &inStrTable, IInputStreamFactory &inInputStreamFactory, IPerfTimer &inTimer); + private: + static QString resolveImagePathInternal(const QString &sourcePath, bool preferKtx); }; } } |