diff --git a/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp b/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp index 74335f0be..ffb2d1edc 100644 --- a/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp +++ b/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp @@ -89,10 +89,12 @@ const char* btCollisionObject::serialize(void* dataBuffer, btSerializer* seriali dataOut->m_friction = m_friction; dataOut->m_restitution = m_restitution; dataOut->m_internalType = m_internalType; - dataOut->m_name = (char*) serializer->findNameForPointer(this); + + char* name = (char*) serializer->findNameForPointer(this); + dataOut->m_name = (char*)serializer->getUniquePointer(name); if (dataOut->m_name) { - serializer->serializeName(dataOut->m_name); + serializer->serializeName(name); } dataOut->m_hitFraction = m_hitFraction; dataOut->m_ccdSweptSphereRadius = m_ccdSweptSphereRadius; diff --git a/src/BulletCollision/CollisionShapes/btCollisionShape.cpp b/src/BulletCollision/CollisionShapes/btCollisionShape.cpp index 3a31ab7a5..39ee21cad 100644 --- a/src/BulletCollision/CollisionShapes/btCollisionShape.cpp +++ b/src/BulletCollision/CollisionShapes/btCollisionShape.cpp @@ -99,10 +99,11 @@ void btCollisionShape::calculateTemporalAabb(const btTransform& curTrans,const b const char* btCollisionShape::serialize(void* dataBuffer, btSerializer* serializer) const { btCollisionShapeData* shapeData = (btCollisionShapeData*) dataBuffer; - shapeData->m_name = (char*) serializer->findNameForPointer(this); + char* name = (char*) serializer->findNameForPointer(this); + shapeData->m_name = (char*)serializer->getUniquePointer(name); if (shapeData->m_name) { - serializer->serializeName(shapeData->m_name); + serializer->serializeName(name); } shapeData->m_shapeType = m_shapeType; //shapeData->m_padding//?? diff --git a/src/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp b/src/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp index e09ab15ea..e7c94b193 100644 --- a/src/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp +++ b/src/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp @@ -105,10 +105,11 @@ const char* btTypedConstraint::serialize(void* dataBuffer, btSerializer* seriali tcd->m_rbA = (btRigidBodyData*)serializer->getUniquePointer(&m_rbA); tcd->m_rbB = (btRigidBodyData*)serializer->getUniquePointer(&m_rbB); - tcd->m_name = (char*) serializer->findNameForPointer(this); + char* name = (char*) serializer->findNameForPointer(this); + tcd->m_name = (char*)serializer->getUniquePointer(name); if (tcd->m_name) { - serializer->serializeName(tcd->m_name); + serializer->serializeName(name); } tcd->m_objectType = m_objectType; diff --git a/src/LinearMath/btSerializer.h b/src/LinearMath/btSerializer.h index 9c207bc19..8ba59b287 100644 --- a/src/LinearMath/btSerializer.h +++ b/src/LinearMath/btSerializer.h @@ -473,6 +473,9 @@ public: virtual void* getUniquePointer(void*oldPtr) { + if (!oldPtr) + return 0; + btPointerUid* uptr = (btPointerUid*)m_uniquePointers.find(oldPtr); if (uptr) {