diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp index a120731b0..bef003805 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp @@ -2793,11 +2793,12 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm { BT_PROFILE("CMD_SYNC_BODY_INFO"); - int numHandles = m_data->m_bodyHandles.getNumHandles(); + b3AlignedObjectArray usedHandles; + m_data->m_bodyHandles.getUsedHandles(usedHandles); int actualNumBodies = 0; - for (int i=0;im_bodyHandles.getHandle(i); + InteralBodyData* body = m_data->m_bodyHandles.getHandle(usedHandles[i]); if (body && (body->m_multiBody || body->m_rigidBody)) { serverStatusOut.m_sdfLoadedArgs.m_bodyUniqueIds[actualNumBodies++] = i; diff --git a/src/Bullet3Common/b3ResizablePool.h b/src/Bullet3Common/b3ResizablePool.h index 4df56edde..ec5495948 100644 --- a/src/Bullet3Common/b3ResizablePool.h +++ b/src/Bullet3Common/b3ResizablePool.h @@ -4,6 +4,12 @@ #include "Bullet3Common/b3AlignedObjectArray.h" +enum +{ + B3_POOL_HANDLE_TERMINAL_FREE=-1, + B3_POOL_HANDLE_TERMINAL_USED =-2 +}; + template struct b3PoolBodyHandle : public U { @@ -45,6 +51,18 @@ public: return m_bodyHandles.size(); } + void getUsedHandles(b3AlignedObjectArray& usedHandles) const + { + + for (int i=0;i=0); @@ -108,7 +126,7 @@ public: getHandle(handle)->SetNextFree(m_firstFreeHandle); } - + getHandle(handle)->SetNextFree(B3_POOL_HANDLE_TERMINAL_USED); return handle; }