Raise a warning when encountering emissiveFactor with array length

of 4 instead of aborting the model loading
This commit is contained in:
Nyall Dawson 2023-08-24 10:25:20 +10:00
parent ddc76f7724
commit 02e8b8da1e
No known key found for this signature in database
GPG Key ID: D853AA00D2F6AFD0

View File

@ -5192,7 +5192,7 @@ static bool ParsePbrMetallicRoughness(
return true; return true;
} }
static bool ParseMaterial(Material *material, std::string *err, static bool ParseMaterial(Material *material, std::string *err, std::string *warn,
const detail::json &o, const detail::json &o,
bool store_original_json_for_extras_and_extensions) { bool store_original_json_for_extras_and_extensions) {
ParseStringProperty(&material->name, err, o, "name", /* required */ false); ParseStringProperty(&material->name, err, o, "name", /* required */ false);
@ -5200,7 +5200,15 @@ static bool ParseMaterial(Material *material, std::string *err,
if (ParseNumberArrayProperty(&material->emissiveFactor, err, o, if (ParseNumberArrayProperty(&material->emissiveFactor, err, o,
"emissiveFactor", "emissiveFactor",
/* required */ false)) { /* required */ false)) {
if (material->emissiveFactor.size() != 3) { if (material->emissiveFactor.size() == 4) {
if (warn) {
(*warn) +=
"Array length of `emissiveFactor` parameter in "
"material must be 3, but got 4\n";
}
material->emissiveFactor.resize(3);
}
else if (material->emissiveFactor.size() != 3) {
if (err) { if (err) {
(*err) += (*err) +=
"Array length of `emissiveFactor` parameter in " "Array length of `emissiveFactor` parameter in "
@ -6198,7 +6206,7 @@ bool TinyGLTF::LoadFromString(Model *model, std::string *err, std::string *warn,
Material material; Material material;
ParseStringProperty(&material.name, err, o, "name", false); ParseStringProperty(&material.name, err, o, "name", false);
if (!ParseMaterial(&material, err, o, if (!ParseMaterial(&material, err, warn, o,
store_original_json_for_extras_and_extensions_)) { store_original_json_for_extras_and_extensions_)) {
return false; return false;
} }