diff options
-rw-r--r-- | src/gui/util/qshadergraphloader.cpp | 15 | ||||
-rw-r--r-- | src/gui/util/qshadernodesloader.cpp | 8 | ||||
-rw-r--r-- | src/gui/util/qshadernodesloader_p.h | 1 |
3 files changed, 22 insertions, 2 deletions
diff --git a/src/gui/util/qshadergraphloader.cpp b/src/gui/util/qshadergraphloader.cpp index 8d92c73a5a..99a9f7869e 100644 --- a/src/gui/util/qshadergraphloader.cpp +++ b/src/gui/util/qshadergraphloader.cpp @@ -39,6 +39,8 @@ #include "qshadergraphloader_p.h" +#include "qshadernodesloader_p.h" + #include <QtCore/qdebug.h> #include <QtCore/qiodevice.h> #include <QtCore/qjsonarray.h> @@ -129,6 +131,19 @@ void QShaderGraphLoader::load() bool hasError = false; + const auto prototypesValue = root.value(QStringLiteral("prototypes")); + if (!prototypesValue.isUndefined()) { + if (prototypesValue.isObject()) { + QShaderNodesLoader loader; + loader.load(prototypesValue.toObject()); + m_prototypes.unite(loader.nodes()); + } else { + qWarning() << "Invalid prototypes property, should be an object"; + m_status = Error; + return; + } + } + const auto nodes = nodesValue.toArray(); for (const auto &nodeValue : nodes) { if (!nodeValue.isObject()) { diff --git a/src/gui/util/qshadernodesloader.cpp b/src/gui/util/qshadernodesloader.cpp index db34b6d44d..692653ee44 100644 --- a/src/gui/util/qshadernodesloader.cpp +++ b/src/gui/util/qshadernodesloader.cpp @@ -99,11 +99,15 @@ void QShaderNodesLoader::load() } const auto root = document.object(); + load(root); +} +void QShaderNodesLoader::load(const QJsonObject &prototypesObject) +{ bool hasError = false; - for (const auto &property : root.keys()) { - const auto nodeValue = root.value(property); + for (const auto &property : prototypesObject.keys()) { + const auto nodeValue = prototypesObject.value(property); if (!nodeValue.isObject()) { qWarning() << "Invalid node found"; hasError = true; diff --git a/src/gui/util/qshadernodesloader_p.h b/src/gui/util/qshadernodesloader_p.h index 2696e958b6..0bec871857 100644 --- a/src/gui/util/qshadernodesloader_p.h +++ b/src/gui/util/qshadernodesloader_p.h @@ -78,6 +78,7 @@ public: Q_GUI_EXPORT void setDevice(QIODevice *device) Q_DECL_NOTHROW; Q_GUI_EXPORT void load(); + Q_GUI_EXPORT void load(const QJsonObject &prototypesObject); private: Status m_status; |