std::string version; //!< Specifies the target rendering API (default: "1.0.3")
} profile; //!< Specifies the target rendering API and version, e.g., WebGL 1.0.3. (default: {})
- float version; //!< The glTF format version
+ std::string version; //!< The glTF format version
void Read(Document& doc);
AssetMetadata()
: premultipliedAlpha(false)
- , version(0)
+ , version("")
{
}
};
inline void AssetMetadata::Read(Document& doc)
{
- // read the version, etc.
- std::string statedVersion;
-
if (Value* obj = FindObject(doc, "asset")) {
ReadMember(*obj, "copyright", copyright);
ReadMember(*obj, "generator", generator);
premultipliedAlpha = MemberOrDefault(*obj, "premultipliedAlpha", false);
- statedVersion = MemberOrDefault(*obj, "version", "0.0");
+
+ if (Value* versionString = FindString(*obj, "version")) {
+ version = versionString->GetString();
+ } else if (Value* versionNumber = FindNumber (*obj, "version")) {
+ char buf[4];
+
+ ai_snprintf(buf, 4, "%.1f", versionNumber->GetDouble());
+
+ version = buf;
+ }
if (Value* profile = FindObject(*obj, "profile")) {
ReadMember(*profile, "api", this->profile.api);
}
}
- float statedFloatVersion = std::strtof(statedVersion.c_str(), 0);
-
- version = std::max(statedFloatVersion, version);
-
- if (version == 0) {
- // if missing version, we'll assume version 2.0...
- version = 2;
- }
-
- if (version != 2) {
- char msg[128];
- ai_snprintf(msg, 128, "GLTF: Unsupported glTF version: %.1f", version);
- throw DeadlyImportError(msg);
+ if (version.empty() || version[0] != '2') {
+ throw DeadlyImportError("GLTF: Unsupported glTF version: " + version);
}
}
{
Value asset;
asset.SetObject();
- {
- char versionChar[10];
- ai_snprintf(versionChar, sizeof(versionChar), "%.1f", mAsset.asset.version);
- asset.AddMember("version", Value(versionChar, mAl).Move(), mAl);
-
- asset.AddMember("generator", Value(mAsset.asset.generator, mAl).Move(), mAl);
- }
+ asset.AddMember("version", Value(mAsset.asset.version, mAl).Move(), mAl);
+ asset.AddMember("generator", Value(mAsset.asset.generator, mAl).Move(), mAl);
mDoc.AddMember("asset", asset, mAl);
}
void glTF2Exporter::ExportMetadata()
{
AssetMetadata& asset = mAsset->asset;
- asset.version = 2;
+ asset.version = "2.0";
char buffer[256];
ai_snprintf(buffer, 256, "Open Asset Import Library (assimp v%d.%d.%d)",
glTF2::Asset asset(pIOHandler);
try {
asset.Load(pFile, extension == "glb");
- return asset.asset.version >= 2;
+ std::string version = asset.asset.version;
+ return !version.empty() && version[0] == '2';
} catch (...) {
return false;
}
std::string version; //!< Specifies the target rendering API (default: "1.0.3")
} profile; //!< Specifies the target rendering API and version, e.g., WebGL 1.0.3. (default: {})
- float version; //!< The glTF format version (should be 1.0)
+ std::string version; //!< The glTF format version (should be 1.0)
void Read(Document& doc);
AssetMetadata()
: premultipliedAlpha(false)
- , version(0)
+ , version("")
{
}
};
*/
#include "StringUtils.h"
+#include <iomanip>
// Header files, Assimp
#include <assimp/DefaultLogger.hpp>
return (it != val.MemberEnd() && it->value.IsString()) ? &it->value : 0;
}
+ inline Value* FindNumber(Value& val, const char* id)
+ {
+ Value::MemberIterator it = val.FindMember(id);
+ return (it != val.MemberEnd() && it->value.IsNumber()) ? &it->value : 0;
+ }
+
inline Value* FindArray(Value& val, const char* id)
{
Value::MemberIterator it = val.FindMember(id);
inline void AssetMetadata::Read(Document& doc)
{
// read the version, etc.
- float statedVersion = 0;
if (Value* obj = FindObject(doc, "asset")) {
ReadMember(*obj, "copyright", copyright);
ReadMember(*obj, "generator", generator);
premultipliedAlpha = MemberOrDefault(*obj, "premultipliedAlpha", false);
- statedVersion = MemberOrDefault(*obj, "version", 0);
+
+ if (Value* versionString = FindString(*obj, "version")) {
+ version = versionString->GetString();
+ } else if (Value* versionNumber = FindNumber (*obj, "version")) {
+ char buf[4];
+
+ ai_snprintf(buf, 4, "%.1f", versionNumber->GetDouble());
+
+ version = buf;
+ }
if (Value* profile = FindObject(*obj, "profile")) {
ReadMember(*profile, "api", this->profile.api);
}
}
- version = std::max(statedVersion, version);
-
- if (version != 1) {
- char msg[128];
- ai_snprintf(msg, 128, "GLTF: Unsupported glTF version: %.0f", version);
- throw DeadlyImportError(msg);
+ if (version.empty() || version[0] != '1') {
+ throw DeadlyImportError("GLTF: Unsupported glTF version: " + version);
}
}
}
AI_SWAP4(header.version);
- asset.version = header.version;
+ asset.version = std::to_string(header.version);
if (header.version != 1) {
throw DeadlyImportError("GLTF: Unsupported binary glTF version");
}
{
Value asset;
asset.SetObject();
- {
- char versionChar[10];
- ai_snprintf(versionChar, sizeof(versionChar), "%.0f", mAsset.asset.version);
- asset.AddMember("version", Value(versionChar, mAl).Move(), mAl);
-
- asset.AddMember("generator", Value(mAsset.asset.generator, mAl).Move(), mAl);
- }
+ asset.AddMember("version", Value(mAsset.asset.version, mAl).Move(), mAl);
+ asset.AddMember("generator", Value(mAsset.asset.generator, mAl).Move(), mAl);
mDoc.AddMember("asset", asset, mAl);
}
glTF::Asset asset(pIOHandler);
try {
asset.Load(pFile, extension == "glb");
- return asset.asset.version < 2;
+ std::string version = asset.asset.version;
+ return !version.empty() && version[0] == '1';
} catch (...) {
return false;
}