LoadSaveBinaryTest.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #include <TestFramework.h>
  5. #include <Tests/General/LoadSaveBinaryTest.h>
  6. #include <Tests/General/LoadSaveSceneTest.h>
  7. #include <Jolt/Physics/PhysicsScene.h>
  8. #include <Utils/Log.h>
  9. #include <Jolt/Core/StreamWrapper.h>
  10. #include <Layers.h>
  11. JPH_IMPLEMENT_RTTI_VIRTUAL(LoadSaveBinaryTest)
  12. {
  13. JPH_ADD_BASE_CLASS(LoadSaveBinaryTest, Test)
  14. }
  15. void LoadSaveBinaryTest::Initialize()
  16. {
  17. // Create scene
  18. Ref<PhysicsScene> scene = LoadSaveSceneTest::sCreateScene();
  19. {
  20. // Create a new scene by instantiating the scene in a physics system and then converting it back to a scene
  21. PhysicsSystem system;
  22. BPLayerInterfaceImpl layer_interface;
  23. ObjectVsBroadPhaseLayerFilterImpl object_vs_broadphase_layer_filter;
  24. ObjectLayerPairFilterImpl object_vs_object_layer_filter;
  25. system.Init(mPhysicsSystem->GetMaxBodies(), 0, 1024, 1024, layer_interface, object_vs_broadphase_layer_filter, object_vs_object_layer_filter);
  26. scene->CreateBodies(&system);
  27. Ref<PhysicsScene> scene_copy = new PhysicsScene();
  28. scene_copy->FromPhysicsSystem(&system);
  29. // Replace the original scene
  30. scene = scene_copy;
  31. }
  32. stringstream data;
  33. // Write scene
  34. {
  35. StreamOutWrapper stream_out(data);
  36. scene->SaveBinaryState(stream_out, true, true);
  37. }
  38. // Clear scene
  39. scene = nullptr;
  40. // Read scene back in
  41. {
  42. StreamInWrapper stream_in(data);
  43. PhysicsScene::PhysicsSceneResult result = PhysicsScene::sRestoreFromBinaryState(stream_in);
  44. if (result.HasError())
  45. FatalError(result.GetError().c_str());
  46. scene = result.Get();
  47. }
  48. // Instantiate scene
  49. scene->CreateBodies(mPhysicsSystem);
  50. }