more work on serialization, work-in-progress

This commit is contained in:
erwin.coumans
2010-01-23 00:04:58 +00:00
parent 76eccc39fc
commit 0f707603f1
18 changed files with 700 additions and 344 deletions

View File

@@ -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();
}

View File

@@ -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);
};

View File

@@ -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;

View File

@@ -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);

View File

@@ -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";
}

View File

@@ -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];
};

View File

@@ -1079,7 +1079,7 @@ const btTypedConstraint* btDiscreteDynamicsWorld::getConstraint(int index) const
void btDiscreteDynamicsWorld::serializeRigidBodies(btDefaultSerializer* serializer)
void btDiscreteDynamicsWorld::serializeRigidBodies(btSerializer* serializer)
{
int i;
//serialize all collision objects
@@ -1091,34 +1091,21 @@ void btDiscreteDynamicsWorld::serializeRigidBodies(btDefaultSerializer* serializ
int len = colObj->calculateSerializeBufferSize();
btChunk* chunk = serializer->allocate(len,1);
const char* structType = colObj->serialize(chunk->m_oldPtr);
chunk->m_dna_nr = serializer->getReverseType(structType);
chunk->m_chunkCode = BT_RIGIDBODY_CODE;
chunk->m_oldPtr = colObj;
serializer->finalizeChunk(chunk,structType,BT_RIGIDBODY_CODE,colObj);
}
}
}
void btDiscreteDynamicsWorld::serialize(btDefaultSerializer* serializer)
void btDiscreteDynamicsWorld::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);
}
serializer->startSerialization();
serializeRigidBodies(serializer);
serializeCollisionObjects(serializer);
serializer->writeDNA();
serializer->finishSerialization();
}

View File

@@ -77,7 +77,7 @@ protected:
virtual void saveKinematicState(btScalar timeStep);
void serializeRigidBodies(btDefaultSerializer* serializer);
void serializeRigidBodies(btSerializer* serializer);
public:
@@ -191,7 +191,7 @@ public:
}
///Preliminary serialization test for Bullet 2.76. Loading those files requires a separate parser (see Bullet/Demos/SerializeDemo)
virtual void serialize(btDefaultSerializer* serializer);
virtual void serialize(btSerializer* serializer);
};

View File

@@ -12,58 +12,57 @@ unsigned char sBulletDNAstr[]= {
109,95,108,111,99,97,108,83,99,97,108,105,110,103,0,109,95,105,109,112,
108,105,99,105,116,83,104,97,112,101,68,105,109,101,110,115,105,111,110,115,
0,109,95,99,111,108,108,105,115,105,111,110,77,97,114,103,105,110,0,109,
95,99,111,110,118,101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,
68,97,116,97,0,42,109,95,108,111,99,97,108,80,111,115,105,116,105,111,
110,65,114,114,97,121,80,116,114,0,42,109,95,114,97,100,105,65,114,114,
97,121,80,116,114,0,109,95,108,111,99,97,108,80,111,115,105,116,105,111,
110,65,114,114,97,121,83,105,122,101,0,109,95,114,97,100,105,65,114,114,
97,121,83,105,122,101,0,109,95,119,111,114,108,100,84,114,97,110,115,102,
111,114,109,0,109,95,105,110,116,101,114,112,111,108,97,116,105,111,110,87,
111,114,108,100,84,114,97,110,115,102,111,114,109,0,109,95,105,110,116,101,
114,112,111,108,97,116,105,111,110,76,105,110,101,97,114,86,101,108,111,99,
105,116,121,0,109,95,105,110,116,101,114,112,111,108,97,116,105,111,110,65,
110,103,117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,97,110,105,
115,111,116,114,111,112,105,99,70,114,105,99,116,105,111,110,0,109,95,104,
97,115,65,110,105,115,111,116,114,111,112,105,99,70,114,105,99,116,105,111,
110,0,109,95,99,111,110,116,97,99,116,80,114,111,99,101,115,115,105,110,
103,84,104,114,101,115,104,111,108,100,0,42,109,95,98,114,111,97,100,112,
104,97,115,101,72,97,110,100,108,101,0,42,109,95,99,111,108,108,105,115,
105,111,110,83,104,97,112,101,0,42,109,95,114,111,111,116,67,111,108,108,
105,115,105,111,110,83,104,97,112,101,0,109,95,99,111,108,108,105,115,105,
111,110,70,108,97,103,115,0,109,95,105,115,108,97,110,100,84,97,103,49,
0,109,95,99,111,109,112,97,110,105,111,110,73,100,0,109,95,97,99,116,
105,118,97,116,105,111,110,83,116,97,116,101,49,0,109,95,100,101,97,99,
116,105,118,97,116,105,111,110,84,105,109,101,0,109,95,102,114,105,99,116,
105,111,110,0,109,95,114,101,115,116,105,116,117,116,105,111,110,0,109,95,
105,110,116,101,114,110,97,108,84,121,112,101,0,42,109,95,117,115,101,114,
79,98,106,101,99,116,80,111,105,110,116,101,114,0,109,95,104,105,116,70,
114,97,99,116,105,111,110,0,109,95,99,99,100,83,119,101,112,116,83,112,
104,101,114,101,82,97,100,105,117,115,0,109,95,99,99,100,77,111,116,105,
111,110,84,104,114,101,115,104,111,108,100,0,109,95,99,104,101,99,107,67,
111,108,108,105,100,101,87,105,116,104,0,109,95,99,111,108,108,105,115,105,
111,110,79,98,106,101,99,116,68,97,116,97,0,109,95,105,110,118,73,110,
101,114,116,105,97,84,101,110,115,111,114,87,111,114,108,100,0,109,95,108,
105,110,101,97,114,86,101,108,111,99,105,116,121,0,109,95,97,110,103,117,
108,97,114,86,101,108,111,99,105,116,121,0,109,95,105,110,118,101,114,115,
101,77,97,115,115,0,109,95,97,110,103,117,108,97,114,70,97,99,116,111,
114,0,109,95,108,105,110,101,97,114,70,97,99,116,111,114,0,109,95,103,
114,97,118,105,116,121,0,109,95,103,114,97,118,105,116,121,95,97,99,99,
101,108,101,114,97,116,105,111,110,0,109,95,105,110,118,73,110,101,114,116,
105,97,76,111,99,97,108,0,109,95,116,111,116,97,108,70,111,114,99,101,
0,109,95,116,111,116,97,108,84,111,114,113,117,101,0,109,95,108,105,110,
101,97,114,68,97,109,112,105,110,103,0,109,95,97,110,103,117,108,97,114,
68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105,111,110,97,108,
68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105,111,110,97,108,
68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95,97,100,100,105,
116,105,111,110,97,108,76,105,110,101,97,114,68,97,109,112,105,110,103,84,
104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105,116,105,
111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103,84,104,
114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105,116,105,111,
110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103,70,97,99,
116,111,114,0,109,95,108,105,110,101,97,114,83,108,101,101,112,105,110,103,
84,104,114,101,115,104,111,108,100,0,109,95,97,110,103,117,108,97,114,83,
108,101,101,112,105,110,103,84,104,114,101,115,104,111,108,100,0,0,0,0,
84,89,80,69,22,0,0,0,99,104,97,114,0,117,99,104,97,114,0,115,
95,112,111,115,0,109,95,114,97,100,105,117,115,0,109,95,99,111,110,118,
101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,68,97,116,97,0,
42,109,95,108,111,99,97,108,80,111,115,105,116,105,111,110,65,114,114,97,
121,80,116,114,0,109,95,108,111,99,97,108,80,111,115,105,116,105,111,110,
65,114,114,97,121,83,105,122,101,0,109,95,119,111,114,108,100,84,114,97,
110,115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97,116,105,
111,110,87,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109,95,105,
110,116,101,114,112,111,108,97,116,105,111,110,76,105,110,101,97,114,86,101,
108,111,99,105,116,121,0,109,95,105,110,116,101,114,112,111,108,97,116,105,
111,110,65,110,103,117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,
97,110,105,115,111,116,114,111,112,105,99,70,114,105,99,116,105,111,110,0,
109,95,104,97,115,65,110,105,115,111,116,114,111,112,105,99,70,114,105,99,
116,105,111,110,0,109,95,99,111,110,116,97,99,116,80,114,111,99,101,115,
115,105,110,103,84,104,114,101,115,104,111,108,100,0,42,109,95,98,114,111,
97,100,112,104,97,115,101,72,97,110,100,108,101,0,42,109,95,99,111,108,
108,105,115,105,111,110,83,104,97,112,101,0,42,109,95,114,111,111,116,67,
111,108,108,105,115,105,111,110,83,104,97,112,101,0,109,95,99,111,108,108,
105,115,105,111,110,70,108,97,103,115,0,109,95,105,115,108,97,110,100,84,
97,103,49,0,109,95,99,111,109,112,97,110,105,111,110,73,100,0,109,95,
97,99,116,105,118,97,116,105,111,110,83,116,97,116,101,49,0,109,95,100,
101,97,99,116,105,118,97,116,105,111,110,84,105,109,101,0,109,95,102,114,
105,99,116,105,111,110,0,109,95,114,101,115,116,105,116,117,116,105,111,110,
0,109,95,105,110,116,101,114,110,97,108,84,121,112,101,0,42,109,95,117,
115,101,114,79,98,106,101,99,116,80,111,105,110,116,101,114,0,109,95,104,
105,116,70,114,97,99,116,105,111,110,0,109,95,99,99,100,83,119,101,112,
116,83,112,104,101,114,101,82,97,100,105,117,115,0,109,95,99,99,100,77,
111,116,105,111,110,84,104,114,101,115,104,111,108,100,0,109,95,99,104,101,
99,107,67,111,108,108,105,100,101,87,105,116,104,0,109,95,99,111,108,108,
105,115,105,111,110,79,98,106,101,99,116,68,97,116,97,0,109,95,105,110,
118,73,110,101,114,116,105,97,84,101,110,115,111,114,87,111,114,108,100,0,
109,95,108,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109,95,97,
110,103,117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,105,110,118,
101,114,115,101,77,97,115,115,0,109,95,97,110,103,117,108,97,114,70,97,
99,116,111,114,0,109,95,108,105,110,101,97,114,70,97,99,116,111,114,0,
109,95,103,114,97,118,105,116,121,0,109,95,103,114,97,118,105,116,121,95,
97,99,99,101,108,101,114,97,116,105,111,110,0,109,95,105,110,118,73,110,
101,114,116,105,97,76,111,99,97,108,0,109,95,116,111,116,97,108,70,111,
114,99,101,0,109,95,116,111,116,97,108,84,111,114,113,117,101,0,109,95,
108,105,110,101,97,114,68,97,109,112,105,110,103,0,109,95,97,110,103,117,
108,97,114,68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105,111,
110,97,108,68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105,111,
110,97,108,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95,97,
100,100,105,116,105,111,110,97,108,76,105,110,101,97,114,68,97,109,112,105,
110,103,84,104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,
105,116,105,111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,
103,84,104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105,
116,105,111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103,
70,97,99,116,111,114,0,109,95,108,105,110,101,97,114,83,108,101,101,112,
105,110,103,84,104,114,101,115,104,111,108,100,0,109,95,97,110,103,117,108,
97,114,83,108,101,101,112,105,110,103,84,104,114,101,115,104,111,108,100,0,
84,89,80,69,23,0,0,0,99,104,97,114,0,117,99,104,97,114,0,115,
104,111,114,116,0,117,115,104,111,114,116,0,105,110,116,0,108,111,110,103,
0,117,108,111,110,103,0,102,108,111,97,116,0,100,111,117,98,108,101,0,
118,111,105,100,0,98,116,83,99,97,108,97,114,0,80,111,105,110,116,101,
@@ -73,27 +72,28 @@ unsigned char sBulletDNAstr[]= {
97,0,98,116,84,114,97,110,115,102,111,114,109,68,97,116,97,0,98,116,
67,111,108,108,105,115,105,111,110,83,104,97,112,101,68,97,116,97,0,98,
116,67,111,110,118,101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,
68,97,116,97,0,98,116,77,117,108,116,105,83,112,104,101,114,101,83,104,
68,97,116,97,0,98,116,80,111,115,105,116,105,111,110,65,110,100,82,97,
100,105,117,115,0,98,116,77,117,108,116,105,83,112,104,101,114,101,83,104,
97,112,101,68,97,116,97,0,98,116,67,111,108,108,105,115,105,111,110,79,
98,106,101,99,116,68,97,116,97,0,98,116,82,105,103,105,100,66,111,100,
121,68,97,116,97,0,0,0,84,76,69,78,1,0,1,0,2,0,2,0,
4,0,4,0,4,0,4,0,8,0,0,0,4,0,12,0,36,0,8,0,
16,0,48,0,64,0,12,0,52,0,68,0,-8,0,-32,1,83,84,82,67,
11,0,0,0,11,0,3,0,4,0,0,0,4,0,1,0,9,0,2,0,
12,0,3,0,11,0,3,0,11,0,4,0,11,0,5,0,13,0,2,0,
9,0,6,0,9,0,7,0,14,0,1,0,10,0,8,0,15,0,1,0,
14,0,9,0,16,0,2,0,15,0,10,0,14,0,11,0,17,0,3,0,
9,0,12,0,4,0,13,0,0,0,14,0,18,0,5,0,17,0,15,0,
14,0,16,0,14,0,17,0,10,0,18,0,0,0,14,0,19,0,5,0,
18,0,19,0,14,0,20,0,10,0,21,0,4,0,22,0,4,0,23,0,
20,0,23,0,16,0,24,0,16,0,25,0,14,0,26,0,14,0,27,0,
14,0,28,0,4,0,29,0,10,0,30,0,9,0,31,0,9,0,32,0,
17,0,33,0,4,0,34,0,4,0,35,0,4,0,36,0,4,0,37,0,
10,0,38,0,10,0,39,0,10,0,40,0,4,0,41,0,9,0,42,0,
10,0,43,0,10,0,44,0,10,0,45,0,4,0,46,0,21,0,21,0,
20,0,47,0,15,0,48,0,14,0,49,0,14,0,50,0,10,0,51,0,
14,0,52,0,14,0,53,0,14,0,54,0,14,0,55,0,14,0,56,0,
14,0,57,0,14,0,58,0,10,0,59,0,10,0,60,0,4,0,61,0,
10,0,62,0,10,0,63,0,10,0,64,0,10,0,65,0,10,0,66,0,
10,0,67,0,};
16,0,48,0,64,0,12,0,52,0,20,0,64,0,-8,0,-32,1,0,0,
83,84,82,67,12,0,0,0,11,0,3,0,4,0,0,0,4,0,1,0,
9,0,2,0,12,0,3,0,11,0,3,0,11,0,4,0,11,0,5,0,
13,0,2,0,9,0,6,0,9,0,7,0,14,0,1,0,10,0,8,0,
15,0,1,0,14,0,9,0,16,0,2,0,15,0,10,0,14,0,11,0,
17,0,3,0,9,0,12,0,4,0,13,0,0,0,14,0,18,0,5,0,
17,0,15,0,14,0,16,0,14,0,17,0,10,0,18,0,0,0,14,0,
19,0,2,0,14,0,19,0,10,0,20,0,20,0,4,0,18,0,21,0,
19,0,22,0,4,0,23,0,0,0,14,0,21,0,23,0,16,0,24,0,
16,0,25,0,14,0,26,0,14,0,27,0,14,0,28,0,4,0,29,0,
10,0,30,0,9,0,31,0,9,0,32,0,17,0,33,0,4,0,34,0,
4,0,35,0,4,0,36,0,4,0,37,0,10,0,38,0,10,0,39,0,
10,0,40,0,4,0,41,0,9,0,42,0,10,0,43,0,10,0,44,0,
10,0,45,0,4,0,46,0,22,0,21,0,21,0,47,0,15,0,48,0,
14,0,49,0,14,0,50,0,10,0,51,0,14,0,52,0,14,0,53,0,
14,0,54,0,14,0,55,0,14,0,56,0,14,0,57,0,14,0,58,0,
10,0,59,0,10,0,60,0,4,0,61,0,10,0,62,0,10,0,63,0,
10,0,64,0,10,0,65,0,10,0,66,0,10,0,67,0,};
int sBulletDNAlen= sizeof(sBulletDNAstr);

View File

@@ -37,6 +37,25 @@ public:
int m_number;
};
class btSerializer
{
public:
virtual const unsigned char* getBufferPointer() const = 0;
virtual int getCurrentBufferSize() const = 0;
virtual btChunk* allocate(size_t size, int numElements) = 0;
virtual void finalizeChunk(btChunk* chunk, const char* structType, int chunkCode,void* oldPtr) const = 0;
virtual void startSerialization() = 0;
virtual void finishSerialization() = 0;
};
#define BT_HEADER_LENGTH 12
@@ -50,11 +69,11 @@ public:
#define BT_RIGIDBODY_CODE MAKE_ID('R','B','D','Y')
#define BT_BOXSHAPE_CODE MAKE_ID('B','O','X','S')
#define BT_SHAPE_CODE MAKE_ID('S','H','A','P')
#define BT_VECTOR3_CODE MAKE_ID('V','E','C','3')
#define BT_ARRAY_CODE MAKE_ID('A','R','A','Y')
class btDefaultSerializer
class btDefaultSerializer : public btSerializer
{
public:
btAlignedObjectArray<char*> mTypes;
btAlignedObjectArray<short*> mStructs;
@@ -68,52 +87,13 @@ public:
unsigned char* m_buffer;
int m_currentSize;
protected:
void* m_dna;
int m_dnaLength;
btDefaultSerializer(int totalSize)
:m_totalSize(totalSize),
m_currentSize(0),
m_dna(0),
m_dnaLength(0)
void writeDNA()
{
m_buffer = (unsigned char*)btAlignedAlloc(16,totalSize);
m_currentSize += BT_HEADER_LENGTH;
memcpy(m_buffer, "BULLET ", 7);
int endian= 1;
endian= ((char*)&endian)[0];
if (endian)
{
m_buffer[7] = '_';
} else
{
m_buffer[7] = '-';
}
if (sizeof(void*)==8)
{
m_buffer[8]='V';
} else
{
m_buffer[8]='v';
}
m_buffer[9] = '2';
m_buffer[10] = '7';
m_buffer[11] = '5';
}
virtual ~btDefaultSerializer()
{
btAlignedFree(m_buffer);
unsigned char* dnaTarget = m_buffer+m_currentSize;
memcpy(dnaTarget,m_dna,m_dnaLength);
m_currentSize += m_dnaLength;
}
int getReverseType(const char *type) const
@@ -127,33 +107,6 @@ public:
return -1;
}
void writeDNA()
{
unsigned char* dnaTarget = m_buffer+m_currentSize;
memcpy(dnaTarget,m_dna,m_dnaLength);
m_currentSize += m_dnaLength;
}
virtual btChunk* allocate(size_t size, int numElements)
{
unsigned char* ptr = m_buffer+m_currentSize;
m_currentSize += size*numElements+sizeof(btChunk);
unsigned char* data = ptr + sizeof(btChunk);
btChunk* chunk = (btChunk*)ptr;
chunk->m_chunkCode = 0;
chunk->m_oldPtr = data;
chunk->m_length = size*numElements;
chunk->m_number = numElements;
m_chunkPtrs.push_back(chunk);
return chunk;
}
void initDNA(const char* bdna,int dnalen)
{
///was already initialized
@@ -291,6 +244,119 @@ public:
}
}
public:
void* m_dna;
int m_dnaLength;
btDefaultSerializer(int totalSize)
:m_totalSize(totalSize),
m_currentSize(0),
m_dna(0),
m_dnaLength(0)
{
m_buffer = (unsigned char*)btAlignedAlloc(16,totalSize);
const bool VOID_IS_8 = ((sizeof(void*)==8));
if (VOID_IS_8)
{
//64bit not yet supported (soon)
btAssert(0);
return;
} else
{
initDNA((const char*)sBulletDNAstr,sBulletDNAlen);
}
}
virtual ~btDefaultSerializer()
{
btAlignedFree(m_buffer);
}
virtual void startSerialization()
{
m_currentSize = BT_HEADER_LENGTH;
memcpy(m_buffer, "BULLET ", 7);
int endian= 1;
endian= ((char*)&endian)[0];
if (endian)
{
m_buffer[7] = '_';
} else
{
m_buffer[7] = '-';
}
if (sizeof(void*)==8)
{
m_buffer[8]='V';
} else
{
m_buffer[8]='v';
}
m_buffer[9] = '2';
m_buffer[10] = '7';
m_buffer[11] = '5';
}
virtual void finishSerialization()
{
writeDNA();
}
virtual const unsigned char* getBufferPointer() const
{
return m_buffer;
}
virtual int getCurrentBufferSize() const
{
return m_currentSize;
}
virtual void finalizeChunk(btChunk* chunk, const char* structType, int chunkCode,void* oldPtr) const
{
chunk->m_dna_nr = getReverseType(structType);
chunk->m_chunkCode = chunkCode;
chunk->m_oldPtr = oldPtr;
}
virtual btChunk* allocate(size_t size, int numElements)
{
unsigned char* ptr = m_buffer+m_currentSize;
m_currentSize += size*numElements+sizeof(btChunk);
unsigned char* data = ptr + sizeof(btChunk);
btChunk* chunk = (btChunk*)ptr;
chunk->m_chunkCode = 0;
chunk->m_oldPtr = data;
chunk->m_length = size*numElements;
chunk->m_number = numElements;
m_chunkPtrs.push_back(chunk);
return chunk;
}
};