diff options
Diffstat (limited to 'src/physics.cpp')
| -rw-r--r-- | src/physics.cpp | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/physics.cpp b/src/physics.cpp index 34cfbed..fe0385c 100644 --- a/src/physics.cpp +++ b/src/physics.cpp @@ -22,10 +22,11 @@ struct AllocedData { }; pk_arr_t<AllocedData> bulletAllocs{}; +btHashedOverlappingPairCache *overlappingPairCache = nullptr; btDefaultCollisionConfiguration *btConfiguration = nullptr; btCollisionDispatcher *btDispatcher = nullptr; -btBroadphaseInterface *btBroadphase = nullptr; -btConstraintSolver *btSolver = nullptr; +btDbvtBroadphase *btBroadphase = nullptr; +btSequentialImpulseConstraintSolver *btSolver = nullptr; struct EntityCollision { CompInstance *a, *b; @@ -111,7 +112,7 @@ void Physics_Init() { btBroadphase = pk_new<btDbvtBroadphase>(MemBkt_Bullet); #if 1 - btHashedOverlappingPairCache *overlappingPairCache = pk_new<btHashedOverlappingPairCache>(MemBkt_Bullet); + overlappingPairCache = pk_new<btHashedOverlappingPairCache>(MemBkt_Bullet); overlappingPairCache->setOverlapFilterCallback(&collisionHandlerStruct); new (btBroadphase) btDbvtBroadphase(overlappingPairCache); #else @@ -136,7 +137,22 @@ int32_t Physics_Tick(double delta) { void Physics_Teardown() { pk_arr_reset(&collisionsThisTick); - pk_delete<btDiscreteDynamicsWorld>(BtDynamicsWorld, MemBkt_Bullet); + if (BtDynamicsWorld != nullptr) + pk_delete<btDiscreteDynamicsWorld>(BtDynamicsWorld, MemBkt_Bullet); + if (overlappingPairCache != nullptr) + pk_delete<btHashedOverlappingPairCache>(overlappingPairCache, MemBkt_Bullet); + if (btConfiguration != nullptr) + pk_delete<btDefaultCollisionConfiguration>(btConfiguration, MemBkt_Bullet); + if (btSolver != nullptr) + pk_delete<btSequentialImpulseConstraintSolver>(btSolver, MemBkt_Bullet); + if (btDispatcher != nullptr) + pk_delete<btCollisionDispatcher>(btDispatcher, MemBkt_Bullet); + if (btBroadphase != nullptr) + pk_delete<btDbvtBroadphase>(btBroadphase, MemBkt_Bullet); + btConfiguration = nullptr; + btSolver = nullptr; + btBroadphase = nullptr; + btDispatcher = nullptr; BtDynamicsWorld = nullptr; // TODO should we manually delete each bullet alloc? // or just drop? |
