Skip to content

Commit 1a3b25b

Browse files
committed
Enable serialization of collision_world
1 parent 245dd09 commit 1a3b25b

3 files changed

Lines changed: 54 additions & 1 deletion

File tree

src/bvh/collision_world.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include <memory>
3939
#include <vt/transport.h>
4040
#include <vt/trace/trace_lite.h>
41+
#include <checkpoint/checkpoint.h>
4142

4243
namespace bvh
4344
{
@@ -141,4 +142,32 @@ namespace bvh
141142
{
142143
return m_impl->collision_object_narrowphase_logger;
143144
}
145+
146+
std::unique_ptr< collision_world >
147+
collision_world::deserialize(char *buffer)
148+
{
149+
auto world = checkpoint::deserialize< collision_world >(buffer);
150+
for (auto &obj : world->m_impl->collision_objects) {
151+
obj->set_collision_world(world.get());
152+
}
153+
return world;
154+
}
155+
156+
std::vector< std::unique_ptr< collision_object > > &
157+
collision_world::get_collision_objects()
158+
{
159+
return m_impl->collision_objects;
160+
}
161+
162+
std::size_t &
163+
collision_world::get_overdecomposition()
164+
{
165+
return m_impl->overdecomposition;
166+
}
167+
168+
::vt::EpochType &
169+
collision_world::get_epoch()
170+
{
171+
return m_impl->epoch;
172+
}
144173
}

src/bvh/collision_world.hpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ namespace bvh
5858
template< typename T >
5959
using narrowphase_functor = std::function< narrowphase_result_pair( const broadphase_collision< T > &, const broadphase_collision< T > & ) >;
6060

61-
explicit collision_world( std::size_t _overdecomposition_factor, const world_config &_cfg = {} );
61+
explicit collision_world( std::size_t _overdecomposition_factor = 0, const world_config &_cfg = {} );
6262
~collision_world();
6363

6464
collision_world( const collision_world & ) = delete;
@@ -100,8 +100,22 @@ namespace bvh
100100
std::shared_ptr< spdlog::logger > collision_object_broadphase_logger() const;
101101
std::shared_ptr< spdlog::logger > collision_object_narrowphase_logger() const;
102102

103+
template <typename Serializer>
104+
void serialize(Serializer &s)
105+
{
106+
s | get_collision_objects()
107+
| get_overdecomposition()
108+
| get_epoch();
109+
}
110+
111+
static std::unique_ptr< collision_world > deserialize(char *buffer);
112+
103113
private:
104114

115+
std::vector< std::unique_ptr< collision_object > > &get_collision_objects();
116+
std::size_t &get_overdecomposition();
117+
::vt::EpochType &get_epoch();
118+
105119
struct impl;
106120

107121
friend impl &get_impl( collision_world &_world );

tests/SerializerTest.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
#include <bvh/collision_object/narrowphase.hpp>
4444
#include <bvh/collision_object/types.hpp>
4545
#include <bvh/collision_object.hpp>
46+
#include <bvh/collision_world.hpp>
4647
#include "TestCommon.hpp"
4748

4849
TEMPLATE_TEST_CASE("a single value can be serialized", "[serializer]", int, double, float, std::size_t )
@@ -236,6 +237,15 @@ TEST_CASE( "collision_object serialization", "[serializer][collision_object]" )
236237
auto recPtr = checkpoint::deserialize< bvh::collision_object >( ser->getBuffer() );
237238
}
238239

240+
TEST_CASE( "collision_world serialization", "[serializer][collision_world]" )
241+
{
242+
bvh::collision_world world( 2 );
243+
auto &obj1 = world.create_collision_object();
244+
auto &obj2 = world.create_collision_object();
245+
auto ser = checkpoint::serialize< bvh::collision_world >( world );
246+
auto recPtr = bvh::collision_world::deserialize( ser->getBuffer() );
247+
}
248+
239249
#if 0
240250
TEMPLATE_TEST_CASE("multiple values can be serialized", "[serializer]", int, double, float, std::size_t )
241251
{

0 commit comments

Comments
 (0)