mirror of
https://git.mirrors.martin98.com/https://github.com/syoyo/tinygltf.git
synced 2025-08-14 12:15:54 +08:00
tiny_gltf.h - add/remove MSFT_extension as required
This commit is contained in:
parent
a42263bdba
commit
f1bdf43e15
66
tiny_gltf.h
66
tiny_gltf.h
@ -7617,11 +7617,40 @@ static void SerializeGltfMaterial(const Material &material, detail::json &o) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SerializeParameterMap(material.additionalValues, o);
|
SerializeParameterMap(material.additionalValues, o);
|
||||||
#else
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SerializeExtrasAndExtensions(material, o);
|
SerializeExtrasAndExtensions(material, o);
|
||||||
|
|
||||||
|
// MSFT_lod
|
||||||
|
if (!material.lods.empty()) {
|
||||||
|
detail::json_iterator it;
|
||||||
|
if (!detail::FindMember(o, "extensions", it)) {
|
||||||
|
detail::json extensions;
|
||||||
|
detail::JsonSetObject(extensions);
|
||||||
|
detail::JsonAddMember(o, "extensions", std::move(extensions));
|
||||||
|
detail::FindMember(o, "extensions", it);
|
||||||
|
}
|
||||||
|
auto &extensions = detail::GetValue(it);
|
||||||
|
if (!detail::FindMember(extensions, "MSFT_lod", it)) {
|
||||||
|
detail::json lod;
|
||||||
|
detail::JsonSetObject(lod);
|
||||||
|
detail::JsonAddMember(extensions, "MSFT_lod", std::move(lod));
|
||||||
|
detail::FindMember(extensions, "MSFT_lod", it);
|
||||||
|
}
|
||||||
|
SerializeNumberArrayProperty<int>("ids", material.lods, detail::GetValue(it));
|
||||||
|
} else {
|
||||||
|
detail::json_iterator ext_it;
|
||||||
|
if (detail::FindMember(o, "extensions", ext_it)) {
|
||||||
|
auto &extensions = detail::GetValue(ext_it);
|
||||||
|
detail::json_iterator lp_it;
|
||||||
|
if (detail::FindMember(extensions, "MSFT_lod", lp_it)) {
|
||||||
|
detail::Erase(extensions, lp_it);
|
||||||
|
}
|
||||||
|
if (detail::IsEmpty(extensions)) {
|
||||||
|
detail::Erase(o, ext_it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SerializeGltfMesh(const Mesh &mesh, detail::json &o) {
|
static void SerializeGltfMesh(const Mesh &mesh, detail::json &o) {
|
||||||
@ -7844,7 +7873,7 @@ static void SerializeGltfNode(const Node &node, detail::json &o) {
|
|||||||
detail::json audio;
|
detail::json audio;
|
||||||
detail::JsonSetObject(audio);
|
detail::JsonSetObject(audio);
|
||||||
detail::JsonAddMember(extensions, "KHR_audio", std::move(audio));
|
detail::JsonAddMember(extensions, "KHR_audio", std::move(audio));
|
||||||
detail::FindMember(o, "KHR_audio", it);
|
detail::FindMember(extensions, "KHR_audio", it);
|
||||||
}
|
}
|
||||||
SerializeNumberProperty("emitter", node.emitter, detail::GetValue(it));
|
SerializeNumberProperty("emitter", node.emitter, detail::GetValue(it));
|
||||||
} else {
|
} else {
|
||||||
@ -7861,6 +7890,37 @@ static void SerializeGltfNode(const Node &node, detail::json &o) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MSFT_lod
|
||||||
|
if (!node.lods.empty()) {
|
||||||
|
detail::json_iterator it;
|
||||||
|
if (!detail::FindMember(o, "extensions", it)) {
|
||||||
|
detail::json extensions;
|
||||||
|
detail::JsonSetObject(extensions);
|
||||||
|
detail::JsonAddMember(o, "extensions", std::move(extensions));
|
||||||
|
detail::FindMember(o, "extensions", it);
|
||||||
|
}
|
||||||
|
auto &extensions = detail::GetValue(it);
|
||||||
|
if (!detail::FindMember(extensions, "MSFT_lod", it)) {
|
||||||
|
detail::json lod;
|
||||||
|
detail::JsonSetObject(lod);
|
||||||
|
detail::JsonAddMember(extensions, "MSFT_lod", std::move(lod));
|
||||||
|
detail::FindMember(extensions, "MSFT_lod", it);
|
||||||
|
}
|
||||||
|
SerializeNumberArrayProperty<int>("ids", node.lods, detail::GetValue(it));
|
||||||
|
} else {
|
||||||
|
detail::json_iterator ext_it;
|
||||||
|
if (detail::FindMember(o, "extensions", ext_it)) {
|
||||||
|
auto &extensions = detail::GetValue(ext_it);
|
||||||
|
detail::json_iterator lp_it;
|
||||||
|
if (detail::FindMember(extensions, "MSFT_lod", lp_it)) {
|
||||||
|
detail::Erase(extensions, lp_it);
|
||||||
|
}
|
||||||
|
if (detail::IsEmpty(extensions)) {
|
||||||
|
detail::Erase(o, ext_it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!node.name.empty()) SerializeStringProperty("name", node.name, o);
|
if (!node.name.empty()) SerializeStringProperty("name", node.name, o);
|
||||||
SerializeNumberArrayProperty<int>("children", node.children, o);
|
SerializeNumberArrayProperty<int>("children", node.children, o);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user