LoadSaveBinaryTest.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  2. // SPDX-License-Identifier: MIT
  3. #include <TestFramework.h>
  4. #include <Tests/General/LoadSaveBinaryTest.h>
  5. #include <Tests/General/LoadSaveSceneTest.h>
  6. #include <Physics/PhysicsScene.h>
  7. #include <Utils/Log.h>
  8. #include <Core/StreamWrapper.h>
  9. JPH_IMPLEMENT_RTTI_VIRTUAL(LoadSaveBinaryTest)
  10. {
  11. JPH_ADD_BASE_CLASS(LoadSaveBinaryTest, Test)
  12. }
  13. void LoadSaveBinaryTest::Initialize()
  14. {
  15. // Create scene
  16. Ref<PhysicsScene> scene = LoadSaveSceneTest::sCreateScene();
  17. {
  18. // Create a new scene by creating the body first and then converting it back to body creation settings
  19. Ref<PhysicsScene> scene_copy = new PhysicsScene();
  20. BodyInterface &bi = mPhysicsSystem->GetBodyInterface();
  21. for (const BodyCreationSettings &b : scene->GetBodies())
  22. {
  23. Body &body = *bi.CreateBody(b);
  24. scene_copy->AddBody(body.GetBodyCreationSettings());
  25. bi.DestroyBody(body.GetID());
  26. }
  27. // Replace the original scene
  28. scene = scene_copy;
  29. }
  30. stringstream data;
  31. // Write scene
  32. {
  33. StreamOutWrapper stream_out(data);
  34. scene->SaveBinaryState(stream_out, true, true);
  35. }
  36. // Clear scene
  37. scene = nullptr;
  38. // Read scene back in
  39. {
  40. StreamInWrapper stream_in(data);
  41. PhysicsScene::PhysicsSceneResult result = PhysicsScene::sRestoreFromBinaryState(stream_in);
  42. if (result.HasError())
  43. FatalError(result.GetError().c_str());
  44. scene = result.Get();
  45. }
  46. // Instantiate scene
  47. scene->CreateBodies(mPhysicsSystem);
  48. }