diff options
Diffstat (limited to 'src/plugins/effectmakernew/compositionnode.cpp')
-rw-r--r-- | src/plugins/effectmakernew/compositionnode.cpp | 53 |
1 files changed, 28 insertions, 25 deletions
diff --git a/src/plugins/effectmakernew/compositionnode.cpp b/src/plugins/effectmakernew/compositionnode.cpp index 796b06151f9..8cd5bda971e 100644 --- a/src/plugins/effectmakernew/compositionnode.cpp +++ b/src/plugins/effectmakernew/compositionnode.cpp @@ -11,13 +11,36 @@ #include <QFile> #include <QJsonArray> #include <QJsonDocument> -#include <QJsonObject> namespace EffectMaker { -CompositionNode::CompositionNode(const QString &qenPath) +CompositionNode::CompositionNode(const QString &effectName, const QString &qenPath, const QJsonObject &jsonObject) { - parse(qenPath); + QJsonObject json; + if (jsonObject.isEmpty()) { + QFile qenFile(qenPath); + if (!qenFile.open(QIODevice::ReadOnly)) { + qWarning("Couldn't open effect file."); + return; + } + + QByteArray loadData = qenFile.readAll(); + QJsonParseError parseError; + QJsonDocument jsonDoc(QJsonDocument::fromJson(loadData, &parseError)); + + if (parseError.error != QJsonParseError::NoError) { + QString error = QString("Error parsing effect node"); + QString errorDetails = QString("%1: %2").arg(parseError.offset).arg(parseError.errorString()); + qWarning() << error; + qWarning() << errorDetails; + return; + } + json = jsonDoc.object().value("QEN").toObject(); + parse(effectName, qenPath, json); + } + else { + parse(effectName, "", jsonObject); + } } QString CompositionNode::fragmentCode() const @@ -63,28 +86,8 @@ CompositionNode::NodeType CompositionNode::type() const return m_type; } -void CompositionNode::parse(const QString &qenPath) +void CompositionNode::parse(const QString &effectName, const QString &qenPath, const QJsonObject &json) { - QFile qenFile(qenPath); - - if (!qenFile.open(QIODevice::ReadOnly)) { - qWarning("Couldn't open effect file."); - return; - } - - QByteArray loadData = qenFile.readAll(); - QJsonParseError parseError; - QJsonDocument jsonDoc(QJsonDocument::fromJson(loadData, &parseError)); - if (parseError.error != QJsonParseError::NoError) { - QString error = QString("Error parsing the effect node: %1:").arg(qenPath); - QString errorDetails = QString("%1: %2").arg(parseError.offset).arg(parseError.errorString()); - qWarning() << qPrintable(error); - qWarning() << qPrintable(errorDetails); - return; - } - - QJsonObject json = jsonDoc.object().value("QEN").toObject(); - int version = -1; if (json.contains("version")) version = json["version"].toInt(-1); @@ -102,7 +105,7 @@ void CompositionNode::parse(const QString &qenPath) // parse properties QJsonArray jsonProps = json.value("properties").toArray(); for (const auto /*QJsonValueRef*/ &prop : jsonProps) { - const auto uniform = new Uniform(prop.toObject(), qenPath); + const auto uniform = new Uniform(effectName, prop.toObject(), qenPath); m_unifomrsModel.addUniform(uniform); m_uniforms.append(uniform); g_propertyData.insert(uniform->name(), uniform->value()); |