forked from qt-creator/qt-creator
QmlDesigner: Add some qen parsing functionality
Added Uniform class to store composition node uniforms for shader and ui usage Implement some shader code parsing create unique id for composition nodes (basic implementation) Change-Id: I07ece2058e158b01590bd9b995c179275f489a1c Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
@@ -716,6 +716,7 @@ extend_qtc_plugin(QmlDesigner
|
||||
effectnode.cpp effectnode.h
|
||||
effectnodescategory.cpp effectnodescategory.h
|
||||
compositionnode.cpp compositionnode.h
|
||||
uniform.cpp uniform.h
|
||||
)
|
||||
|
||||
extend_qtc_plugin(QmlDesigner
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
#include "compositionnode.h"
|
||||
|
||||
#include "uniform.h"
|
||||
|
||||
#include <QFileInfo>
|
||||
#include <QJsonArray>
|
||||
#include <QJsonDocument>
|
||||
@@ -53,29 +55,46 @@ void CompositionNode::parse(const QString &qenPath)
|
||||
|
||||
QJsonObject json = jsonDoc.object().value("QEN").toObject();
|
||||
|
||||
m_name = json.value("name").toString();
|
||||
int version = -1;
|
||||
if (json.contains("version"))
|
||||
version = json["version"].toInt(-1);
|
||||
if (version != 1) {
|
||||
QString error = QString("Error: Unknown effect version (%1)").arg(version);
|
||||
qWarning() << qPrintable(error);
|
||||
return;
|
||||
}
|
||||
|
||||
m_name = json.value("name").toString(); //TODO: there is a difference between name and type
|
||||
m_description = json.value("description").toString();
|
||||
m_fragmentCode = codeFromJsonArray(json.value("fragmentCode").toArray());
|
||||
m_vertexCode = codeFromJsonArray(json.value("vertexCode").toArray());
|
||||
|
||||
// parse properties
|
||||
QJsonArray properties = json.value("properties").toArray();
|
||||
for (const auto /*QJsonValueRef*/ &prop : properties) {
|
||||
QJsonObject propObj = prop.toObject();
|
||||
Uniform *u = new Uniform(propObj);
|
||||
Q_UNUSED(u)
|
||||
|
||||
// TODO
|
||||
propObj.value("name");
|
||||
propObj.value("type");
|
||||
propObj.value("defaultValue");
|
||||
propObj.value("description");
|
||||
// TODO
|
||||
}
|
||||
|
||||
// parse shaders
|
||||
QJsonArray vertexCode = json.value("vertexCode").toArray();
|
||||
if (!vertexCode.isEmpty()) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
QJsonArray fragmentCode = json.value("fragmentCode").toArray();
|
||||
if (!fragmentCode.isEmpty()) {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
||||
QString CompositionNode::codeFromJsonArray(const QJsonArray &codeArray)
|
||||
{
|
||||
if (codeArray.isEmpty())
|
||||
return {};
|
||||
|
||||
QString codeString;
|
||||
for (const auto &element : codeArray)
|
||||
codeString += element.toString() + '\n';
|
||||
|
||||
codeString.chop(1); // Remove last '\n'
|
||||
return codeString;
|
||||
}
|
||||
|
||||
} // namespace QmlDesigner
|
||||
|
||||
@@ -22,6 +22,7 @@ public:
|
||||
|
||||
private:
|
||||
void parse(const QString &qenPath);
|
||||
QString codeFromJsonArray(const QJsonArray &codeArray);
|
||||
|
||||
QString m_name;
|
||||
QString m_fragmentCode;
|
||||
|
||||
15
src/plugins/qmldesigner/components/effectmaker/uniform.cpp
Normal file
15
src/plugins/qmldesigner/components/effectmaker/uniform.cpp
Normal file
@@ -0,0 +1,15 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
|
||||
#include "uniform.h"
|
||||
|
||||
#include <QJsonObject>
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
Uniform::Uniform(const QJsonObject &props)
|
||||
{
|
||||
Q_UNUSED(props)
|
||||
}
|
||||
|
||||
} // namespace QmlDesigner
|
||||
53
src/plugins/qmldesigner/components/effectmaker/uniform.h
Normal file
53
src/plugins/qmldesigner/components/effectmaker/uniform.h
Normal file
@@ -0,0 +1,53 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QObject>
|
||||
#include <QVariant>
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
class Uniform : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum class Type
|
||||
{
|
||||
Bool,
|
||||
Int,
|
||||
Float,
|
||||
Vec2,
|
||||
Vec3,
|
||||
Vec4,
|
||||
Color,
|
||||
Sampler,
|
||||
Define
|
||||
};
|
||||
|
||||
Uniform(const QJsonObject &props);
|
||||
|
||||
// TODO: setters & getters
|
||||
|
||||
private:
|
||||
Type m_type;
|
||||
QVariant m_value;
|
||||
QVariant m_defaultValue;
|
||||
QVariant m_minValue;
|
||||
QVariant m_maxValue;
|
||||
QString m_name;
|
||||
QString m_description;
|
||||
QString m_customValue;
|
||||
bool m_useCustomValue = false;
|
||||
bool m_visible = true;
|
||||
bool m_enableMipmap = false;
|
||||
|
||||
bool operator==(const Uniform& rhs) const noexcept
|
||||
{
|
||||
return this->m_name == rhs.m_name;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace QmlDesigner
|
||||
|
||||
Reference in New Issue
Block a user