rapidjson::Value SerializeAccessor()

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;
    }