// SPDX-FileCopyrightText: 2021 Jorrit Rouwe // SPDX-License-Identifier: MIT #include #include #include #include #include #include JPH_NAMESPACE_BEGIN RefConst PhysicsMaterial::sDefault; JPH_IMPLEMENT_SERIALIZABLE_VIRTUAL(PhysicsMaterial) { JPH_ADD_BASE_CLASS(PhysicsMaterial, SerializableObject) } void PhysicsMaterial::SaveBinaryState(StreamOut &inStream) const { inStream.Write(GetRTTI()->GetHash()); } void PhysicsMaterial::RestoreBinaryState(StreamIn &inStream) { // RTTI hash is read in sRestoreFromBinaryState } PhysicsMaterial::PhysicsMaterialResult PhysicsMaterial::sRestoreFromBinaryState(StreamIn &inStream) { PhysicsMaterialResult result; // Read the type of the material uint32 hash; inStream.Read(hash); if (inStream.IsEOF() || inStream.IsFailed()) { result.SetError("Failed to read type hash"); return result; } // Get the RTTI for the material const RTTI *rtti = Factory::sInstance->Find(hash); if (rtti == nullptr) { result.SetError("Failed to create instance of material"); return result; } // Construct and read the data of the material Ref material = reinterpret_cast(rtti->CreateObject()); material->RestoreBinaryState(inStream); if (inStream.IsEOF() || inStream.IsFailed()) { result.SetError("Failed to restore material"); return result; } result.Set(material); return result; } JPH_NAMESPACE_END