more work on serialization, work-in-progress
This commit is contained in:
@@ -1235,7 +1235,7 @@ void btCollisionWorld::debugDrawWorld()
|
||||
}
|
||||
|
||||
|
||||
void btCollisionWorld::serializeCollisionObjects(btDefaultSerializer* serializer)
|
||||
void btCollisionWorld::serializeCollisionObjects(btSerializer* serializer)
|
||||
{
|
||||
int i;
|
||||
//serialize all collision objects
|
||||
@@ -1244,12 +1244,9 @@ void btCollisionWorld::serializeCollisionObjects(btDefaultSerializer* serializer
|
||||
btCollisionObject* colObj = m_collisionObjects[i];
|
||||
if (colObj->getInternalType() == btCollisionObject::CO_COLLISION_OBJECT)
|
||||
{
|
||||
int len = colObj->calculateSerializeBufferSize();
|
||||
btChunk* chunk = serializer->allocate(len,1);
|
||||
btChunk* chunk = serializer->allocate(colObj->calculateSerializeBufferSize(),1);
|
||||
const char* structType = colObj->serialize(chunk->m_oldPtr);
|
||||
chunk->m_dna_nr = serializer->getReverseType(structType);
|
||||
chunk->m_chunkCode = BT_COLLISIONOBJECT_CODE;
|
||||
chunk->m_oldPtr = colObj;
|
||||
serializer->finalizeChunk(chunk,structType,BT_COLLISIONOBJECT_CODE,colObj);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1268,33 +1265,18 @@ void btCollisionWorld::serializeCollisionObjects(btDefaultSerializer* serializer
|
||||
int len = shape->calculateSerializeBufferSize();
|
||||
btChunk* chunk = serializer->allocate(len,1);
|
||||
const char* structType = shape->serialize(chunk->m_oldPtr, serializer);
|
||||
chunk->m_dna_nr = serializer->getReverseType(structType);
|
||||
chunk->m_chunkCode = BT_SHAPE_CODE;
|
||||
chunk->m_oldPtr = shape;
|
||||
serializer->finalizeChunk(chunk,structType,BT_SHAPE_CODE,shape);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void btCollisionWorld::serialize(btDefaultSerializer* serializer)
|
||||
void btCollisionWorld::serialize(btSerializer* serializer)
|
||||
{
|
||||
|
||||
|
||||
const bool VOID_IS_8 = ((sizeof(void*)==8));
|
||||
|
||||
if (VOID_IS_8)
|
||||
{
|
||||
//64bit not yet supported (soon)
|
||||
btAssert(0);
|
||||
return;
|
||||
} else
|
||||
{
|
||||
serializer->initDNA((const char*)sBulletDNAstr,sBulletDNAlen);
|
||||
}
|
||||
|
||||
serializeCollisionObjects(serializer);
|
||||
|
||||
serializer->writeDNA();
|
||||
serializer->finishSerialization();
|
||||
}
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ class btStackAlloc;
|
||||
class btCollisionShape;
|
||||
class btConvexShape;
|
||||
class btBroadphaseInterface;
|
||||
class btDefaultSerializer;
|
||||
class btSerializer;
|
||||
|
||||
#include "LinearMath/btVector3.h"
|
||||
#include "LinearMath/btTransform.h"
|
||||
@@ -100,7 +100,7 @@ protected:
|
||||
///it is true by default, because it is error-prone (setting the position of static objects wouldn't update their AABB)
|
||||
bool m_forceUpdateAllAabbs;
|
||||
|
||||
void serializeCollisionObjects(btDefaultSerializer* serializer);
|
||||
void serializeCollisionObjects(btSerializer* serializer);
|
||||
|
||||
public:
|
||||
|
||||
@@ -425,7 +425,7 @@ public:
|
||||
}
|
||||
|
||||
///Preliminary serialization test for Bullet 2.76. Loading those files requires a separate parser (Bullet/Demos/SerializeDemo)
|
||||
virtual void serialize(btDefaultSerializer* serializer);
|
||||
virtual void serialize(btSerializer* serializer);
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ subject to the following restrictions:
|
||||
#include "LinearMath/btVector3.h"
|
||||
#include "LinearMath/btMatrix3x3.h"
|
||||
#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" //for the shape types
|
||||
class btDefaultSerializer;
|
||||
class btSerializer;
|
||||
|
||||
|
||||
///The btCollisionShape class provides an interface for collision shapes that can be shared among btCollisionObjects.
|
||||
@@ -121,7 +121,7 @@ public:
|
||||
virtual int calculateSerializeBufferSize();
|
||||
|
||||
///fills the dataBuffer and returns the struct name (and 0 on failure)
|
||||
virtual const char* serialize(void* dataBuffer, btDefaultSerializer* serializer) const;
|
||||
virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
|
||||
|
||||
};
|
||||
|
||||
@@ -139,7 +139,7 @@ SIMD_FORCE_INLINE int btCollisionShape::calculateSerializeBufferSize()
|
||||
}
|
||||
|
||||
///fills the dataBuffer and returns the struct name (and 0 on failure)
|
||||
SIMD_FORCE_INLINE const char* btCollisionShape::serialize(void* dataBuffer, btDefaultSerializer* serializer) const
|
||||
SIMD_FORCE_INLINE const char* btCollisionShape::serialize(void* dataBuffer, btSerializer* serializer) const
|
||||
{
|
||||
btCollisionShapeData* shapeData = (btCollisionShapeData*) dataBuffer;
|
||||
shapeData->m_userPointer = m_userPointer;
|
||||
|
||||
@@ -112,7 +112,7 @@ public:
|
||||
virtual int calculateSerializeBufferSize();
|
||||
|
||||
///fills the dataBuffer and returns the struct name (and 0 on failure)
|
||||
virtual const char* serialize(void* dataBuffer, btDefaultSerializer* serializer) const;
|
||||
virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
|
||||
|
||||
|
||||
};
|
||||
@@ -142,7 +142,7 @@ SIMD_FORCE_INLINE int btConvexInternalShape::calculateSerializeBufferSize()
|
||||
}
|
||||
|
||||
///fills the dataBuffer and returns the struct name (and 0 on failure)
|
||||
SIMD_FORCE_INLINE const char* btConvexInternalShape::serialize(void* dataBuffer, btDefaultSerializer* serializer) const
|
||||
SIMD_FORCE_INLINE const char* btConvexInternalShape::serialize(void* dataBuffer, btSerializer* serializer) const
|
||||
{
|
||||
btConvexInternalShapeData* shapeData = (btConvexInternalShapeData*) dataBuffer;
|
||||
btCollisionShape::serialize(&shapeData->m_collisionShapeData, serializer);
|
||||
|
||||
@@ -140,39 +140,27 @@ void btMultiSphereShape::calculateLocalInertia(btScalar mass,btVector3& inertia)
|
||||
|
||||
|
||||
///fills the dataBuffer and returns the struct name (and 0 on failure)
|
||||
const char* btMultiSphereShape::serialize(void* dataBuffer, btDefaultSerializer* serializer) const
|
||||
const char* btMultiSphereShape::serialize(void* dataBuffer, btSerializer* serializer) const
|
||||
{
|
||||
btMultiSphereShapeData* shapeData = (btMultiSphereShapeData*) dataBuffer;
|
||||
btConvexInternalShape::serialize(&shapeData->m_convexInternalShapeData, serializer);
|
||||
|
||||
shapeData->m_localPositionArrayPtr = 0;
|
||||
int numElem = m_localPositionArray.size();
|
||||
shapeData->m_localPositionArrayPtr = numElem ? (btPositionAndRadius*)&m_localPositionArray[0]: 0;
|
||||
|
||||
|
||||
shapeData->m_localPositionArraySize = numElem;
|
||||
if (numElem)
|
||||
{
|
||||
void* oldPtr = (void*)&m_localPositionArray[0].getX();
|
||||
shapeData->m_localPositionArrayPtr = (btVector3Data*)oldPtr;
|
||||
|
||||
int sz = sizeof(btVector3Data);
|
||||
|
||||
btChunk* chunk = serializer->allocate(sz,numElem);
|
||||
const char* structType = "btVector3Data";
|
||||
btVector3Data* memPtr = (btVector3Data*)chunk->m_oldPtr;
|
||||
for (int i=0;i<numElem;i++)
|
||||
btChunk* chunk = serializer->allocate(sizeof(btPositionAndRadius),numElem);
|
||||
btPositionAndRadius* memPtr = (btPositionAndRadius*)chunk->m_oldPtr;
|
||||
for (int i=0;i<numElem;i++,memPtr++)
|
||||
{
|
||||
m_localPositionArray[i].serialize(*memPtr);
|
||||
memPtr++;
|
||||
m_localPositionArray[i].serialize(memPtr->m_pos);
|
||||
memPtr->m_radius = m_radiArray[i];
|
||||
}
|
||||
chunk->m_dna_nr = serializer->getReverseType("btVector3Data");
|
||||
chunk->m_chunkCode = BT_VECTOR3_CODE;
|
||||
chunk->m_oldPtr = oldPtr;
|
||||
serializer->finalizeChunk(chunk,"btVector3Data",BT_ARRAY_CODE,(void*)&m_localPositionArray[0]);
|
||||
}
|
||||
|
||||
shapeData->m_radiArrayPtr = 0;
|
||||
shapeData->m_radiArraySize = 0;
|
||||
|
||||
|
||||
return "btMultiSphereShapeData";
|
||||
}
|
||||
|
||||
|
||||
@@ -64,19 +64,24 @@ public:
|
||||
virtual int calculateSerializeBufferSize();
|
||||
|
||||
///fills the dataBuffer and returns the struct name (and 0 on failure)
|
||||
virtual const char* serialize(void* dataBuffer, btDefaultSerializer* serializer) const;
|
||||
virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
|
||||
|
||||
|
||||
};
|
||||
|
||||
struct btPositionAndRadius
|
||||
{
|
||||
btVector3Data m_pos;
|
||||
btScalar m_radius;
|
||||
};
|
||||
|
||||
struct btMultiSphereShapeData
|
||||
{
|
||||
btConvexInternalShapeData m_convexInternalShapeData;
|
||||
|
||||
btVector3Data *m_localPositionArrayPtr;
|
||||
btScalar *m_radiArrayPtr;
|
||||
btPositionAndRadius *m_localPositionArrayPtr;
|
||||
int m_localPositionArraySize;
|
||||
int m_radiArraySize;
|
||||
char m_padding[4];
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user