in shared/ext/tiny_gltf.h [6994:7179]
static void SerializeGltfModel(Model *model, json &o) {
// ACCESSORS
json accessors;
JsonReserveArray(accessors, model->accessors.size());
for (unsigned int i = 0; i < model->accessors.size(); ++i) {
json accessor;
SerializeGltfAccessor(model->accessors[i], accessor);
JsonPushBack(accessors, std::move(accessor));
}
JsonAddMember(o, "accessors", std::move(accessors));
// ANIMATIONS
if (model->animations.size()) {
json animations;
JsonReserveArray(animations, model->animations.size());
for (unsigned int i = 0; i < model->animations.size(); ++i) {
if (model->animations[i].channels.size()) {
json animation;
SerializeGltfAnimation(model->animations[i], animation);
JsonPushBack(animations, std::move(animation));
}
}
JsonAddMember(o, "animations", std::move(animations));
}
// ASSET
json asset;
SerializeGltfAsset(model->asset, asset);
JsonAddMember(o, "asset", std::move(asset));
// BUFFERVIEWS
json bufferViews;
JsonReserveArray(bufferViews, model->bufferViews.size());
for (unsigned int i = 0; i < model->bufferViews.size(); ++i) {
json bufferView;
SerializeGltfBufferView(model->bufferViews[i], bufferView);
JsonPushBack(bufferViews, std::move(bufferView));
}
JsonAddMember(o, "bufferViews", std::move(bufferViews));
// Extensions used
if (model->extensionsUsed.size()) {
SerializeStringArrayProperty("extensionsUsed", model->extensionsUsed, o);
}
// Extensions required
if (model->extensionsRequired.size()) {
SerializeStringArrayProperty("extensionsRequired",
model->extensionsRequired, o);
}
// MATERIALS
if (model->materials.size()) {
json materials;
JsonReserveArray(materials, model->materials.size());
for (unsigned int i = 0; i < model->materials.size(); ++i) {
json material;
SerializeGltfMaterial(model->materials[i], material);
JsonPushBack(materials, std::move(material));
}
JsonAddMember(o, "materials", std::move(materials));
}
// MESHES
if (model->meshes.size()) {
json meshes;
JsonReserveArray(meshes, model->meshes.size());
for (unsigned int i = 0; i < model->meshes.size(); ++i) {
json mesh;
SerializeGltfMesh(model->meshes[i], mesh);
JsonPushBack(meshes, std::move(mesh));
}
JsonAddMember(o, "meshes", std::move(meshes));
}
// NODES
if (model->nodes.size()) {
json nodes;
JsonReserveArray(nodes, model->nodes.size());
for (unsigned int i = 0; i < model->nodes.size(); ++i) {
json node;
SerializeGltfNode(model->nodes[i], node);
JsonPushBack(nodes, std::move(node));
}
JsonAddMember(o, "nodes", std::move(nodes));
}
// SCENE
if (model->defaultScene > -1) {
SerializeNumberProperty<int>("scene", model->defaultScene, o);
}
// SCENES
if (model->scenes.size()) {
json scenes;
JsonReserveArray(scenes, model->scenes.size());
for (unsigned int i = 0; i < model->scenes.size(); ++i) {
json currentScene;
SerializeGltfScene(model->scenes[i], currentScene);
JsonPushBack(scenes, std::move(currentScene));
}
JsonAddMember(o, "scenes", std::move(scenes));
}
// SKINS
if (model->skins.size()) {
json skins;
JsonReserveArray(skins, model->skins.size());
for (unsigned int i = 0; i < model->skins.size(); ++i) {
json skin;
SerializeGltfSkin(model->skins[i], skin);
JsonPushBack(skins, std::move(skin));
}
JsonAddMember(o, "skins", std::move(skins));
}
// TEXTURES
if (model->textures.size()) {
json textures;
JsonReserveArray(textures, model->textures.size());
for (unsigned int i = 0; i < model->textures.size(); ++i) {
json texture;
SerializeGltfTexture(model->textures[i], texture);
JsonPushBack(textures, std::move(texture));
}
JsonAddMember(o, "textures", std::move(textures));
}
// SAMPLERS
if (model->samplers.size()) {
json samplers;
JsonReserveArray(samplers, model->samplers.size());
for (unsigned int i = 0; i < model->samplers.size(); ++i) {
json sampler;
SerializeGltfSampler(model->samplers[i], sampler);
JsonPushBack(samplers, std::move(sampler));
}
JsonAddMember(o, "samplers", std::move(samplers));
}
// CAMERAS
if (model->cameras.size()) {
json cameras;
JsonReserveArray(cameras, model->cameras.size());
for (unsigned int i = 0; i < model->cameras.size(); ++i) {
json camera;
SerializeGltfCamera(model->cameras[i], camera);
JsonPushBack(cameras, std::move(camera));
}
JsonAddMember(o, "cameras", std::move(cameras));
}
// EXTENSIONS
SerializeExtensionMap(model->extensions, o);
// LIGHTS as KHR_lights_cmn
if (model->lights.size()) {
json lights;
JsonReserveArray(lights, model->lights.size());
for (unsigned int i = 0; i < model->lights.size(); ++i) {
json light;
SerializeGltfLight(model->lights[i], light);
JsonPushBack(lights, std::move(light));
}
json khr_lights_cmn;
JsonAddMember(khr_lights_cmn, "lights", std::move(lights));
json ext_j;
{
json_const_iterator it;
if (!FindMember(o, "extensions", it)) {
JsonAssign(ext_j, GetValue(it));
}
}
JsonAddMember(ext_j, "KHR_lights_punctual", std::move(khr_lights_cmn));
JsonAddMember(o, "extensions", std::move(ext_j));
}
// EXTRAS
if (model->extras.Type() != NULL_TYPE) {
SerializeValue("extras", model->extras, o);
}
}