summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaj Grönholm <kaj.gronholm@qt.io>2020-09-28 14:41:24 +0300
committerKaj Grönholm <kaj.gronholm@qt.io>2020-10-01 12:38:30 +0300
commitec0dbb0ef010ea2d51838a51131b5028eb3237a8 (patch)
tree944e791d5a13fb605ac265f424ddf04c96602294
parent1fc6a3a5aaf1f7d6b258d4fc7fee8a30562ba59f (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.cpp30
-rw-r--r--src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.h2
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);
};
}
}