in GLTFSDK/Source/Serialize.cpp [205:280]
rapidjson::Value SerializeAccessor(const Accessor& accessor, const Document& gltfDocument, rapidjson::Document& document, const ExtensionSerializer& extensionSerializer)
{
rapidjson::Document::AllocatorType& a = document.GetAllocator();
rapidjson::Value accessorValue;
accessorValue.SetObject();
RapidJsonUtils::AddOptionalMember("name", accessorValue, accessor.name, a);
if (accessor.sparse.count > 0U)
{
if (!accessor.bufferViewId.empty())
{
accessorValue.AddMember("bufferView", ToKnownSizeType(gltfDocument.bufferViews.GetIndex(accessor.bufferViewId)), a);
}
rapidjson::Value sparseRoot(rapidjson::kObjectType);
rapidjson::Value indices(rapidjson::kObjectType);
rapidjson::Value values(rapidjson::kObjectType);
indices.AddMember("bufferView", ToKnownSizeType(gltfDocument.bufferViews.GetIndex(accessor.sparse.indicesBufferViewId)), a);
if (accessor.sparse.indicesByteOffset != 0U)
{
indices.AddMember("byteOffset", ToKnownSizeType(accessor.sparse.indicesByteOffset), a);
}
indices.AddMember("componentType", accessor.sparse.indicesComponentType, a);
values.AddMember("bufferView", ToKnownSizeType(gltfDocument.bufferViews.GetIndex(accessor.sparse.valuesBufferViewId)), a);
if (accessor.sparse.valuesByteOffset != 0U)
{
values.AddMember("byteOffset", ToKnownSizeType(accessor.sparse.valuesByteOffset), a);
}
sparseRoot.AddMember("count", ToKnownSizeType(accessor.sparse.count), a);
sparseRoot.AddMember("indices", indices, a);
sparseRoot.AddMember("values", values, a);
accessorValue.AddMember("sparse", sparseRoot, a);
}
else
{
RapidJsonUtils::AddOptionalMemberIndex("bufferView", accessorValue, accessor.bufferViewId, gltfDocument.bufferViews, a);
}
if (accessor.byteOffset != 0U)
{
accessorValue.AddMember("byteOffset", ToKnownSizeType(accessor.byteOffset), a);
}
// Normalized
if (accessor.normalized)
{
accessorValue.AddMember("normalized", accessor.normalized, a);
}
accessorValue.AddMember("componentType", accessor.componentType, a);
accessorValue.AddMember("count", ToKnownSizeType(accessor.count), a);
accessorValue.AddMember("type", RapidJsonUtils::ToStringValue(AccessorTypeToString(accessor.type), a), a);
rapidjson::Value max(rapidjson::kArrayType);
rapidjson::Value min(rapidjson::kArrayType);
if (!accessor.max.empty())
{
accessorValue.AddMember("max", RapidJsonUtils::ToJsonArray(accessor.max, a), a);
}
if (!accessor.min.empty())
{
accessorValue.AddMember("min", RapidJsonUtils::ToJsonArray(accessor.min, a), a);
}
SerializeProperty(gltfDocument, accessor, accessorValue, a, extensionSerializer);
return accessorValue;
}