node: fixed bug that failed to load some default values from shader xml

This commit is contained in:
itsmattkc
2020-04-22 18:13:53 +10:00
parent db117e0780
commit 258f83d5d3
7 changed files with 104 additions and 42 deletions
+50 -27
View File
@@ -37,38 +37,27 @@
OLIVE_NAMESPACE_ENTER
NodeInput::NodeInput(const QString& id, const DataType &type, const QVariant &default_value) :
NodeParam(id),
data_type_(type),
keyframable_(true),
keyframing_(false)
NodeInput::NodeInput(const QString& id, const DataType &type, const QVector<QVariant> &default_value) :
NodeParam(id)
{
int track_size;
Init(type);
switch (data_type_) {
case kVec2:
track_size = 2;
break;
case kVec3:
track_size = 3;
break;
case kVec4:
case kColor:
track_size = 4;
break;
default:
track_size = 1;
if (!default_value.isEmpty()) {
SetDefaultValue(default_value);
}
}
keyframe_tracks_.resize(track_size);
NodeInput::NodeInput(const QString &id, const NodeParam::DataType &type, const QVariant &default_value) :
NodeParam(id)
{
Init(type);
SetDefaultValue(split_normal_value_into_track_values(default_value));
}
if (!default_value.isNull()) {
standard_value_ = split_normal_value_into_track_values(default_value);
Q_ASSERT(standard_value_.size() == track_size);
} else {
standard_value_.resize(track_size);
}
NodeInput::NodeInput(const QString &id, const NodeParam::DataType &type) :
NodeParam(id)
{
Init(type);
}
bool NodeInput::IsArray()
@@ -299,6 +288,40 @@ void NodeInput::SaveInternal(QXmlStreamWriter*) const
{
}
void NodeInput::Init(DataType type)
{
keyframable_ = true;
keyframing_ = false;
data_type_ = type;
int track_size;
switch (data_type_) {
case kVec2:
track_size = 2;
break;
case kVec3:
track_size = 3;
break;
case kVec4:
case kColor:
track_size = 4;
break;
default:
track_size = 1;
}
keyframe_tracks_.resize(track_size);
standard_value_.resize(track_size);
}
void NodeInput::SetDefaultValue(const QVector<QVariant> &default_value)
{
for (int i=0;i<standard_value_.size();i++) {
standard_value_.replace(i, default_value.at(i));
}
}
QString NodeInput::ValueToString(const QVariant &value) const
{
return ValueToString(data_type_, value);
+7 -1
View File
@@ -45,7 +45,9 @@ public:
* saving/loading data from this Node so that parameter order can be changed without issues loading data saved by an
* older version. This of course assumes that parameters don't change their ID.
*/
NodeInput(const QString &id, const DataType& type, const QVariant& default_value = QVariant());
NodeInput(const QString &id, const DataType& type, const QVector<QVariant>& default_value);
NodeInput(const QString &id, const DataType& type, const QVariant& default_value);
NodeInput(const QString &id, const DataType& type);
virtual bool IsArray();
@@ -285,6 +287,10 @@ protected:
virtual void SaveInternal(QXmlStreamWriter* writer) const;
private:
void Init(NodeParam::DataType type);
void SetDefaultValue(const QVector<QVariant> &default_value);
QString ValueToString(const QVariant& value) const;
QVariant StringToValue(const QString &string, QList<XMLNodeData::FootageConnection> &footage_connections);
+8 -2
View File
@@ -231,7 +231,7 @@ void NodeMetaReader::XMLReadParam(QXmlStreamReader *reader)
return;
}
QVariant default_val;
QVector<QVariant> default_val;
QHash<QString, QVariant> properties;
LanguageMap param_names;
QList<LanguageMap> combo_names;
@@ -249,7 +249,13 @@ void NodeMetaReader::XMLReadParam(QXmlStreamReader *reader)
} else if (reader->name() == QStringLiteral("default")) {
// Reads the default value
default_val = NodeInput::StringToValue(param_type, reader->readElementText());
while (XMLReadNextStartElement(reader)) {
if (reader->name() == QStringLiteral("value")) {
default_val.append(NodeInput::StringToValue(param_type, reader->readElementText()));
} else {
reader->skipCurrentElement();
}
}
} else if (reader->name() == QStringLiteral("option")) {