Commit 6e8c0497 authored by Filip Hauzvic's avatar Filip Hauzvic
Browse files

Support more reflection type in serialization

parent 4c7de6ac
Loading
Loading
Loading
Loading
+69 −0
Original line number Diff line number Diff line
@@ -96,6 +96,18 @@ inline void serialize_reflection_value(Serializer& s, const com::Reflection::Val
    case com::Reflection::TypeID::VEC4U:
        s.object(com::as<com::Reflection::ValueVEC4U>(value)->value);
        break;
    case com::Reflection::TypeID::MAT2X2:
        s.object(com::as<com::Reflection::ValueMAT2X2>(value)->value);
        break;
    case com::Reflection::TypeID::MAT3X3:
        s.object(com::as<com::Reflection::ValueMAT3X3>(value)->value);
        break;
    case com::Reflection::TypeID::MAT4X4:
        s.object(com::as<com::Reflection::ValueMAT4X4>(value)->value);
        break;
    case com::Reflection::TypeID::QUAT:
        s.object(com::as<com::Reflection::ValueQUAT>(value)->value);
        break;
    case com::Reflection::TypeID::PATH:
        serialize_path(s, com::as<com::Reflection::ValuePATH>(value)->value);
        break;
@@ -196,6 +208,30 @@ inline com::Reflection::ValuePtr deserialize_reflection_value(Deserializer& s)
            s.object(value);
            return com::make_value<com::Reflection::ValueVEC4U>(value);
        }
    case com::Reflection::TypeID::MAT2X2:
        {
            mat2x2 value;
            s.object(value);
            return com::make_value<com::Reflection::ValueMAT2X2>(value);
        }
    case com::Reflection::TypeID::MAT3X3:
        {
            mat3x3 value;
            s.object(value);
            return com::make_value<com::Reflection::ValueMAT3X3>(value);
        }
    case com::Reflection::TypeID::MAT4X4:
        {
            mat4x4 value;
            s.object(value);
            return com::make_value<com::Reflection::ValueMAT4X4>(value);
        }
    case com::Reflection::TypeID::QUAT:
        {
            quat value;
            s.object(value);
            return com::make_value<com::Reflection::ValueQUAT>(value);
        }
    case com::Reflection::TypeID::PATH:
        {
            com::ContextPath value;
@@ -281,4 +317,37 @@ namespace bitsery {
        s.value4b(v.z);
        s.value4b(v.w);
    }

    template <typename S>
    void serialize(S& s, mat2x2& m)
    {
        s.object(m[0]);
        s.object(m[1]);
    }

    template <typename S>
    void serialize(S& s, mat3x3& m)
    {
        s.object(m[0]);
        s.object(m[1]);
        s.object(m[2]);
    }

    template <typename S>
    void serialize(S& s, mat4x4& m)
    {
        s.object(m[0]);
        s.object(m[1]);
        s.object(m[2]);
        s.object(m[3]);
    }

    template <typename S>
    void serialize(S& s, quat& q)
    {
        s.value4b(q.x);
        s.value4b(q.y);
        s.value4b(q.z);
        s.value4b(q.w);
    }
}