diff --git a/code/AssetLib/glTF2/glTF2Asset.h b/code/AssetLib/glTF2/glTF2Asset.h index 722e6d119..1aa37b569 100644 --- a/code/AssetLib/glTF2/glTF2Asset.h +++ b/code/AssetLib/glTF2/glTF2Asset.h @@ -378,36 +378,9 @@ struct CustomExtension { CustomExtension& operator=(const CustomExtension&) = default; }; -//! Represents a union of metadata values. Only one nullable is supposed to be set. -struct ExtrasValue { - std::string name; - - Nullable mBoolValue; - Nullable mInt32Value; - Nullable mUint64Value; - Nullable mFloatValue; - Nullable mDoubleValue; - Nullable mStringValue; - Nullable> mMetadataValue; - - ExtrasValue() = default; - ~ExtrasValue() = default; - - ExtrasValue(const ExtrasValue& other) : - name(other.name), - mStringValue(other.mStringValue), - mFloatValue(other.mFloatValue), - mDoubleValue(other.mDoubleValue), - mUint64Value(other.mUint64Value), - mInt32Value(other.mInt32Value), - mBoolValue(other.mBoolValue), - mMetadataValue(other.mMetadataValue) { - } -}; - //! Represents metadata in an glTF2 object struct Extras { - std::vector mValues; + std::vector mValues; inline bool HasExtras() const { return mValues.size() != 0; diff --git a/code/AssetLib/glTF2/glTF2Asset.inl b/code/AssetLib/glTF2/glTF2Asset.inl index 5dc51e7fa..3a7d127d3 100644 --- a/code/AssetLib/glTF2/glTF2Asset.inl +++ b/code/AssetLib/glTF2/glTF2Asset.inl @@ -139,45 +139,13 @@ inline CustomExtension ReadExtensions(const char *name, Value &obj) { return ret; } -inline ExtrasValue ReadExtrasValue(const char *name, Value &obj) { - ExtrasValue ret; - ret.name = name; - - if (obj.IsObject()) { - ret.mMetadataValue.value.reserve(obj.MemberCount()); - ret.mMetadataValue.isPresent = true; - for (auto it = obj.MemberBegin(); it != obj.MemberEnd(); ++it) { - auto &val = it->value; - ret.mMetadataValue.value.push_back(ReadExtrasValue(it->name.GetString(), val)); - } - } else if (obj.IsNumber()) { - if (obj.IsUint64()) { - ret.mUint64Value.value = obj.GetUint64(); - ret.mUint64Value.isPresent = true; - } else if (obj.IsInt()) { - ret.mInt32Value.value = obj.GetInt64(); - ret.mInt32Value.isPresent = true; - } else if (obj.IsDouble()) { - ret.mDoubleValue.value = obj.GetDouble(); - ret.mDoubleValue.isPresent = true; - } - } else if (obj.IsString()) { - ReadValue(obj, ret.mStringValue); - ret.mStringValue.isPresent = true; - } else if (obj.IsBool()) { - ret.mBoolValue.value = obj.GetBool(); - ret.mBoolValue.isPresent = true; - } - return ret; -} - inline Extras ReadExtras(Value &obj) { Extras ret; ret.mValues.reserve(obj.MemberCount()); for (auto it = obj.MemberBegin(); it != obj.MemberEnd(); ++it) { auto &val = it->value; - ret.mValues.push_back(ReadExtrasValue(it->name.GetString(), val)); + ret.mValues.push_back(ReadExtensions(it->name.GetString(), val)); } return ret; diff --git a/code/AssetLib/glTF2/glTF2AssetWriter.inl b/code/AssetLib/glTF2/glTF2AssetWriter.inl index e1fcaefd4..3acec58a5 100644 --- a/code/AssetLib/glTF2/glTF2AssetWriter.inl +++ b/code/AssetLib/glTF2/glTF2AssetWriter.inl @@ -620,7 +620,7 @@ namespace glTF2 { } } - inline void WriteExtrasValue(Value &parent, const ExtrasValue &value, AssetWriter &w) { + inline void WriteExtrasValue(Value &parent, const CustomExtension &value, AssetWriter &w) { Value valueNode; if (value.mStringValue.isPresent) { @@ -629,13 +629,13 @@ namespace glTF2 { MakeValue(valueNode, value.mDoubleValue.value, w.mAl); } else if (value.mUint64Value.isPresent) { MakeValue(valueNode, value.mUint64Value.value, w.mAl); - } else if (value.mInt32Value.isPresent) { - MakeValue(valueNode, value.mInt32Value.value, w.mAl); + } else if (value.mInt64Value.isPresent) { + MakeValue(valueNode, value.mInt64Value.value, w.mAl); } else if (value.mBoolValue.isPresent) { MakeValue(valueNode, value.mBoolValue.value, w.mAl); - } else if (value.mMetadataValue.isPresent) { + } else if (value.mValues.isPresent) { valueNode.SetObject(); - for (auto const &subvalue : value.mMetadataValue.value) { + for (auto const &subvalue : value.mValues.value) { WriteExtrasValue(valueNode, subvalue, w); } } diff --git a/code/AssetLib/glTF2/glTF2Exporter.cpp b/code/AssetLib/glTF2/glTF2Exporter.cpp index d3c88e479..028ab5c17 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.cpp +++ b/code/AssetLib/glTF2/glTF2Exporter.cpp @@ -445,7 +445,7 @@ inline Ref ExportData(Asset &a, std::string &meshName, Ref &bu return acc; } -inline void ExportNodeExtras(const aiMetadataEntry &metadataEntry, aiString name, ExtrasValue &value) { +inline void ExportNodeExtras(const aiMetadataEntry &metadataEntry, aiString name, CustomExtension &value) { value.name = name.C_Str(); switch (metadataEntry.mType) { @@ -454,17 +454,13 @@ inline void ExportNodeExtras(const aiMetadataEntry &metadataEntry, aiString name value.mBoolValue.isPresent = true; break; case AI_INT32: - value.mInt32Value.value = *static_cast(metadataEntry.mData); - value.mInt32Value.isPresent = true; + value.mInt64Value.value = *static_cast(metadataEntry.mData); + value.mInt64Value.isPresent = true; break; case AI_UINT64: value.mUint64Value.value = *static_cast(metadataEntry.mData); value.mUint64Value.isPresent = true; break; - case AI_FLOAT: - value.mFloatValue.value = *static_cast(metadataEntry.mData); - value.mFloatValue.isPresent = true; - break; case AI_DOUBLE: value.mDoubleValue.value = *static_cast(metadataEntry.mData); value.mDoubleValue.isPresent = true; @@ -475,11 +471,11 @@ inline void ExportNodeExtras(const aiMetadataEntry &metadataEntry, aiString name break; case AI_AIMETADATA: const aiMetadata *subMetadata = static_cast(metadataEntry.mData); - value.mMetadataValue.value.resize(subMetadata->mNumProperties); - value.mMetadataValue.isPresent = true; + value.mValues.value.resize(subMetadata->mNumProperties); + value.mValues.isPresent = true; for (unsigned i = 0; i < subMetadata->mNumProperties; ++i) { - ExportNodeExtras(subMetadata->mValues[i], subMetadata->mKeys[i], value.mMetadataValue.value.at(i)); + ExportNodeExtras(subMetadata->mValues[i], subMetadata->mKeys[i], value.mValues.value.at(i)); } break; } diff --git a/code/AssetLib/glTF2/glTF2Importer.cpp b/code/AssetLib/glTF2/glTF2Importer.cpp index e88cd0f08..f34465444 100644 --- a/code/AssetLib/glTF2/glTF2Importer.cpp +++ b/code/AssetLib/glTF2/glTF2Importer.cpp @@ -1033,33 +1033,9 @@ void ParseExtensions(aiMetadata *metadata, const CustomExtension &extension) { } } -void ParseExtrasValue(aiMetadata *metadata, const ExtrasValue &value) { - - if (value.mBoolValue.isPresent) { - metadata->Add(value.name, value.mBoolValue.value); - } else if (value.mInt32Value.isPresent) { - metadata->Add(value.name, value.mInt32Value.value); - } else if (value.mUint64Value.isPresent) { - metadata->Add(value.name, value.mUint64Value.value); - } else if (value.mFloatValue.isPresent) { - metadata->Add(value.name, value.mFloatValue.value); - } else if (value.mDoubleValue.isPresent) { - metadata->Add(value.name, value.mDoubleValue.value); - } else if (value.mStringValue.isPresent) { - metadata->Add(value.name, aiString(value.mStringValue.value)); - } else if (value.mMetadataValue.isPresent) { - aiMetadata subMetadata; - for (auto const &subValue : value.mMetadataValue.value) { - ParseExtrasValue(&subMetadata, subValue); - } - - metadata->Add(value.name, subMetadata); - } -} - void ParseExtras(aiMetadata* metadata, const Extras& extras) { for (auto const &value : extras.mValues) { - ParseExtrasValue(metadata, value); + ParseExtensions(metadata, value); } }