diff --git a/CMakeLists.txt b/CMakeLists.txt index 77ca19899..ab997bec2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,7 +36,7 @@ ADD_DEFINITIONS( -DUSE_GRAPHICAL_BENCHMARK) ENDIF (USE_GRAPHICAL_BENCHMARK) IF (WIN32) -OPTION(USE_GLUT "Use Glut" OFF) +OPTION(USE_GLUT "Use Glut" ON) ADD_DEFINITIONS( -D_IRR_STATIC_LIB_ ) ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS ) ADD_DEFINITIONS( -D_CRT_SECURE_NO_DEPRECATE ) diff --git a/Demos/CollisionInterfaceDemo/CollisionInterfaceDemo.cpp b/Demos/CollisionInterfaceDemo/CollisionInterfaceDemo.cpp index bfccf3582..2e3595a14 100644 --- a/Demos/CollisionInterfaceDemo/CollisionInterfaceDemo.cpp +++ b/Demos/CollisionInterfaceDemo/CollisionInterfaceDemo.cpp @@ -254,7 +254,7 @@ void CollisionInterfaceDemo::clientResetScene() { objects[0].getWorldTransform().setOrigin(btVector3(0.0f,3.f,0.f)); - btQuaternion rotA(0.739,-0.204,0.587,0.257); + btQuaternion rotA(0.739f,-0.204f,0.587f,0.257f); rotA.normalize(); objects[0].getWorldTransform().setRotation(rotA); diff --git a/Demos/GenericJointDemo/Ragdoll.cpp b/Demos/GenericJointDemo/Ragdoll.cpp index c470de5f7..34451808b 100644 --- a/Demos/GenericJointDemo/Ragdoll.cpp +++ b/Demos/GenericJointDemo/Ragdoll.cpp @@ -97,9 +97,9 @@ btScalar(0.))); // Setup some damping on the m_bodies for (int i = 0; i < BODYPART_COUNT; ++i) { - m_bodies[i]->setDamping(0.05, 0.85); - m_bodies[i]->setDeactivationTime(0.8); - m_bodies[i]->setSleepingThresholds(1.6, 2.5); + m_bodies[i]->setDamping(0.05f, 0.85f); + m_bodies[i]->setDeactivationTime(0.8f); + m_bodies[i]->setSleepingThresholds(1.6f, 2.5f); } ///////////////////////////// SETTING THE CONSTRAINTS /////////////////////////////////////////////7777 @@ -191,7 +191,7 @@ btScalar(0.))); joint6DOF->setAngularUpperLimit(btVector3(SIMD_EPSILON,SIMD_EPSILON,SIMD_EPSILON)); #else joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_PI*0.7,SIMD_EPSILON,SIMD_EPSILON)); + joint6DOF->setAngularUpperLimit(btVector3(SIMD_PI*0.7f,SIMD_EPSILON,SIMD_EPSILON)); #endif m_joints[JOINT_LEFT_ELBOW] = joint6DOF; m_ownerWorld->addConstraint(m_joints[JOINT_LEFT_ELBOW], true); diff --git a/Demos/OpenGL/GL_DialogDynamicsWorld.cpp b/Demos/OpenGL/GL_DialogDynamicsWorld.cpp index 9ed266e37..38b447b06 100644 --- a/Demos/OpenGL/GL_DialogDynamicsWorld.cpp +++ b/Demos/OpenGL/GL_DialogDynamicsWorld.cpp @@ -110,7 +110,9 @@ void GL_DialogDynamicsWorld::setScreenSize(int width, int height) { - for (int i=0;igetCollisionObjectArray().size();i++) + int i; + + for ( i=0;igetCollisionObjectArray().size();i++) { btCollisionObject* colObj = m_dynamicsWorld->getCollisionObjectArray()[i]; btRigidBody* body = btRigidBody::upcast(colObj); @@ -129,7 +131,7 @@ void GL_DialogDynamicsWorld::setScreenSize(int width, int height) } } - for (int i=0;isetScreenSize(width,height); } diff --git a/Demos/SoftDemo/CMakeLists.txt b/Demos/SoftDemo/CMakeLists.txt index 487a834f6..fcea82505 100644 --- a/Demos/SoftDemo/CMakeLists.txt +++ b/Demos/SoftDemo/CMakeLists.txt @@ -10,6 +10,7 @@ # You shouldn't have to modify anything below this line ######################################################## +IF (USE_GLUT) INCLUDE_DIRECTORIES( @@ -25,3 +26,22 @@ ADD_EXECUTABLE(AppSoftBodyDemo SoftDemo.cpp ) +IF (WIN32) + IF (CMAKE_CL_64) + ADD_CUSTOM_COMMAND( + TARGET AppSoftBodyDemo + POST_BUILD + COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} + ) + ELSE(CMAKE_CL_64) + ADD_CUSTOM_COMMAND( + TARGET AppSoftBodyDemo + POST_BUILD + COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} + ) + ENDIF(CMAKE_CL_64) +ENDIF(WIN32) + +ELSE(USE_GLUT) + +ENDIF (USE_GLUT) \ No newline at end of file diff --git a/Demos/SoftDemo/SoftDemo.cpp b/Demos/SoftDemo/SoftDemo.cpp index 5d3833b5c..0792f3616 100644 --- a/Demos/SoftDemo/SoftDemo.cpp +++ b/Demos/SoftDemo/SoftDemo.cpp @@ -218,7 +218,7 @@ void SoftDemo::clientMoveAndDisplay() #endif //PRINT_CONTACT_STATISTICS - glutSwapBuffers(); + swapBuffers(); } @@ -232,7 +232,7 @@ void SoftDemo::displayCallback(void) { renderme(); glFlush(); - glutSwapBuffers(); + swapBuffers(); } diff --git a/Demos/SoftDemo/SoftDemo.h b/Demos/SoftDemo/SoftDemo.h index f6f21f2e8..e657935ce 100644 --- a/Demos/SoftDemo/SoftDemo.h +++ b/Demos/SoftDemo/SoftDemo.h @@ -19,7 +19,13 @@ subject to the following restrictions: #ifndef SOFT_DEMO_H #define SOFT_DEMO_H +#ifdef _WINDOWS +#include "Win32DemoApplication.h" +#define PlatformDemoApplication Win32DemoApplication +#else #include "GlutDemoApplication.h" +#define PlatformDemoApplication GlutDemoApplication +#endif #include "LinearMath/btAlignedObjectArray.h" #include "BulletSoftBody/btSoftBody.h" @@ -41,7 +47,7 @@ class btSoftRigidDynamicsWorld; ///CcdPhysicsDemo shows basic stacking using Bullet physics, and allows toggle of Ccd (using key '1') -class SoftDemo : public GlutDemoApplication +class SoftDemo : public PlatformDemoApplication { public: diff --git a/Extras/Serialize/BulletFileLoader/bDNA.cpp b/Extras/Serialize/BulletFileLoader/bDNA.cpp index 9108b11c7..132b5c0ba 100644 --- a/Extras/Serialize/BulletFileLoader/bDNA.cpp +++ b/Extras/Serialize/BulletFileLoader/bDNA.cpp @@ -177,7 +177,8 @@ void bDNA::initCmpFlags(bDNA *memDNA) - for (int i=0; i<(int)mStructs.size(); i++) + int i; + for ( i=0; i<(int)mStructs.size(); i++) { short *oldStruct = mStructs[i]; @@ -258,7 +259,7 @@ void bDNA::initCmpFlags(bDNA *memDNA) // recurse in - for (int i=0; i<(int)mStructs.size(); i++) + for ( i=0; i<(int)mStructs.size(); i++) { if (mCMPFlags[i] == FDF_STRUCT_NEQU) initRecurseCmpFlags(i); @@ -368,7 +369,8 @@ void bDNA::init(char *data, int len, bool swap) intPtr++; cp = (char*)intPtr; - for (int i=0; i",memName,memType); else printf("<%s type=\"%s\" count=%d>",memName,memType,arrayLen); - for (int i=0;i\n",memName); } @@ -875,14 +876,15 @@ void bFile::resolvePointersStructRecursive(char *strcPtr, int dna_nr, bool verbo dbPtr = &dbarray[0]; if (dbPtr) { + int i; getElement(arrayLen, newtype,memType, tmp, (char*)dbPtr); - for (int i=0;i",memName,memType); else printf("<%s type=\"%s\" count=%d>",memName,memType,arrayLen); - for (int i=0;i\n",memName); } diff --git a/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp b/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp index edf9bccc7..20256e101 100644 --- a/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp +++ b/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp @@ -216,7 +216,8 @@ btCollisionShape* btBulletWorldImporter::convertCollisionShape( btCollisionShap btAlignedObjectArray radii; radii.resize(numSpheres); tmpPos.resize(numSpheres); - for (int i=0;im_localPositionArrayPtr[i].m_pos); radii[i] = mss->m_localPositionArrayPtr[i].m_radius; @@ -234,7 +235,8 @@ btCollisionShape* btBulletWorldImporter::convertCollisionShape( btCollisionShap btAlignedObjectArray tmpPoints; tmpPoints.resize(numPoints); - for (int i=0;im_unscaledPointsDoublePtr) @@ -249,7 +251,7 @@ btCollisionShape* btBulletWorldImporter::convertCollisionShape( btCollisionShap #endif //BT_USE_DOUBLE_PRECISION } btConvexHullShape* hullShape = createConvexHullShape(); - for (int i=0;iaddPoint(tmpPoints[i]); } diff --git a/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp b/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp index f99d4e3e0..d6b4e73a1 100644 --- a/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp +++ b/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp @@ -135,14 +135,13 @@ static int ClipSegmentToLine(ClipVertex vOut[2], ClipVertex vIn[2], static btScalar EdgeSeparation(const btBox2dShape* poly1, const btTransform& xf1, int edge1, const btBox2dShape* poly2, const btTransform& xf2) { - //int count1 = poly1->getVertexCount(); const btVector3* vertices1 = poly1->getVertices(); const btVector3* normals1 = poly1->getNormals(); int count2 = poly2->getVertexCount(); const btVector3* vertices2 = poly2->getVertices(); - btAssert(0 <= edge1 && edge1 < count1); + btAssert(0 <= edge1 && edge1 < poly1->getVertexCount()); // Convert normal from poly1's frame into poly2's frame. btVector3 normal1World = b2Mul(xf1.getBasis(), normals1[edge1]); @@ -271,14 +270,13 @@ static void FindIncidentEdge(ClipVertex c[2], const btBox2dShape* poly1, const btTransform& xf1, int edge1, const btBox2dShape* poly2, const btTransform& xf2) { - //int count1 = poly1->getVertexCount(); const btVector3* normals1 = poly1->getNormals(); int count2 = poly2->getVertexCount(); const btVector3* vertices2 = poly2->getVertices(); const btVector3* normals2 = poly2->getNormals(); - btAssert(0 <= edge1 && edge1 < count1); + btAssert(0 <= edge1 && edge1 < poly1->getVertexCount()); // Get the normal of the reference edge in poly2's frame. btVector3 normal1 = b2MulT(xf2.getBasis(), b2Mul(xf1.getBasis(), normals1[edge1])); diff --git a/src/LinearMath/btSerializer.h b/src/LinearMath/btSerializer.h index 3a98bfbd6..59159fc22 100644 --- a/src/LinearMath/btSerializer.h +++ b/src/LinearMath/btSerializer.h @@ -1,451 +1,453 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef BT_SERIALIZER_H -#define BT_SERIALIZER_H - -#include "btScalar.h" // has definitions like SIMD_FORCE_INLINE -#include "btStackAlloc.h" -#include "btHashMap.h" -#include -#include - - - -///only the 32bit versions for now -extern unsigned char sBulletDNAstr[]; -extern int sBulletDNAlen; -extern unsigned char sBulletDNAstr64[]; -extern int sBulletDNAlen64; - - - -class btChunk -{ -public: - int m_chunkCode; - int m_length; - void *m_oldPtr; - int m_dna_nr; - 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)= 0; - - virtual void* findPointer(void* oldPtr) = 0; - - virtual void startSerialization() = 0; - - virtual void finishSerialization() = 0; - -}; - - - -#define BT_HEADER_LENGTH 12 -#if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__) -# define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) ) -#else -# define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) ) -#endif - -#define BT_COLLISIONOBJECT_CODE MAKE_ID('C','O','B','J') -#define BT_RIGIDBODY_CODE MAKE_ID('R','B','D','Y') -#define BT_CONSTRAINT_CODE MAKE_ID('C','O','N','S') -#define BT_BOXSHAPE_CODE MAKE_ID('B','O','X','S') -#define BT_SHAPE_CODE MAKE_ID('S','H','A','P') -#define BT_ARRAY_CODE MAKE_ID('A','R','A','Y') - - - -class btDefaultSerializer : public btSerializer -{ - - - btAlignedObjectArray mTypes; - btAlignedObjectArray mStructs; - btAlignedObjectArray mTlens; - btHashMap mStructReverse; - btHashMap mTypeLookup; - - - btHashMap m_chunkP; - - int m_totalSize; - unsigned char* m_buffer; - int m_currentSize; - - btAlignedObjectArray m_chunkPtrs; - -protected: - - virtual void* findPointer(void* oldPtr) - { - void** ptr = m_chunkP.find(oldPtr); - if (ptr && *ptr) - return *ptr; - return 0; - } - - - - void writeDNA() - { - unsigned char* dnaTarget = m_buffer+m_currentSize; - memcpy(dnaTarget,m_dna,m_dnaLength); - m_currentSize += m_dnaLength; - } - - int getReverseType(const char *type) const - { - - btHashString key(type); - const int* valuePtr = mTypeLookup.find(key); - if (valuePtr) - return *valuePtr; - - return -1; - } - - void initDNA(const char* bdnaOrg,int dnalen) - { - ///was already initialized - if (m_dna) - return; - - int littleEndian= 1; - littleEndian= ((char*)&littleEndian)[0]; - - - m_dna = btAlignedAlloc(dnalen,16); - memcpy(m_dna,bdnaOrg,dnalen); - m_dnaLength = dnalen; - - int *intPtr=0; - short *shtPtr=0; - char *cp = 0;int dataLen =0;long nr=0; - intPtr = (int*)m_dna; - - /* - SDNA (4 bytes) (magic number) - NAME (4 bytes) - (4 bytes) amount of names (int) - - - */ - - if (strncmp((const char*)m_dna, "SDNA", 4)==0) - { - // skip ++ NAME - intPtr++; intPtr++; - } - - // Parse names - if (!littleEndian) - *intPtr = btSwapEndian(*intPtr); - - dataLen = *intPtr; - - intPtr++; - - cp = (char*)intPtr; - for (int i=0; i amount of types (int) - - - */ - - intPtr = (int*)cp; - assert(strncmp(cp, "TYPE", 4)==0); intPtr++; - - if (!littleEndian) - *intPtr = btSwapEndian(*intPtr); - - dataLen = *intPtr; - intPtr++; - - cp = (char*)intPtr; - for (int i=0; i (short) the lengths of types - - */ - - // Parse type lens - intPtr = (int*)cp; - assert(strncmp(cp, "TLEN", 4)==0); intPtr++; - - dataLen = (int)mTypes.size(); - - shtPtr = (short*)intPtr; - for (int i=0; i amount of structs (int) - - - - - - - */ - - intPtr = (int*)shtPtr; - cp = (char*)intPtr; - assert(strncmp(cp, "STRC", 4)==0); intPtr++; - - if (!littleEndian) - *intPtr = btSwapEndian(*intPtr); - dataLen = *intPtr ; - intPtr++; - - - shtPtr = (short*)intPtr; - for (int i=0; im_dna_nr = getReverseType(structType); - - chunk->m_chunkCode = chunkCode; - m_chunkP.insert(oldPtr,chunk->m_oldPtr); - chunk->m_oldPtr = oldPtr; - - } - - - - - - virtual btChunk* allocate(size_t size, int numElements) - { - - unsigned char* ptr = m_buffer+m_currentSize; - m_currentSize += int(size)*numElements+sizeof(btChunk); - btAssert(m_currentSizem_chunkCode = 0; - chunk->m_oldPtr = data; - chunk->m_length = int(size)*numElements; - chunk->m_number = numElements; - - m_chunkPtrs.push_back(chunk); - - - return chunk; - } - - - - -}; - - -#endif //BT_SERIALIZER_H - +/* +Bullet Continuous Collision Detection and Physics Library +Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef BT_SERIALIZER_H +#define BT_SERIALIZER_H + +#include "btScalar.h" // has definitions like SIMD_FORCE_INLINE +#include "btStackAlloc.h" +#include "btHashMap.h" +#include +#include + + + +///only the 32bit versions for now +extern unsigned char sBulletDNAstr[]; +extern int sBulletDNAlen; +extern unsigned char sBulletDNAstr64[]; +extern int sBulletDNAlen64; + + + +class btChunk +{ +public: + int m_chunkCode; + int m_length; + void *m_oldPtr; + int m_dna_nr; + 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)= 0; + + virtual void* findPointer(void* oldPtr) = 0; + + virtual void startSerialization() = 0; + + virtual void finishSerialization() = 0; + +}; + + + +#define BT_HEADER_LENGTH 12 +#if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__) +# define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) ) +#else +# define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) ) +#endif + +#define BT_COLLISIONOBJECT_CODE MAKE_ID('C','O','B','J') +#define BT_RIGIDBODY_CODE MAKE_ID('R','B','D','Y') +#define BT_CONSTRAINT_CODE MAKE_ID('C','O','N','S') +#define BT_BOXSHAPE_CODE MAKE_ID('B','O','X','S') +#define BT_SHAPE_CODE MAKE_ID('S','H','A','P') +#define BT_ARRAY_CODE MAKE_ID('A','R','A','Y') + + + +class btDefaultSerializer : public btSerializer +{ + + + btAlignedObjectArray mTypes; + btAlignedObjectArray mStructs; + btAlignedObjectArray mTlens; + btHashMap mStructReverse; + btHashMap mTypeLookup; + + + btHashMap m_chunkP; + + int m_totalSize; + unsigned char* m_buffer; + int m_currentSize; + + btAlignedObjectArray m_chunkPtrs; + +protected: + + virtual void* findPointer(void* oldPtr) + { + void** ptr = m_chunkP.find(oldPtr); + if (ptr && *ptr) + return *ptr; + return 0; + } + + + + void writeDNA() + { + unsigned char* dnaTarget = m_buffer+m_currentSize; + memcpy(dnaTarget,m_dna,m_dnaLength); + m_currentSize += m_dnaLength; + } + + int getReverseType(const char *type) const + { + + btHashString key(type); + const int* valuePtr = mTypeLookup.find(key); + if (valuePtr) + return *valuePtr; + + return -1; + } + + void initDNA(const char* bdnaOrg,int dnalen) + { + ///was already initialized + if (m_dna) + return; + + int littleEndian= 1; + littleEndian= ((char*)&littleEndian)[0]; + + + m_dna = btAlignedAlloc(dnalen,16); + memcpy(m_dna,bdnaOrg,dnalen); + m_dnaLength = dnalen; + + int *intPtr=0; + short *shtPtr=0; + char *cp = 0;int dataLen =0;long nr=0; + intPtr = (int*)m_dna; + + /* + SDNA (4 bytes) (magic number) + NAME (4 bytes) + (4 bytes) amount of names (int) + + + */ + + if (strncmp((const char*)m_dna, "SDNA", 4)==0) + { + // skip ++ NAME + intPtr++; intPtr++; + } + + // Parse names + if (!littleEndian) + *intPtr = btSwapEndian(*intPtr); + + dataLen = *intPtr; + + intPtr++; + + cp = (char*)intPtr; + int i; + for ( i=0; i amount of types (int) + + + */ + + intPtr = (int*)cp; + assert(strncmp(cp, "TYPE", 4)==0); intPtr++; + + if (!littleEndian) + *intPtr = btSwapEndian(*intPtr); + + dataLen = *intPtr; + intPtr++; + + + cp = (char*)intPtr; + for (i=0; i (short) the lengths of types + + */ + + // Parse type lens + intPtr = (int*)cp; + assert(strncmp(cp, "TLEN", 4)==0); intPtr++; + + dataLen = (int)mTypes.size(); + + shtPtr = (short*)intPtr; + for (i=0; i amount of structs (int) + + + + + + + */ + + intPtr = (int*)shtPtr; + cp = (char*)intPtr; + assert(strncmp(cp, "STRC", 4)==0); intPtr++; + + if (!littleEndian) + *intPtr = btSwapEndian(*intPtr); + dataLen = *intPtr ; + intPtr++; + + + shtPtr = (short*)intPtr; + for (i=0; im_dna_nr = getReverseType(structType); + + chunk->m_chunkCode = chunkCode; + m_chunkP.insert(oldPtr,chunk->m_oldPtr); + chunk->m_oldPtr = oldPtr; + + } + + + + + + virtual btChunk* allocate(size_t size, int numElements) + { + + unsigned char* ptr = m_buffer+m_currentSize; + m_currentSize += int(size)*numElements+sizeof(btChunk); + btAssert(m_currentSizem_chunkCode = 0; + chunk->m_oldPtr = data; + chunk->m_length = int(size)*numElements; + chunk->m_number = numElements; + + m_chunkPtrs.push_back(chunk); + + + return chunk; + } + + + + +}; + + +#endif //BT_SERIALIZER_H +