remove duplicate code

use a function to parse extras and extensions
This commit is contained in:
David Siegel 2023-06-05 22:18:59 +02:00
parent 47208b234d
commit 22cafa1032

View File

@ -4007,6 +4007,30 @@ static bool ParseExtensionsProperty(ExtensionMap *ret, std::string *err,
return true; return true;
} }
template <typename GltfType>
static bool ParseExtrasAndExtensions(GltfType * target, std::string *err,
const detail::json & o, bool store_json_strings) {
ParseExtensionsProperty(&target->extensions, err, o);
ParseExtrasProperty(&target->extras, o);
if (store_json_strings) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
target->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
target->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true;
}
static bool ParseAsset(Asset *asset, std::string *err, const detail::json &o, static bool ParseAsset(Asset *asset, std::string *err, const detail::json &o,
bool store_original_json_for_extras_and_extensions) { bool store_original_json_for_extras_and_extensions) {
ParseStringProperty(&asset->version, err, o, "version", true, "Asset"); ParseStringProperty(&asset->version, err, o, "version", true, "Asset");
@ -4014,26 +4038,7 @@ static bool ParseAsset(Asset *asset, std::string *err, const detail::json &o,
ParseStringProperty(&asset->minVersion, err, o, "minVersion", false, "Asset"); ParseStringProperty(&asset->minVersion, err, o, "minVersion", false, "Asset");
ParseStringProperty(&asset->copyright, err, o, "copyright", false, "Asset"); ParseStringProperty(&asset->copyright, err, o, "copyright", false, "Asset");
ParseExtensionsProperty(&asset->extensions, err, o); ParseExtrasAndExtensions(asset, err, o, store_original_json_for_extras_and_extensions);
// Unity exporter version is added as extra here
ParseExtrasProperty(&(asset->extras), o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
asset->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
asset->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true; return true;
} }
@ -4074,23 +4079,7 @@ static bool ParseImage(Image *image, const int image_idx, std::string *err,
return false; return false;
} }
ParseExtensionsProperty(&image->extensions, err, o); ParseExtrasAndExtensions(image, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&image->extras, o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator eit;
if (detail::FindMember(o, "extensions", eit)) {
image->extensions_json_string = detail::JsonToString(detail::GetValue(eit));
}
}
{
detail::json_const_iterator eit;
if (detail::FindMember(o, "extras", eit)) {
image->extras_json_string = detail::JsonToString(detail::GetValue(eit));
}
}
}
if (hasBufferView) { if (hasBufferView) {
int bufferView = -1; int bufferView = -1;
@ -4210,23 +4199,7 @@ static bool ParseTexture(Texture *texture, std::string *err, const detail::json
texture->sampler = sampler; texture->sampler = sampler;
texture->source = source; texture->source = source;
ParseExtensionsProperty(&texture->extensions, err, o); ParseExtrasAndExtensions(texture, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&texture->extras, o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
texture->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
texture->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
ParseStringProperty(&texture->name, err, o, "name", false); ParseStringProperty(&texture->name, err, o, "name", false);
@ -4247,23 +4220,7 @@ static bool ParseTextureInfo(
ParseIntegerProperty(&texinfo->texCoord, err, o, "texCoord", false); ParseIntegerProperty(&texinfo->texCoord, err, o, "texCoord", false);
ParseExtensionsProperty(&texinfo->extensions, err, o); ParseExtrasAndExtensions(texinfo, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&texinfo->extras, o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
texinfo->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
texinfo->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true; return true;
} }
@ -4283,23 +4240,7 @@ static bool ParseNormalTextureInfo(
ParseIntegerProperty(&texinfo->texCoord, err, o, "texCoord", false); ParseIntegerProperty(&texinfo->texCoord, err, o, "texCoord", false);
ParseNumberProperty(&texinfo->scale, err, o, "scale", false); ParseNumberProperty(&texinfo->scale, err, o, "scale", false);
ParseExtensionsProperty(&texinfo->extensions, err, o); ParseExtrasAndExtensions(texinfo, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&texinfo->extras, o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
texinfo->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
texinfo->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true; return true;
} }
@ -4319,23 +4260,7 @@ static bool ParseOcclusionTextureInfo(
ParseIntegerProperty(&texinfo->texCoord, err, o, "texCoord", false); ParseIntegerProperty(&texinfo->texCoord, err, o, "texCoord", false);
ParseNumberProperty(&texinfo->strength, err, o, "strength", false); ParseNumberProperty(&texinfo->strength, err, o, "strength", false);
ParseExtensionsProperty(&texinfo->extensions, err, o); ParseExtrasAndExtensions(texinfo, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&texinfo->extras, o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
texinfo->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
texinfo->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true; return true;
} }
@ -4451,23 +4376,7 @@ static bool ParseBuffer(Buffer *buffer, std::string *err, const detail::json &o,
ParseStringProperty(&buffer->name, err, o, "name", false); ParseStringProperty(&buffer->name, err, o, "name", false);
ParseExtensionsProperty(&buffer->extensions, err, o); ParseExtrasAndExtensions(buffer, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&buffer->extras, o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
buffer->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
buffer->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true; return true;
} }
@ -4523,23 +4432,7 @@ static bool ParseBufferView(
ParseStringProperty(&bufferView->name, err, o, "name", false); ParseStringProperty(&bufferView->name, err, o, "name", false);
ParseExtensionsProperty(&bufferView->extensions, err, o); ParseExtrasAndExtensions(bufferView, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&bufferView->extras, o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
bufferView->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
bufferView->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
bufferView->buffer = buffer; bufferView->buffer = buffer;
bufferView->byteOffset = byteOffset; bufferView->byteOffset = byteOffset;
@ -4599,6 +4492,7 @@ static bool ParseSparseAccessor(Accessor *accessor, std::string *err,
accessor->sparse.values.bufferView = values_buffer_view; accessor->sparse.values.bufferView = values_buffer_view;
accessor->sparse.values.byteOffset = values_byte_offset; accessor->sparse.values.byteOffset = values_byte_offset;
// TODO(agnat): Parse extras and extensions of the sparse object
return true; return true;
} }
@ -4682,23 +4576,7 @@ static bool ParseAccessor(Accessor *accessor, std::string *err, const detail::js
} }
} }
ParseExtensionsProperty(&(accessor->extensions), err, o); ParseExtrasAndExtensions(accessor, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&(accessor->extras), o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
accessor->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
accessor->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
// check if accessor has a "sparse" object: // check if accessor has a "sparse" object:
detail::json_const_iterator iterator; detail::json_const_iterator iterator;
@ -4945,23 +4823,7 @@ static bool ParsePrimitive(Primitive *primitive, Model *model, std::string *err,
} }
} }
ParseExtrasProperty(&(primitive->extras), o); ParseExtrasAndExtensions(primitive, err, o, store_original_json_for_extras_and_extensions);
ParseExtensionsProperty(&primitive->extensions, err, o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
primitive->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
primitive->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
#ifdef TINYGLTF_ENABLE_DRACO #ifdef TINYGLTF_ENABLE_DRACO
auto dracoExtension = auto dracoExtension =
@ -4999,23 +4861,7 @@ static bool ParseMesh(Mesh *mesh, Model *model, std::string *err, const detail::
// Should probably check if has targets and if dimensions fit // Should probably check if has targets and if dimensions fit
ParseNumberArrayProperty(&mesh->weights, err, o, "weights", false); ParseNumberArrayProperty(&mesh->weights, err, o, "weights", false);
ParseExtensionsProperty(&mesh->extensions, err, o); ParseExtrasAndExtensions(mesh, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&(mesh->extras), o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
mesh->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
mesh->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true; return true;
} }
@ -5048,23 +4894,7 @@ static bool ParseNode(Node *node, std::string *err, const detail::json &o,
ParseNumberArrayProperty(&node->weights, err, o, "weights", false); ParseNumberArrayProperty(&node->weights, err, o, "weights", false);
ParseExtensionsProperty(&node->extensions, err, o); ParseExtrasAndExtensions(node, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&(node->extras), o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
node->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
node->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true; return true;
} }
@ -5110,23 +4940,7 @@ static bool ParsePbrMetallicRoughness(
ParseNumberProperty(&pbr->metallicFactor, err, o, "metallicFactor", false); ParseNumberProperty(&pbr->metallicFactor, err, o, "metallicFactor", false);
ParseNumberProperty(&pbr->roughnessFactor, err, o, "roughnessFactor", false); ParseNumberProperty(&pbr->roughnessFactor, err, o, "roughnessFactor", false);
ParseExtensionsProperty(&pbr->extensions, err, o); ParseExtrasAndExtensions(pbr, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&pbr->extras, o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
pbr->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
pbr->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true; return true;
} }
@ -5234,24 +5048,8 @@ static bool ParseMaterial(Material *material, std::string *err, const detail::js
} }
} }
material->extensions.clear(); material->extensions.clear(); // Note(agnat): Why?
ParseExtensionsProperty(&material->extensions, err, o); ParseExtrasAndExtensions(material, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&(material->extras), o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator eit;
if (detail::FindMember(o, "extensions", eit)) {
material->extensions_json_string = detail::JsonToString(detail::GetValue(eit));
}
}
{
detail::json_const_iterator eit;
if (detail::FindMember(o, "extras", eit)) {
material->extras_json_string = detail::JsonToString(detail::GetValue(eit));
}
}
}
return true; return true;
} }
@ -5289,28 +5087,13 @@ static bool ParseAnimationChannel(
channel->target_extensions_json_string = detail::JsonToString(detail::GetValue(it)); channel->target_extensions_json_string = detail::JsonToString(detail::GetValue(it));
} }
} }
// TODO(agnat): Parse target extras
} }
channel->sampler = samplerIndex; channel->sampler = samplerIndex;
channel->target_node = targetIndex; channel->target_node = targetIndex;
ParseExtensionsProperty(&channel->extensions, err, o); ParseExtrasAndExtensions(channel, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&(channel->extras), o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
channel->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
channel->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true; return true;
} }
@ -5366,23 +5149,8 @@ static bool ParseAnimation(Animation *animation, std::string *err,
} }
sampler.input = inputIndex; sampler.input = inputIndex;
sampler.output = outputIndex; sampler.output = outputIndex;
ParseExtensionsProperty(&(sampler.extensions), err, o); ParseExtrasAndExtensions(&sampler, err, o,
ParseExtrasProperty(&(sampler.extras), s); store_original_json_for_extras_and_extensions);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator eit;
if (detail::FindMember(o, "extensions", eit)) {
sampler.extensions_json_string = detail::JsonToString(detail::GetValue(eit));
}
}
{
detail::json_const_iterator eit;
if (detail::FindMember(o, "extras", eit)) {
sampler.extras_json_string = detail::JsonToString(detail::GetValue(eit));
}
}
}
animation->samplers.emplace_back(std::move(sampler)); animation->samplers.emplace_back(std::move(sampler));
} }
@ -5391,23 +5159,7 @@ static bool ParseAnimation(Animation *animation, std::string *err,
ParseStringProperty(&animation->name, err, o, "name", false); ParseStringProperty(&animation->name, err, o, "name", false);
ParseExtensionsProperty(&animation->extensions, err, o); ParseExtrasAndExtensions(animation, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&(animation->extras), o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
animation->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
animation->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true; return true;
} }
@ -5437,23 +5189,7 @@ static bool ParseSampler(Sampler *sampler, std::string *err, const detail::json
sampler->wrapT = wrapT; sampler->wrapT = wrapT;
// sampler->wrapR = wrapR; // sampler->wrapR = wrapR;
ParseExtensionsProperty(&(sampler->extensions), err, o); ParseExtrasAndExtensions(sampler, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&(sampler->extras), o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
sampler->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
sampler->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true; return true;
} }
@ -5476,23 +5212,7 @@ static bool ParseSkin(Skin *skin, std::string *err, const detail::json &o,
ParseIntegerProperty(&invBind, err, o, "inverseBindMatrices", true, "Skin"); ParseIntegerProperty(&invBind, err, o, "inverseBindMatrices", true, "Skin");
skin->inverseBindMatrices = invBind; skin->inverseBindMatrices = invBind;
ParseExtensionsProperty(&(skin->extensions), err, o); ParseExtrasAndExtensions(skin, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&(skin->extras), o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
skin->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
skin->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true; return true;
} }
@ -5523,23 +5243,7 @@ static bool ParsePerspectiveCamera(
camera->yfov = yfov; camera->yfov = yfov;
camera->znear = znear; camera->znear = znear;
ParseExtensionsProperty(&camera->extensions, err, o); ParseExtrasAndExtensions(camera, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&(camera->extras), o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
camera->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
camera->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
// TODO(syoyo): Validate parameter values. // TODO(syoyo): Validate parameter values.
@ -5551,23 +5255,7 @@ static bool ParseSpotLight(SpotLight *light, std::string *err, const detail::jso
ParseNumberProperty(&light->innerConeAngle, err, o, "innerConeAngle", false); ParseNumberProperty(&light->innerConeAngle, err, o, "innerConeAngle", false);
ParseNumberProperty(&light->outerConeAngle, err, o, "outerConeAngle", false); ParseNumberProperty(&light->outerConeAngle, err, o, "outerConeAngle", false);
ParseExtensionsProperty(&light->extensions, err, o); ParseExtrasAndExtensions(light, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&light->extras, o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
light->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
light->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
// TODO(syoyo): Validate parameter values. // TODO(syoyo): Validate parameter values.
@ -5598,23 +5286,7 @@ static bool ParseOrthographicCamera(
return false; return false;
} }
ParseExtensionsProperty(&camera->extensions, err, o); ParseExtrasAndExtensions(camera, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&(camera->extras), o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
camera->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
camera->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
camera->xmag = xmag; camera->xmag = xmag;
camera->ymag = ymag; camera->ymag = ymag;
@ -5696,23 +5368,7 @@ static bool ParseCamera(Camera *camera, std::string *err, const detail::json &o,
ParseStringProperty(&camera->name, err, o, "name", false); ParseStringProperty(&camera->name, err, o, "name", false);
ParseExtensionsProperty(&camera->extensions, err, o); ParseExtrasAndExtensions(camera, err, o, store_original_json_for_extras_and_extensions);
ParseExtrasProperty(&(camera->extras), o);
if (store_original_json_for_extras_and_extensions) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
camera->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
camera->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true; return true;
} }
@ -5754,23 +5410,8 @@ static bool ParseLight(Light *light, std::string *err, const detail::json &o,
ParseNumberArrayProperty(&light->color, err, o, "color", false); ParseNumberArrayProperty(&light->color, err, o, "color", false);
ParseNumberProperty(&light->range, err, o, "range", false); ParseNumberProperty(&light->range, err, o, "range", false);
ParseNumberProperty(&light->intensity, err, o, "intensity", false); ParseNumberProperty(&light->intensity, err, o, "intensity", false);
ParseExtensionsProperty(&light->extensions, err, o);
ParseExtrasProperty(&(light->extras), o);
if (store_original_json_for_extras_and_extensions) { ParseExtrasAndExtensions(light, err, o, store_original_json_for_extras_and_extensions);
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
light->extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
light->extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
return true; return true;
} }
@ -6162,24 +5803,7 @@ bool TinyGLTF::LoadFromString(Model *model, std::string *err, std::string *warn,
ParseStringProperty(&scene.name, err, o, "name", false); ParseStringProperty(&scene.name, err, o, "name", false);
ParseExtensionsProperty(&scene.extensions, err, o); ParseExtrasAndExtensions(&scene, err, o, store_original_json_for_extras_and_extensions_);
ParseExtrasProperty(&scene.extras, o);
if (store_original_json_for_extras_and_extensions_) {
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extensions", it)) {
scene.extensions_json_string = detail::JsonToString(detail::GetValue(it));
}
}
{
detail::json_const_iterator it;
if (detail::FindMember(o, "extras", it)) {
scene.extras_json_string = detail::JsonToString(detail::GetValue(it));
}
}
}
model->scenes.emplace_back(std::move(scene)); model->scenes.emplace_back(std::move(scene));
return true; return true;
}); });
@ -6425,8 +6049,8 @@ bool TinyGLTF::LoadFromString(Model *model, std::string *err, std::string *warn,
} }
} }
// 17. Parse Extensions // 17. Parse Extras & Extensions
ParseExtensionsProperty(&model->extensions, err, v); ParseExtrasAndExtensions(model, err, v, store_original_json_for_extras_and_extensions_);
// 18. Specific extension implementations // 18. Specific extension implementations
{ {
@ -6464,14 +6088,6 @@ bool TinyGLTF::LoadFromString(Model *model, std::string *err, std::string *warn,
} }
} }
// 19. Parse Extras
ParseExtrasProperty(&model->extras, v);
if (store_original_json_for_extras_and_extensions_) {
model->extras_json_string = detail::JsonToString(v["extras"]);
model->extensions_json_string = detail::JsonToString(v["extensions"]);
}
return true; return true;
} }