diff --git a/Demos/CcdPhysicsDemo/CcdPhysicsDemo.cpp b/Demos/CcdPhysicsDemo/CcdPhysicsDemo.cpp index 98a2582c4..a27a5c9f7 100644 --- a/Demos/CcdPhysicsDemo/CcdPhysicsDemo.cpp +++ b/Demos/CcdPhysicsDemo/CcdPhysicsDemo.cpp @@ -20,8 +20,8 @@ subject to the following restrictions: //Note: some of those settings need 'DO_WALL' demo //#define USE_KINEMATIC_GROUND 1 //#define PRINT_CONTACT_STATISTICS 1 -//#define REGISTER_CUSTOM_COLLISION_ALGORITHM 1 -//#define REGISTER_BOX_BOX 1 //needs to be used in combination with REGISTER_CUSTOM_COLLISION_ALGORITHM +#define REGISTER_CUSTOM_COLLISION_ALGORITHM 1 +#define REGISTER_BOX_BOX 1 //needs to be used in combination with REGISTER_CUSTOM_COLLISION_ALGORITHM //#define USER_DEFINED_FRICTION_MODEL 1 //#define USE_CUSTOM_NEAR_CALLBACK 1 //#define CENTER_OF_MASS_SHIFT 1 @@ -121,13 +121,13 @@ btCollisionShape* shapePtr[numShapes] = #ifdef DO_BENCHMARK_PYRAMIDS new btBoxShape (btVector3(CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS)), #else - new btCylinderShape (btVector3(CUBE_HALF_EXTENTS-gCollisionMargin,CUBE_HALF_EXTENTS-gCollisionMargin,CUBE_HALF_EXTENTS-gCollisionMargin)), + //new btCylinderShape (btVector3(CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS)), #endif //new btSphereShape (CUBE_HALF_EXTENTS), - //new btCapsuleShape(0.5*CUBE_HALF_EXTENTS-gCollisionMargin,CUBE_HALF_EXTENTS-gCollisionMargin), + //new btCapsuleShape(0.5*CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS), //new btCylinderShape (btVector3(1-gCollisionMargin,CUBE_HALF_EXTENTS-gCollisionMargin,1-gCollisionMargin)), - //new btConeShape(CUBE_HALF_EXTENTS-gCollisionMargin,2.f*CUBE_HALF_EXTENTS-gCollisionMargin), + new btConeShapeX(CUBE_HALF_EXTENTS,2.f*CUBE_HALF_EXTENTS), new btSphereShape (CUBE_HALF_EXTENTS), @@ -446,7 +446,9 @@ int maxNumOutstandingTasks = 4;//number of maximum outstanding tasks solver->setSolverMode(btSequentialImpulseConstraintSolver::SOLVER_RANDMIZE_ORDER); #endif //USER_DEFINED_FRICTION_MODEL - m_dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,solver); + btDiscreteDynamicsWorld* world = new btDiscreteDynamicsWorld(dispatcher,broadphase,solver); + m_dynamicsWorld = world; +// world->getSolverInfo().m_numIterations = 4; m_dynamicsWorld->getDispatchInfo().m_enableSPU = true; m_dynamicsWorld->setGravity(btVector3(0,-10,0)); diff --git a/Demos/ConcaveDemo/ConcavePhysicsDemo.cpp b/Demos/ConcaveDemo/ConcavePhysicsDemo.cpp index 9ffe47e8c..fa00eb84e 100644 --- a/Demos/ConcaveDemo/ConcavePhysicsDemo.cpp +++ b/Demos/ConcaveDemo/ConcavePhysicsDemo.cpp @@ -286,8 +286,8 @@ btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollision { for (int i=0;i<10;i++) { - //btCollisionShape* colShape = new btBoxShape(btVector3(1,1,1)); - btCollisionShape* colShape = new btCapsuleShape(0.5,2.0);//boxShape = new btSphereShape(1.f); + btCollisionShape* colShape = new btBoxShape(btVector3(1,1,1)); + //btCollisionShape* colShape = new btCapsuleShape(0.5,2.0);//boxShape = new btSphereShape(1.f); startTransform.setOrigin(btVector3(2*i,10,1)); localCreateRigidBody(1, startTransform,colShape); } diff --git a/Demos/OpenGL/GL_ShapeDrawer.cpp b/Demos/OpenGL/GL_ShapeDrawer.cpp index 922d86c4e..f10302401 100644 --- a/Demos/OpenGL/GL_ShapeDrawer.cpp +++ b/Demos/OpenGL/GL_ShapeDrawer.cpp @@ -363,7 +363,7 @@ void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, cons case BOX_SHAPE_PROXYTYPE: { const btBoxShape* boxShape = static_cast(shape); - btVector3 halfExtent = boxShape->getHalfExtents(); + btVector3 halfExtent = boxShape->getHalfExtentsWithMargin(); glScaled(2*halfExtent[0], 2*halfExtent[1], 2*halfExtent[2]); glutSolidCube(1.0); useWireframeFallback = false; @@ -412,9 +412,24 @@ void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, cons case CONE_SHAPE_PROXYTYPE: { const btConeShape* coneShape = static_cast(shape); + int upIndex = coneShape->getConeUpIndex(); float radius = coneShape->getRadius();//+coneShape->getMargin(); float height = coneShape->getHeight();//+coneShape->getMargin(); - //glRotatef(-90.0, 1.0, 0.0, 0.0); + switch (upIndex) + { + case 0: + glRotatef(90.0, 0.0, 1.0, 0.0); + break; + case 1: + glRotatef(-90.0, 1.0, 0.0, 0.0); + break; + case 2: + break; + default: + { + } + }; + glTranslatef(0.0, 0.0, -0.5*height); glutSolidCone(radius,height,10,10); useWireframeFallback = false; @@ -435,7 +450,7 @@ void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, cons float radius = cylinder->getRadius(); - float halfHeight = cylinder->getHalfExtents()[upAxis]; + float halfHeight = cylinder->getHalfExtentsWithMargin()[upAxis]; drawCylinder(radius,halfHeight,upAxis); diff --git a/Extras/AlternativeCollisionAlgorithms/BoxBoxDetector.cpp b/Extras/AlternativeCollisionAlgorithms/BoxBoxDetector.cpp index b519df395..72c26cb46 100644 --- a/Extras/AlternativeCollisionAlgorithms/BoxBoxDetector.cpp +++ b/Extras/AlternativeCollisionAlgorithms/BoxBoxDetector.cpp @@ -412,10 +412,13 @@ int dBoxBox2 (const btVector3& p1, const dMatrix3 R1, //contact[0].depth = *depth; btVector3 pointInWorld; +#ifdef USE_CENTER_POINT for (i=0; i<3; i++) pointInWorld[i] = (pa[i]+pb[i])*btScalar(0.5); output.addContactPoint(-normal,pointInWorld,-*depth); - +#else + output.addContactPoint(-normal,pb,-*depth); +#endif // *return_code = code; } return 1; @@ -668,10 +671,10 @@ void BoxBoxDetector::getClosestPoints(const ClosestPointInput& input,Result& out dBoxBox2 (transformA.getOrigin(), R1, - 2.f*m_box1->getHalfExtents(), + 2.f*m_box1->getHalfExtentsWithMargin(), transformB.getOrigin(), R2, - 2.f*m_box2->getHalfExtents(), + 2.f*m_box2->getHalfExtentsWithMargin(), normal, &depth, &return_code, maxc, contact, skip, output diff --git a/Extras/quickstep/OdeConstraintSolver.cpp b/Extras/quickstep/OdeConstraintSolver.cpp index 3650aad62..93ba1e95e 100644 --- a/Extras/quickstep/OdeConstraintSolver.cpp +++ b/Extras/quickstep/OdeConstraintSolver.cpp @@ -58,15 +58,6 @@ class BU_Joint; //see below //to bridge with ODE quickstep, we make a temp copy of the rigidbodies in each simultion island -// Remotion 10.10.07: we do not need thi any more! -//#define ODE_MAX_SOLVER_BODIES 16384 -//#define ODE_MAX_SOLVER_JOINTS 65535 -//static OdeSolverBody gSolverBodyArray[ODE_MAX_SOLVER_BODIES]; -//static ContactJoint gJointArray[ODE_MAX_SOLVER_JOINTS]; -//static OdeTypedJoint gTypedJointArray[ODE_MAX_SOLVER_JOINTS]; - - - OdeConstraintSolver::OdeConstraintSolver(): m_cfm(0.f),//1e-5f), @@ -84,7 +75,6 @@ btScalar OdeConstraintSolver::solveGroup(btCollisionObject** bodies,int numBulle m_CurJoint = 0; m_CurTypedJoint = 0; - // Remotion 10.10.07: to be sure just find max_contacts int max_contacts = 0; /// should be 4 //Remotion for (int j=0;jrefreshContactPoints(((btRigidBody*)manifold->getBody0())->getCenterOfMassTransform(), ((btRigidBody*)manifold->getBody1())->getCenterOfMassTransform()); -#endif //FORCE_REFESH_CONTACT_MANIFOLDS int bodyId0 = _bodyId0,bodyId1 = _bodyId1; diff --git a/Extras/quickstep/OdeConstraintSolver.h b/Extras/quickstep/OdeConstraintSolver.h index fea7c19f3..1d246ab11 100644 --- a/Extras/quickstep/OdeConstraintSolver.h +++ b/Extras/quickstep/OdeConstraintSolver.h @@ -22,6 +22,7 @@ subject to the following restrictions: #include "OdeContactJoint.h" #include "OdeTypedJoint.h" #include "OdeSolverBody.h" +#include "SorLcp.h" class btRigidBody; struct OdeSolverBody; @@ -39,6 +40,8 @@ private: float m_cfm; float m_erp; + SorLcpSolver m_SorLcpSolver; + btAlignedObjectArray m_odeBodies; btAlignedObjectArray m_joints; @@ -47,6 +50,7 @@ private: btAlignedObjectArray m_TypedJointArray; +private: int ConvertBody(btRigidBody* body,btAlignedObjectArray< OdeSolverBody*> &bodies,int& numBodies); void ConvertConstraint(btPersistentManifold* manifold, btAlignedObjectArray &joints,int& numJoints, @@ -80,8 +84,19 @@ public: m_erp = erp; } + ///clear internal cached data and reset random seed void reset() { + m_SorLcpSolver.dRand2_seed = 0; + } + + void setRandSeed(unsigned long seed) + { + m_SorLcpSolver.dRand2_seed = seed; + } + unsigned long getRandSeed() const + { + return m_SorLcpSolver.dRand2_seed; } }; diff --git a/Extras/quickstep/OdeMacros.h b/Extras/quickstep/OdeMacros.h index 658a07465..430679010 100644 --- a/Extras/quickstep/OdeMacros.h +++ b/Extras/quickstep/OdeMacros.h @@ -93,6 +93,7 @@ do { \ (A)[8] op dDOT1((B+8),(C)); \ (A)[9] op dDOT1((B+8),(C+4)); \ (A)[10] op dDOT1((B+8),(C+8)); + #define dMULTIPLYOP0_333(A,op,B,C) \ (A)[0] op dDOT14((B),(C)); \ (A)[1] op dDOT14((B),(C+1)); \ @@ -119,52 +120,30 @@ do { \ #define dALLOCA16(n) \ ((char*)dEFFICIENT_SIZE(((size_t)(alloca((n)+(EFFICIENT_ALIGNMENT-1)))))) - - -///////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////// - -#ifdef DEBUG -#define ANSI_FTOL 1 - -extern "C" { - __declspec(naked) void _ftol2() { - __asm { -#if ANSI_FTOL - fnstcw WORD PTR [esp-2] - mov ax, WORD PTR [esp-2] - - OR AX, 0C00h - - mov WORD PTR [esp-4], ax - fldcw WORD PTR [esp-4] - fistp QWORD PTR [esp-12] - fldcw WORD PTR [esp-2] - mov eax, DWORD PTR [esp-12] - mov edx, DWORD PTR [esp-8] -#else - fistp DWORD PTR [esp-12] - mov eax, DWORD PTR [esp-12] - mov ecx, DWORD PTR [esp-8] -#endif - ret - } - } -} -#endif //DEBUG - - - - - - -#define ALLOCA dALLOCA16 +//#define ALLOCA dALLOCA16 typedef const btScalar *dRealPtr; typedef btScalar *dRealMutablePtr; -#define dRealArray(name,n) btScalar name[n]; -#define dRealAllocaArray(name,n) btScalar *name = (btScalar*) ALLOCA ((n)*sizeof(btScalar)); +//#define dRealArray(name,n) btScalar name[n]; +//#define dRealAllocaArray(name,n) btScalar *name = (btScalar*) ALLOCA ((n)*sizeof(btScalar)); +/////////////////////////////////////////////////////////////////////////////// + + //Remotion: 10.10.2007 +#define ALLOCA(size) stackAlloc->allocate( dEFFICIENT_SIZE(size) ); + +//#define dRealAllocaArray(name,size) btScalar *name = (btScalar*) stackAlloc->allocate(dEFFICIENT_SIZE(size)*sizeof(btScalar)); +#define dRealAllocaArray(name,size) btScalar *name = NULL; \ + int memNeeded_##name = dEFFICIENT_SIZE(size)*sizeof(btScalar); \ + if (memNeeded_##name < stackAlloc->getAvailableMemory()) name = (btScalar*) stackAlloc->allocate(memNeeded_##name); \ + else{ btAssert(memNeeded_##name < stackAlloc->getAvailableMemory()); name = (btScalar*) alloca(memNeeded_##name); } + + + + + +/////////////////////////////////////////////////////////////////////////////// +#if 0 inline void dSetZero1 (btScalar *a, int n) { dAASSERT (a && n >= 0); @@ -182,6 +161,76 @@ inline void dSetValue1 (btScalar *a, int n, btScalar value) n--; } } +#else + +/// This macros are for MSVC and XCode compilers. Remotion. + +#if _MSC_VER //Visual Studio Win32, Win64 + #include // SSE + #include // SSE2 + #include // SSE3 + + #define __USE_SSE__ + +/* + #ifdef _WIN64 + typedef unsigned __int64 size_t; + #else + typedef unsigned int size_t; + #endif +*/ +#elif __GNUC__ // XCode GCC + #if defined(__ppc__) || defined(__ppc64__) // Mac PPC + ///PPC or PPC64 Mac no SSE support + #elif defined(__i386__) // Intel Mac with SSE support + #include // SSE + #include // SSE2 + #include // SSE3 + #define __USE_SSE__ + #endif + #include +#endif + + +//Remotion: 10.10.2007 +//------------------------------------------------------------------------------ +#define IS_ALIGNED_16(x) ((size_t(x)&15)==0) +//------------------------------------------------------------------------------ +inline void dSetZero1 (btScalar *dest, int size) +{ + dAASSERT (dest && size >= 0); + memset(dest, 0, size * sizeof(btScalar)); +} +//------------------------------------------------------------------------------ +inline void dSetValue1 (btScalar *dest, int size, btScalar val) +{ + dAASSERT (dest && size >= 0); + int n_mod4 = size & 3; + int n4 = size - n_mod4; +#ifdef __USE_SSE__ + if(IS_ALIGNED_16(dest)){ + __m128 xmm0 = _mm_set_ps1(val); + for (int i=0; i &body, dRealPtr invI) @@ -183,8 +176,7 @@ static void multiply_invM_JT (int m, int nb, dRealMutablePtr iMJ, int *jb, // compute out = J*in. - -static void multiply_J (int m, dRealMutablePtr J, int *jb, +inline void multiply_J (int m, dRealMutablePtr J, int *jb, dRealMutablePtr in, dRealMutablePtr out) { int i,j; @@ -218,35 +210,25 @@ static void multiply_J (int m, dRealMutablePtr J, int *jb, // // b, lo and hi are modified on exit - -struct IndexError { +//------------------------------------------------------------------------------ +ATTRIBUTE_ALIGNED16(struct) IndexError { btScalar error; // error to sort on int findex; int index; // row index }; -static unsigned long seed2 = 0; - -unsigned long dRand2() -{ - seed2 = (1664525L*seed2 + 1013904223L) & 0xffffffff; - return seed2; -} - -int dRandInt2 (int n) -{ - float a = float(n) / 4294967296.0f; - return (int) (float(dRand2()) * a); -} - - -static void SOR_LCP (int m, int nb, dRealMutablePtr J, int *jb, - //OdeSolverBody * const *body, +//------------------------------------------------------------------------------ +void SorLcpSolver::SOR_LCP(int m, int nb, dRealMutablePtr J, int *jb, const btAlignedObjectArray &body, dRealPtr invI, dRealMutablePtr lambda, dRealMutablePtr invMforce, dRealMutablePtr rhs, dRealMutablePtr lo, dRealMutablePtr hi, dRealPtr cfm, int *findex, - int numiter,float overRelax) + int numiter,float overRelax, + btStackAlloc* stackAlloc + ) { + //btBlock* saBlock = stackAlloc->beginBlock();//Remo: 10.10.2007 + AutoBlockSa asaBlock(stackAlloc); + const int num_iterations = numiter; const float sor_w = overRelax; // SOR over-relaxation parameter @@ -310,7 +292,9 @@ static void SOR_LCP (int m, int nb, dRealMutablePtr J, int *jb, Ad[i] *= cfm[i]; // order to solve constraint rows in - IndexError *order = (IndexError*) alloca (m*sizeof(IndexError)); + //IndexError *order = (IndexError*) alloca (m*sizeof(IndexError)); + IndexError *order = (IndexError*) ALLOCA (m*sizeof(IndexError)); + #ifndef REORDER_CONSTRAINTS // make sure constraints with findex < 0 come first. @@ -455,24 +439,20 @@ static void SOR_LCP (int m, int nb, dRealMutablePtr J, int *jb, } } } + //stackAlloc->endBlock(saBlock);//Remo: 10.10.2007 } - -/* -void SolveInternal1 (float global_cfm, - float global_erp, - OdeSolverBody* const *body, int nb, - BU_Joint **joint, - int nj, - const btContactSolverInfo& solverInfo) -*/ -void SolveInternal1 ( +//------------------------------------------------------------------------------ +void SorLcpSolver::SolveInternal1 ( float global_cfm, float global_erp, const btAlignedObjectArray &body, int nb, btAlignedObjectArray &joint, - int nj, const btContactSolverInfo& solverInfo) + int nj, const btContactSolverInfo& solverInfo, + btStackAlloc* stackAlloc) { + //btBlock* saBlock = stackAlloc->beginBlock();//Remo: 10.10.2007 + AutoBlockSa asaBlock(stackAlloc); int numIter = solverInfo.m_numIterations; float sOr = solverInfo.m_sor; @@ -529,7 +509,8 @@ void SolveInternal1 ( // joints with m=0 are inactive and are removed from the joints array // entirely, so that the code that follows does not consider them. //@@@ do we really need to save all the info1's - BU_Joint::Info1 *info = (BU_Joint::Info1*) alloca (nj*sizeof(BU_Joint::Info1)); + BU_Joint::Info1 *info = (BU_Joint::Info1*) ALLOCA (nj*sizeof(BU_Joint::Info1)); + for (i=0, j=0; jGetInfo1 (info+i); dIASSERT (info[i].m >= 0 && info[i].m <= 6 && info[i].nub >= 0 && info[i].nub <= info[i].m); @@ -542,7 +523,7 @@ void SolveInternal1 ( // create the row offset array int m = 0; - int *ofs = (int*) alloca (nj*sizeof(int)); + int *ofs = (int*) ALLOCA (nj*sizeof(int)); for (i=0; i 0) { // create a constraint equation right hand side vector `c', a constraint // force mixing vector `cfm', and LCP low and high bound vectors, and an @@ -559,7 +540,9 @@ void SolveInternal1 ( dRealAllocaArray (cfm,m); dRealAllocaArray (lo,m); dRealAllocaArray (hi,m); - int *findex = (int*) alloca (m*sizeof(int)); + + int *findex = (int*) ALLOCA (m*sizeof(int)); + dSetZero1 (c,m); dSetValue1 (cfm,m,global_cfm); dSetValue1 (lo,m,-dInfinity); @@ -599,9 +582,6 @@ void SolveInternal1 ( if (Jinfo.c[0] > solverInfo.m_maxErrorReduction) Jinfo.c[0] = solverInfo.m_maxErrorReduction; - - - // adjust returned findex values for global index numbering for (j=0; j= 0) @@ -657,7 +637,8 @@ void SolveInternal1 ( // solve the LCP problem and get lambda and invM*constraint_force dRealAllocaArray (cforce,nb*6); - SOR_LCP (m,nb,J,jb,body,invI,lambda,cforce,rhs,lo,hi,cfm,findex,numIter,sOr); + /// SOR_LCP + SOR_LCP (m,nb,J,jb,body,invI,lambda,cforce,rhs,lo,hi,cfm,findex,numIter,sOr,stackAlloc); #ifdef WARM_STARTING // save lambda for the next iteration @@ -668,10 +649,8 @@ void SolveInternal1 ( } #endif - // note that the SOR method overwrites rhs and J at this point, so // they should not be used again. - // add stepsize * cforce to the body velocity for (i=0; im_invMass; btVector3 linvel = body[i]->m_linearVelocity; @@ -703,7 +679,7 @@ void SolveInternal1 ( dMULTIPLY0_331NEW(angvel,+=,invI + i*12,body[i]->m_tacc); body[i]->m_angularVelocity = angvel; } - + //stackAlloc->endBlock(saBlock);//Remo: 10.10.2007 } diff --git a/Extras/quickstep/SorLcp.h b/Extras/quickstep/SorLcp.h index 2b2f928c5..f2d8b7618 100644 --- a/Extras/quickstep/SorLcp.h +++ b/Extras/quickstep/SorLcp.h @@ -29,23 +29,85 @@ struct OdeSolverBody; class BU_Joint; #include "LinearMath/btScalar.h" #include "LinearMath/btAlignedObjectArray.h" +#include "LinearMath/btStackAlloc.h" struct btContactSolverInfo; -/* -void SolveInternal1 (float global_cfm, - float global_erp, - OdeSolverBody * const *body, int nb, - BU_Joint **_joint, int nj, const btContactSolverInfo& info); -*/ - -void SolveInternal1 (float global_cfm, - float global_erp, - const btAlignedObjectArray &body, int nb, - btAlignedObjectArray &joint, - int nj, const btContactSolverInfo& solverInfo); -int dRandInt2 (int n); +//============================================================================= +class SorLcpSolver //Remotion: 11.10.2007 +{ +public: + SorLcpSolver() + { + dRand2_seed = 0; + } + + void SolveInternal1 (float global_cfm, + float global_erp, + const btAlignedObjectArray &body, int nb, + btAlignedObjectArray &joint, + int nj, const btContactSolverInfo& solverInfo, + btStackAlloc* stackAlloc + ); + +public: //data + unsigned long dRand2_seed; + +protected: //typedef + typedef const btScalar *dRealPtr; + typedef btScalar *dRealMutablePtr; + +protected: //members + //------------------------------------------------------------------------------ + SIMD_FORCE_INLINE unsigned long dRand2() + { + dRand2_seed = (1664525L*dRand2_seed + 1013904223L) & 0xffffffff; + return dRand2_seed; + } + //------------------------------------------------------------------------------ + SIMD_FORCE_INLINE int dRandInt2 (int n) + { + float a = float(n) / 4294967296.0f; + return (int) (float(dRand2()) * a); + } + //------------------------------------------------------------------------------ + void SOR_LCP(int m, int nb, dRealMutablePtr J, int *jb, + const btAlignedObjectArray &body, + dRealPtr invI, dRealMutablePtr lambda, dRealMutablePtr invMforce, dRealMutablePtr rhs, + dRealMutablePtr lo, dRealMutablePtr hi, dRealPtr cfm, int *findex, + int numiter,float overRelax, + btStackAlloc* stackAlloc + ); +}; + + +//============================================================================= +class AutoBlockSa //Remotion: 10.10.2007 +{ + btStackAlloc* stackAlloc; + btBlock* saBlock; +public: + AutoBlockSa(btStackAlloc* stackAlloc_) + { + stackAlloc = stackAlloc_; + saBlock = stackAlloc->beginBlock(); + } + ~AutoBlockSa() + { + stackAlloc->endBlock(saBlock); + } + //operator btBlock* () { return saBlock; } +}; +// //Usage +//void function(btStackAlloc* stackAlloc) +//{ +// AutoBlockSa(stackAlloc); +// ... +// if(...) return; +// return; +//} +//------------------------------------------------------------------------------ #endif //SOR_LCP_H diff --git a/msvc/8/appBasicDemo.vcproj b/msvc/8/appBasicDemo.vcproj index 99aff97f2..029145dfa 100644 --- a/msvc/8/appBasicDemo.vcproj +++ b/msvc/8/appBasicDemo.vcproj @@ -1,324 +1,455 @@ - + + > + Name="Win32" + /> + + + > + + + + + + SuppressStartupBanner="true" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="3" + CompileAs="0" + /> - - - - - - + Name="VCManagedResourceCompilerTool" + /> + /> + Name="VCPreLinkEventTool" + /> + Name="VCLinkerTool" + IgnoreImportLibrary="true" + AdditionalOptions=" " + AdditionalDependencies="glut32.lib" + OutputFile="..\..\ReleaseBasicDemo.exe" + LinkIncremental="1" + SuppressStartupBanner="true" + AdditionalLibraryDirectories="..\..\Glut" + GenerateManifest="false" + IgnoreDefaultLibraryNames="LIBC,LIBCD" + GenerateDebugInformation="true" + ProgramDatabaseFile="..\..\out\release8\build\appBasicDemo\BasicDemo.pdb" + SubSystem="1" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1" + /> + + + + + + + + + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + + + + + + SuppressStartupBanner="true" + Detect64BitPortabilityProblems="true" + CompileAs="0" + /> - - - - - - + Name="VCManagedResourceCompilerTool" + /> + /> + Name="VCPreLinkEventTool" + /> + Name="VCLinkerTool" + IgnoreImportLibrary="true" + AdditionalOptions=" " + AdditionalDependencies="glut32.lib" + OutputFile="..\..\ReleaseDblBasicDemo.exe" + SuppressStartupBanner="true" + AdditionalLibraryDirectories="..\..\Glut" + GenerateManifest="false" + ProgramDatabaseFile="..\..\out\release_dbl8\build\appBasicDemo\BasicDemo.pdb" + SubSystem="1" + TargetMachine="1" + /> + + + + + + + + + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + + + + + + SuppressStartupBanner="true" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="4" + CompileAs="0" + /> - - - - - - + Name="VCManagedResourceCompilerTool" + /> + /> + Name="VCPreLinkEventTool" + /> + Name="VCLinkerTool" + IgnoreImportLibrary="true" + AdditionalOptions=" " + AdditionalDependencies="glut32.lib" + OutputFile="..\..\DebugBasicDemo.exe" + LinkIncremental="2" + SuppressStartupBanner="true" + AdditionalLibraryDirectories="..\..\Glut" + GenerateManifest="false" + IgnoreDefaultLibraryNames="LIBC,LIBCD" + GenerateDebugInformation="true" + ProgramDatabaseFile="..\..\out\debug8\build\appBasicDemo\BasicDemo.pdb" + SubSystem="1" + TargetMachine="1" + /> + + + + + + + + + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + + + + + + SuppressStartupBanner="true" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="4" + CompileAs="0" + /> - - - - - - + Name="VCManagedResourceCompilerTool" + /> + /> + Name="VCPreLinkEventTool" + /> + Name="VCLinkerTool" + IgnoreImportLibrary="true" + AdditionalOptions=" " + AdditionalDependencies="glut32.lib" + OutputFile="..\..\DebugDblBasicDemo.exe" + SuppressStartupBanner="true" + AdditionalLibraryDirectories="..\..\Glut" + GenerateManifest="false" + ProgramDatabaseFile="..\..\out\debug_dbl8\build\appBasicDemo\BasicDemo.pdb" + SubSystem="1" + TargetMachine="1" + /> + + + + + + + + + + - - + > + > + RelativePath="..\..\Demos\BasicDemo\BasicDemo.h" + > + > + RelativePath="..\..\msvc\appBasicDemo.rc" + > + + + + diff --git a/msvc/8/libbulletopenglsupport.vcproj b/msvc/8/libbulletopenglsupport.vcproj index 82621f64f..f083a6eda 100644 --- a/msvc/8/libbulletopenglsupport.vcproj +++ b/msvc/8/libbulletopenglsupport.vcproj @@ -1,15 +1,17 @@ - + + > + Name="Win32" + /> + + + ATLMinimizesCRunTimeLibraryUsage="false" + > + + + + + + SuppressStartupBanner="true" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="3" + CompileAs="0" + /> - - - - - - + Name="VCManagedResourceCompilerTool" + /> + /> + Name="VCPreLinkEventTool" + /> + Name="VCLibrarianTool" + OutputFile="..\..\out\release8\libs\libbulletopenglsupport.lib" + SuppressStartupBanner="true" + /> + + + + + + ATLMinimizesCRunTimeLibraryUsage="false" + > + + + + + + SuppressStartupBanner="true" + Detect64BitPortabilityProblems="true" + CompileAs="0" + /> - - - - - - + Name="VCManagedResourceCompilerTool" + /> + /> + Name="VCPreLinkEventTool" + /> + Name="VCLibrarianTool" + SuppressStartupBanner="true" + /> + + + + + + ATLMinimizesCRunTimeLibraryUsage="false" + > + + + + + + SuppressStartupBanner="true" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="4" + CompileAs="0" + /> - - - - - - + Name="VCManagedResourceCompilerTool" + /> + /> + Name="VCPreLinkEventTool" + /> + Name="VCLibrarianTool" + OutputFile="..\..\out\debug8\libs\libbulletopenglsupport_d.lib" + SuppressStartupBanner="true" + /> + + + + + + ATLMinimizesCRunTimeLibraryUsage="false" + > + + + + + + SuppressStartupBanner="true" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="4" + CompileAs="0" + /> - - - - - - + Name="VCManagedResourceCompilerTool" + /> + /> + Name="VCPreLinkEventTool" + /> + Name="VCLibrarianTool" + SuppressStartupBanner="true" + /> + + + + + + + + > + RelativePath="..\..\Demos\OpenGL\BMF_Api.cpp" + > + RelativePath="..\..\Demos\OpenGL\BMF_BitmapFont.cpp" + > + RelativePath="..\..\Demos\OpenGL\BMF_font_helv10.cpp" + > + RelativePath="..\..\Demos\OpenGL\DemoApplication.cpp" + > + RelativePath="..\..\Demos\OpenGL\GL_ShapeDrawer.cpp" + > + RelativePath="..\..\Demos\OpenGL\GL_Simplex1to4.cpp" + > + RelativePath="..\..\Demos\OpenGL\GLDebugDrawer.cpp" + > + RelativePath="..\..\Demos\OpenGL\GlutStuff.cpp" + > + RelativePath="..\..\Demos\OpenGL\RenderTexture.cpp" + > + > + RelativePath="..\..\Demos\OpenGL\BMF_Api.h" + > + RelativePath="..\..\Demos\OpenGL\BMF_BitmapFont.h" + > + RelativePath="..\..\Demos\OpenGL\BMF_FontData.h" + > + RelativePath="..\..\Demos\OpenGL\BMF_Fonts.h" + > + RelativePath="..\..\Demos\OpenGL\BMF_Settings.h" + > + RelativePath="..\..\Demos\OpenGL\DebugCastResult.h" + > + RelativePath="..\..\Demos\OpenGL\DemoApplication.h" + > + RelativePath="..\..\Demos\OpenGL\GL_ShapeDrawer.h" + > + RelativePath="..\..\Demos\OpenGL\GL_Simplex1to4.h" + > + RelativePath="..\..\Demos\OpenGL\GLDebugDrawer.h" + > + RelativePath="..\..\Demos\OpenGL\GlutStuff.h" + > + RelativePath="..\..\Demos\OpenGL\RenderTexture.h" + > diff --git a/msvc/8/wksbullet.sln b/msvc/8/wksbullet.sln index 494610db1..9f9be1200 100644 --- a/msvc/8/wksbullet.sln +++ b/msvc/8/wksbullet.sln @@ -1,56 +1,275 @@ Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual C++ Express 2005 +# Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appBasicDemo", "appBasicDemo.vcproj", "{3578834A-4B06-DE6F-78AC-FE11F7226D35}" + ProjectSection(ProjectDependencies) = postProject + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + {B6257B39-1C3C-09FF-BD85-AAC75B140A19} = {B6257B39-1C3C-09FF-BD85-AAC75B140A19} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appBspDemo", "appBspDemo.vcproj", "{255A379C-F159-5362-4024-D5ADB9F5FBD2}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appBulletDino", "appBulletDino.vcproj", "{2707A1D2-F23C-0C78-B99B-AA148865D6DD}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCcdPhysicsDemo", "appCcdPhysicsDemo.vcproj", "{7284F809-AF30-6315-88C6-86F1C0798760}" + ProjectSection(ProjectDependencies) = postProject + {B6257B39-1C3C-09FF-BD85-AAC75B140A19} = {B6257B39-1C3C-09FF-BD85-AAC75B140A19} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + {D7036964-B44D-8207-0ACC-D838D0BDA379} = {D7036964-B44D-8207-0ACC-D838D0BDA379} + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appColladaDemo", "appColladaDemo.vcproj", "{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}" + ProjectSection(ProjectDependencies) = postProject + {A0958CD9-0E39-4A77-3711-9B488F508FBF} = {A0958CD9-0E39-4A77-3711-9B488F508FBF} + {6AB01C9C-9163-F400-B5C3-20D046631E17} = {6AB01C9C-9163-F400-B5C3-20D046631E17} + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCollisionDemo", "appCollisionDemo.vcproj", "{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCollisionInterfaceDemo", "appCollisionInterfaceDemo.vcproj", "{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConcaveDemo", "appConcaveDemo.vcproj", "{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConstraintDemo", "appConstraintDemo.vcproj", "{DAA547D0-0166-C085-0F93-B88CAB800F97}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appContinuousConvexCollision", "appContinuousConvexCollision.vcproj", "{801CB6D4-A45C-C9D2-B176-9711A74B9164}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConvexDecompositionDemo", "appConvexDecompositionDemo.vcproj", "{69C821C7-1E18-D894-068D-C55E063F4859}" + ProjectSection(ProjectDependencies) = postProject + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appDoublePrecisionDemo", "appDoublePrecisionDemo.vcproj", "{E2707D44-8B82-55F1-6C5A-D03B19159248}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appEPAPenDepthDemo", "appEPAPenDepthDemo.vcproj", "{1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}" + ProjectSection(ProjectDependencies) = postProject + {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} = {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appGenericJointDemo", "appGenericJointDemo.vcproj", "{33C16464-831E-103A-5F37-65CCD4F9191F}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appGimpactTestDemo", "appGimpactTestDemo.vcproj", "{12B291F0-1880-AFC5-26E1-26DF78EA6D2E}" + ProjectSection(ProjectDependencies) = postProject + {B1B5F775-54A9-2437-E4AC-7E817E492142} = {B1B5F775-54A9-2437-E4AC-7E817E492142} + {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} = {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appGjkConvexCastDemo", "appGjkConvexCastDemo.vcproj", "{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appGPUphysics", "appGPUphysics.vcproj", "{385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appMovingConcaveDemo", "appMovingConcaveDemo.vcproj", "{2D714360-B8EC-F8E0-ED74-E95336301075}" + ProjectSection(ProjectDependencies) = postProject + {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} = {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appRagdollDemo", "appRagdollDemo.vcproj", "{EFEF2072-51F9-DAE8-AC38-3E653C680F74}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appRaytracer", "appRaytracer.vcproj", "{60F71B6A-F888-C449-EF49-268BB9F7C963}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appSimplexDemo", "appSimplexDemo.vcproj", "{60A1DC9D-F837-3923-E9DE-A7925394A578}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appUserCollisionAlgorithm", "appUserCollisionAlgorithm.vcproj", "{330B5049-6935-5CE6-79B7-28F570962895}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appVehicleDemo", "appVehicleDemo.vcproj", "{07E712DB-DAF8-887E-F099-CE43D4E8B1F9}" + ProjectSection(ProjectDependencies) = postProject + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpall_bullet", "grpall_bullet.vcproj", "{6210A080-01C0-6D67-F1DB-669393175402}" + ProjectSection(ProjectDependencies) = postProject + {D7036964-B44D-8207-0ACC-D838D0BDA379} = {D7036964-B44D-8207-0ACC-D838D0BDA379} + {A0958CD9-0E39-4A77-3711-9B488F508FBF} = {A0958CD9-0E39-4A77-3711-9B488F508FBF} + {B1B5F775-54A9-2437-E4AC-7E817E492142} = {B1B5F775-54A9-2437-E4AC-7E817E492142} + {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} = {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} + {6AB01C9C-9163-F400-B5C3-20D046631E17} = {6AB01C9C-9163-F400-B5C3-20D046631E17} + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {A24D77FD-D69A-75A0-A7DC-730894C9D0F7} = {A24D77FD-D69A-75A0-A7DC-730894C9D0F7} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + {B6257B39-1C3C-09FF-BD85-AAC75B140A19} = {B6257B39-1C3C-09FF-BD85-AAC75B140A19} + {07E712DB-DAF8-887E-F099-CE43D4E8B1F9} = {07E712DB-DAF8-887E-F099-CE43D4E8B1F9} + {330B5049-6935-5CE6-79B7-28F570962895} = {330B5049-6935-5CE6-79B7-28F570962895} + {60A1DC9D-F837-3923-E9DE-A7925394A578} = {60A1DC9D-F837-3923-E9DE-A7925394A578} + {60F71B6A-F888-C449-EF49-268BB9F7C963} = {60F71B6A-F888-C449-EF49-268BB9F7C963} + {EFEF2072-51F9-DAE8-AC38-3E653C680F74} = {EFEF2072-51F9-DAE8-AC38-3E653C680F74} + {2D714360-B8EC-F8E0-ED74-E95336301075} = {2D714360-B8EC-F8E0-ED74-E95336301075} + {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F} = {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F} + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} = {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} + {12B291F0-1880-AFC5-26E1-26DF78EA6D2E} = {12B291F0-1880-AFC5-26E1-26DF78EA6D2E} + {33C16464-831E-103A-5F37-65CCD4F9191F} = {33C16464-831E-103A-5F37-65CCD4F9191F} + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3} = {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3} + {E2707D44-8B82-55F1-6C5A-D03B19159248} = {E2707D44-8B82-55F1-6C5A-D03B19159248} + {69C821C7-1E18-D894-068D-C55E063F4859} = {69C821C7-1E18-D894-068D-C55E063F4859} + {801CB6D4-A45C-C9D2-B176-9711A74B9164} = {801CB6D4-A45C-C9D2-B176-9711A74B9164} + {DAA547D0-0166-C085-0F93-B88CAB800F97} = {DAA547D0-0166-C085-0F93-B88CAB800F97} + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} = {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B} = {F38629D2-EEB2-1A09-FB82-52B8A8DE759B} + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} = {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} = {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} + {7284F809-AF30-6315-88C6-86F1C0798760} = {7284F809-AF30-6315-88C6-86F1C0798760} + {2707A1D2-F23C-0C78-B99B-AA148865D6DD} = {2707A1D2-F23C-0C78-B99B-AA148865D6DD} + {255A379C-F159-5362-4024-D5ADB9F5FBD2} = {255A379C-F159-5362-4024-D5ADB9F5FBD2} + {3578834A-4B06-DE6F-78AC-FE11F7226D35} = {3578834A-4B06-DE6F-78AC-FE11F7226D35} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpapps_bullet", "grpapps_bullet.vcproj", "{9E59B16D-0924-409C-1611-DF2207A0053F}" + ProjectSection(ProjectDependencies) = postProject + {07E712DB-DAF8-887E-F099-CE43D4E8B1F9} = {07E712DB-DAF8-887E-F099-CE43D4E8B1F9} + {330B5049-6935-5CE6-79B7-28F570962895} = {330B5049-6935-5CE6-79B7-28F570962895} + {60A1DC9D-F837-3923-E9DE-A7925394A578} = {60A1DC9D-F837-3923-E9DE-A7925394A578} + {60F71B6A-F888-C449-EF49-268BB9F7C963} = {60F71B6A-F888-C449-EF49-268BB9F7C963} + {EFEF2072-51F9-DAE8-AC38-3E653C680F74} = {EFEF2072-51F9-DAE8-AC38-3E653C680F74} + {2D714360-B8EC-F8E0-ED74-E95336301075} = {2D714360-B8EC-F8E0-ED74-E95336301075} + {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F} = {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F} + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} = {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} + {12B291F0-1880-AFC5-26E1-26DF78EA6D2E} = {12B291F0-1880-AFC5-26E1-26DF78EA6D2E} + {33C16464-831E-103A-5F37-65CCD4F9191F} = {33C16464-831E-103A-5F37-65CCD4F9191F} + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3} = {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3} + {E2707D44-8B82-55F1-6C5A-D03B19159248} = {E2707D44-8B82-55F1-6C5A-D03B19159248} + {69C821C7-1E18-D894-068D-C55E063F4859} = {69C821C7-1E18-D894-068D-C55E063F4859} + {801CB6D4-A45C-C9D2-B176-9711A74B9164} = {801CB6D4-A45C-C9D2-B176-9711A74B9164} + {DAA547D0-0166-C085-0F93-B88CAB800F97} = {DAA547D0-0166-C085-0F93-B88CAB800F97} + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} = {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B} = {F38629D2-EEB2-1A09-FB82-52B8A8DE759B} + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} = {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} = {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} + {7284F809-AF30-6315-88C6-86F1C0798760} = {7284F809-AF30-6315-88C6-86F1C0798760} + {2707A1D2-F23C-0C78-B99B-AA148865D6DD} = {2707A1D2-F23C-0C78-B99B-AA148865D6DD} + {255A379C-F159-5362-4024-D5ADB9F5FBD2} = {255A379C-F159-5362-4024-D5ADB9F5FBD2} + {3578834A-4B06-DE6F-78AC-FE11F7226D35} = {3578834A-4B06-DE6F-78AC-FE11F7226D35} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grplibs_bullet", "grplibs_bullet.vcproj", "{DFAF0062-4CD7-9AB8-0683-A6026B326F56}" + ProjectSection(ProjectDependencies) = postProject + {D7036964-B44D-8207-0ACC-D838D0BDA379} = {D7036964-B44D-8207-0ACC-D838D0BDA379} + {A0958CD9-0E39-4A77-3711-9B488F508FBF} = {A0958CD9-0E39-4A77-3711-9B488F508FBF} + {B1B5F775-54A9-2437-E4AC-7E817E492142} = {B1B5F775-54A9-2437-E4AC-7E817E492142} + {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} = {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} + {6AB01C9C-9163-F400-B5C3-20D046631E17} = {6AB01C9C-9163-F400-B5C3-20D046631E17} + {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {A24D77FD-D69A-75A0-A7DC-730894C9D0F7} = {A24D77FD-D69A-75A0-A7DC-730894C9D0F7} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} + {B6257B39-1C3C-09FF-BD85-AAC75B140A19} = {B6257B39-1C3C-09FF-BD85-AAC75B140A19} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libboxbox", "libboxbox.vcproj", "{B6257B39-1C3C-09FF-BD85-AAC75B140A19}" EndProject @@ -77,488 +296,319 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libquickstep", "libquickstep.vcproj", "{D7036964-B44D-8207-0ACC-D838D0BDA379}" EndProject Global - GlobalSection(SolutionConfiguration) = preSolution - ConfigName.0 = Release - ConfigName.1 = ReleaseDoublePrecision - ConfigName.2 = Debug - ConfigName.3 = DebugDoublePrecision + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + DebugDoublePrecision|Win32 = DebugDoublePrecision|Win32 + Release|Win32 = Release|Win32 + ReleaseDoublePrecision|Win32 = ReleaseDoublePrecision|Win32 EndGlobalSection - GlobalSection(ProjectDependencies) = postSolution - {3578834A-4B06-DE6F-78AC-FE11F7226D35}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {3578834A-4B06-DE6F-78AC-FE11F7226D35}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {3578834A-4B06-DE6F-78AC-FE11F7226D35}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {3578834A-4B06-DE6F-78AC-FE11F7226D35}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {255A379C-F159-5362-4024-D5ADB9F5FBD2}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {255A379C-F159-5362-4024-D5ADB9F5FBD2}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {255A379C-F159-5362-4024-D5ADB9F5FBD2}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {255A379C-F159-5362-4024-D5ADB9F5FBD2}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {7284F809-AF30-6315-88C6-86F1C0798760}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {7284F809-AF30-6315-88C6-86F1C0798760}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7284F809-AF30-6315-88C6-86F1C0798760}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {7284F809-AF30-6315-88C6-86F1C0798760}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.4 = {6AB01C9C-9163-F400-B5C3-20D046631E17} - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.5 = {A0958CD9-0E39-4A77-3711-9B488F508FBF} - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {DAA547D0-0166-C085-0F93-B88CAB800F97}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {DAA547D0-0166-C085-0F93-B88CAB800F97}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {DAA547D0-0166-C085-0F93-B88CAB800F97}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {DAA547D0-0166-C085-0F93-B88CAB800F97}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {69C821C7-1E18-D894-068D-C55E063F4859}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {69C821C7-1E18-D894-068D-C55E063F4859}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {69C821C7-1E18-D894-068D-C55E063F4859}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {69C821C7-1E18-D894-068D-C55E063F4859}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {69C821C7-1E18-D894-068D-C55E063F4859}.4 = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} - {E2707D44-8B82-55F1-6C5A-D03B19159248}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {E2707D44-8B82-55F1-6C5A-D03B19159248}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {E2707D44-8B82-55F1-6C5A-D03B19159248}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {E2707D44-8B82-55F1-6C5A-D03B19159248}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.4 = {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} - {33C16464-831E-103A-5F37-65CCD4F9191F}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {33C16464-831E-103A-5F37-65CCD4F9191F}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {33C16464-831E-103A-5F37-65CCD4F9191F}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {33C16464-831E-103A-5F37-65CCD4F9191F}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.4 = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.5 = {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.6 = {B1B5F775-54A9-2437-E4AC-7E817E492142} - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {2D714360-B8EC-F8E0-ED74-E95336301075}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {2D714360-B8EC-F8E0-ED74-E95336301075}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {2D714360-B8EC-F8E0-ED74-E95336301075}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {2D714360-B8EC-F8E0-ED74-E95336301075}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {2D714360-B8EC-F8E0-ED74-E95336301075}.4 = {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} - {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {60F71B6A-F888-C449-EF49-268BB9F7C963}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {60F71B6A-F888-C449-EF49-268BB9F7C963}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {60F71B6A-F888-C449-EF49-268BB9F7C963}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {60F71B6A-F888-C449-EF49-268BB9F7C963}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {60A1DC9D-F837-3923-E9DE-A7925394A578}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {60A1DC9D-F837-3923-E9DE-A7925394A578}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {60A1DC9D-F837-3923-E9DE-A7925394A578}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {60A1DC9D-F837-3923-E9DE-A7925394A578}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {330B5049-6935-5CE6-79B7-28F570962895}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {330B5049-6935-5CE6-79B7-28F570962895}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {330B5049-6935-5CE6-79B7-28F570962895}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {330B5049-6935-5CE6-79B7-28F570962895}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.0 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.1 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.2 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.3 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {6210A080-01C0-6D67-F1DB-669393175402}.0 = {3578834A-4B06-DE6F-78AC-FE11F7226D35} - {6210A080-01C0-6D67-F1DB-669393175402}.1 = {255A379C-F159-5362-4024-D5ADB9F5FBD2} - {6210A080-01C0-6D67-F1DB-669393175402}.2 = {2707A1D2-F23C-0C78-B99B-AA148865D6DD} - {6210A080-01C0-6D67-F1DB-669393175402}.3 = {7284F809-AF30-6315-88C6-86F1C0798760} - {6210A080-01C0-6D67-F1DB-669393175402}.4 = {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} - {6210A080-01C0-6D67-F1DB-669393175402}.5 = {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} - {6210A080-01C0-6D67-F1DB-669393175402}.6 = {F38629D2-EEB2-1A09-FB82-52B8A8DE759B} - {6210A080-01C0-6D67-F1DB-669393175402}.7 = {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} - {6210A080-01C0-6D67-F1DB-669393175402}.8 = {DAA547D0-0166-C085-0F93-B88CAB800F97} - {6210A080-01C0-6D67-F1DB-669393175402}.9 = {801CB6D4-A45C-C9D2-B176-9711A74B9164} - {6210A080-01C0-6D67-F1DB-669393175402}.10 = {69C821C7-1E18-D894-068D-C55E063F4859} - {6210A080-01C0-6D67-F1DB-669393175402}.11 = {E2707D44-8B82-55F1-6C5A-D03B19159248} - {6210A080-01C0-6D67-F1DB-669393175402}.12 = {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3} - {6210A080-01C0-6D67-F1DB-669393175402}.13 = {33C16464-831E-103A-5F37-65CCD4F9191F} - {6210A080-01C0-6D67-F1DB-669393175402}.14 = {12B291F0-1880-AFC5-26E1-26DF78EA6D2E} - {6210A080-01C0-6D67-F1DB-669393175402}.15 = {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} - {6210A080-01C0-6D67-F1DB-669393175402}.16 = {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F} - {6210A080-01C0-6D67-F1DB-669393175402}.17 = {2D714360-B8EC-F8E0-ED74-E95336301075} - {6210A080-01C0-6D67-F1DB-669393175402}.18 = {EFEF2072-51F9-DAE8-AC38-3E653C680F74} - {6210A080-01C0-6D67-F1DB-669393175402}.19 = {60F71B6A-F888-C449-EF49-268BB9F7C963} - {6210A080-01C0-6D67-F1DB-669393175402}.20 = {60A1DC9D-F837-3923-E9DE-A7925394A578} - {6210A080-01C0-6D67-F1DB-669393175402}.21 = {330B5049-6935-5CE6-79B7-28F570962895} - {6210A080-01C0-6D67-F1DB-669393175402}.22 = {07E712DB-DAF8-887E-F099-CE43D4E8B1F9} - {6210A080-01C0-6D67-F1DB-669393175402}.23 = {B6257B39-1C3C-09FF-BD85-AAC75B140A19} - {6210A080-01C0-6D67-F1DB-669393175402}.24 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {6210A080-01C0-6D67-F1DB-669393175402}.25 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {6210A080-01C0-6D67-F1DB-669393175402}.26 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {6210A080-01C0-6D67-F1DB-669393175402}.27 = {A24D77FD-D69A-75A0-A7DC-730894C9D0F7} - {6210A080-01C0-6D67-F1DB-669393175402}.28 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {6210A080-01C0-6D67-F1DB-669393175402}.29 = {6AB01C9C-9163-F400-B5C3-20D046631E17} - {6210A080-01C0-6D67-F1DB-669393175402}.30 = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} - {6210A080-01C0-6D67-F1DB-669393175402}.31 = {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} - {6210A080-01C0-6D67-F1DB-669393175402}.32 = {B1B5F775-54A9-2437-E4AC-7E817E492142} - {6210A080-01C0-6D67-F1DB-669393175402}.33 = {A0958CD9-0E39-4A77-3711-9B488F508FBF} - {6210A080-01C0-6D67-F1DB-669393175402}.34 = {D7036964-B44D-8207-0ACC-D838D0BDA379} - {9E59B16D-0924-409C-1611-DF2207A0053F}.0 = {3578834A-4B06-DE6F-78AC-FE11F7226D35} - {9E59B16D-0924-409C-1611-DF2207A0053F}.1 = {255A379C-F159-5362-4024-D5ADB9F5FBD2} - {9E59B16D-0924-409C-1611-DF2207A0053F}.2 = {2707A1D2-F23C-0C78-B99B-AA148865D6DD} - {9E59B16D-0924-409C-1611-DF2207A0053F}.3 = {7284F809-AF30-6315-88C6-86F1C0798760} - {9E59B16D-0924-409C-1611-DF2207A0053F}.4 = {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} - {9E59B16D-0924-409C-1611-DF2207A0053F}.5 = {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} - {9E59B16D-0924-409C-1611-DF2207A0053F}.6 = {F38629D2-EEB2-1A09-FB82-52B8A8DE759B} - {9E59B16D-0924-409C-1611-DF2207A0053F}.7 = {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} - {9E59B16D-0924-409C-1611-DF2207A0053F}.8 = {DAA547D0-0166-C085-0F93-B88CAB800F97} - {9E59B16D-0924-409C-1611-DF2207A0053F}.9 = {801CB6D4-A45C-C9D2-B176-9711A74B9164} - {9E59B16D-0924-409C-1611-DF2207A0053F}.10 = {69C821C7-1E18-D894-068D-C55E063F4859} - {9E59B16D-0924-409C-1611-DF2207A0053F}.11 = {E2707D44-8B82-55F1-6C5A-D03B19159248} - {9E59B16D-0924-409C-1611-DF2207A0053F}.12 = {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3} - {9E59B16D-0924-409C-1611-DF2207A0053F}.13 = {33C16464-831E-103A-5F37-65CCD4F9191F} - {9E59B16D-0924-409C-1611-DF2207A0053F}.14 = {12B291F0-1880-AFC5-26E1-26DF78EA6D2E} - {9E59B16D-0924-409C-1611-DF2207A0053F}.15 = {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} - {9E59B16D-0924-409C-1611-DF2207A0053F}.16 = {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F} - {9E59B16D-0924-409C-1611-DF2207A0053F}.17 = {2D714360-B8EC-F8E0-ED74-E95336301075} - {9E59B16D-0924-409C-1611-DF2207A0053F}.18 = {EFEF2072-51F9-DAE8-AC38-3E653C680F74} - {9E59B16D-0924-409C-1611-DF2207A0053F}.19 = {60F71B6A-F888-C449-EF49-268BB9F7C963} - {9E59B16D-0924-409C-1611-DF2207A0053F}.20 = {60A1DC9D-F837-3923-E9DE-A7925394A578} - {9E59B16D-0924-409C-1611-DF2207A0053F}.21 = {330B5049-6935-5CE6-79B7-28F570962895} - {9E59B16D-0924-409C-1611-DF2207A0053F}.22 = {07E712DB-DAF8-887E-F099-CE43D4E8B1F9} - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.0 = {B6257B39-1C3C-09FF-BD85-AAC75B140A19} - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.1 = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.4 = {A24D77FD-D69A-75A0-A7DC-730894C9D0F7} - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.5 = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.6 = {6AB01C9C-9163-F400-B5C3-20D046631E17} - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.7 = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.8 = {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22} - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.9 = {B1B5F775-54A9-2437-E4AC-7E817E492142} - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.10 = {A0958CD9-0E39-4A77-3711-9B488F508FBF} - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.11 = {D7036964-B44D-8207-0ACC-D838D0BDA379} + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3578834A-4B06-DE6F-78AC-FE11F7226D35}.Debug|Win32.ActiveCfg = Debug|Win32 + {3578834A-4B06-DE6F-78AC-FE11F7226D35}.Debug|Win32.Build.0 = Debug|Win32 + {3578834A-4B06-DE6F-78AC-FE11F7226D35}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {3578834A-4B06-DE6F-78AC-FE11F7226D35}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {3578834A-4B06-DE6F-78AC-FE11F7226D35}.Release|Win32.ActiveCfg = Release|Win32 + {3578834A-4B06-DE6F-78AC-FE11F7226D35}.Release|Win32.Build.0 = Release|Win32 + {3578834A-4B06-DE6F-78AC-FE11F7226D35}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {3578834A-4B06-DE6F-78AC-FE11F7226D35}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {255A379C-F159-5362-4024-D5ADB9F5FBD2}.Debug|Win32.ActiveCfg = Debug|Win32 + {255A379C-F159-5362-4024-D5ADB9F5FBD2}.Debug|Win32.Build.0 = Debug|Win32 + {255A379C-F159-5362-4024-D5ADB9F5FBD2}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {255A379C-F159-5362-4024-D5ADB9F5FBD2}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {255A379C-F159-5362-4024-D5ADB9F5FBD2}.Release|Win32.ActiveCfg = Release|Win32 + {255A379C-F159-5362-4024-D5ADB9F5FBD2}.Release|Win32.Build.0 = Release|Win32 + {255A379C-F159-5362-4024-D5ADB9F5FBD2}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {255A379C-F159-5362-4024-D5ADB9F5FBD2}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.Debug|Win32.ActiveCfg = Debug|Win32 + {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.Debug|Win32.Build.0 = Debug|Win32 + {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.Release|Win32.ActiveCfg = Release|Win32 + {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.Release|Win32.Build.0 = Release|Win32 + {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {7284F809-AF30-6315-88C6-86F1C0798760}.Debug|Win32.ActiveCfg = Debug|Win32 + {7284F809-AF30-6315-88C6-86F1C0798760}.Debug|Win32.Build.0 = Debug|Win32 + {7284F809-AF30-6315-88C6-86F1C0798760}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {7284F809-AF30-6315-88C6-86F1C0798760}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {7284F809-AF30-6315-88C6-86F1C0798760}.Release|Win32.ActiveCfg = Release|Win32 + {7284F809-AF30-6315-88C6-86F1C0798760}.Release|Win32.Build.0 = Release|Win32 + {7284F809-AF30-6315-88C6-86F1C0798760}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {7284F809-AF30-6315-88C6-86F1C0798760}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug|Win32.ActiveCfg = Debug|Win32 + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug|Win32.Build.0 = Debug|Win32 + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release|Win32.ActiveCfg = Release|Win32 + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release|Win32.Build.0 = Release|Win32 + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug|Win32.ActiveCfg = Debug|Win32 + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug|Win32.Build.0 = Debug|Win32 + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release|Win32.ActiveCfg = Release|Win32 + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release|Win32.Build.0 = Release|Win32 + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug|Win32.ActiveCfg = Debug|Win32 + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug|Win32.Build.0 = Debug|Win32 + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release|Win32.ActiveCfg = Release|Win32 + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release|Win32.Build.0 = Release|Win32 + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug|Win32.ActiveCfg = Debug|Win32 + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug|Win32.Build.0 = Debug|Win32 + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release|Win32.ActiveCfg = Release|Win32 + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release|Win32.Build.0 = Release|Win32 + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug|Win32.ActiveCfg = Debug|Win32 + {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug|Win32.Build.0 = Debug|Win32 + {DAA547D0-0166-C085-0F93-B88CAB800F97}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {DAA547D0-0166-C085-0F93-B88CAB800F97}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release|Win32.ActiveCfg = Release|Win32 + {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release|Win32.Build.0 = Release|Win32 + {DAA547D0-0166-C085-0F93-B88CAB800F97}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {DAA547D0-0166-C085-0F93-B88CAB800F97}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug|Win32.ActiveCfg = Debug|Win32 + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug|Win32.Build.0 = Debug|Win32 + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release|Win32.ActiveCfg = Release|Win32 + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release|Win32.Build.0 = Release|Win32 + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {69C821C7-1E18-D894-068D-C55E063F4859}.Debug|Win32.ActiveCfg = Debug|Win32 + {69C821C7-1E18-D894-068D-C55E063F4859}.Debug|Win32.Build.0 = Debug|Win32 + {69C821C7-1E18-D894-068D-C55E063F4859}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {69C821C7-1E18-D894-068D-C55E063F4859}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {69C821C7-1E18-D894-068D-C55E063F4859}.Release|Win32.ActiveCfg = Release|Win32 + {69C821C7-1E18-D894-068D-C55E063F4859}.Release|Win32.Build.0 = Release|Win32 + {69C821C7-1E18-D894-068D-C55E063F4859}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {69C821C7-1E18-D894-068D-C55E063F4859}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {E2707D44-8B82-55F1-6C5A-D03B19159248}.Debug|Win32.ActiveCfg = Debug|Win32 + {E2707D44-8B82-55F1-6C5A-D03B19159248}.Debug|Win32.Build.0 = Debug|Win32 + {E2707D44-8B82-55F1-6C5A-D03B19159248}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {E2707D44-8B82-55F1-6C5A-D03B19159248}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {E2707D44-8B82-55F1-6C5A-D03B19159248}.Release|Win32.ActiveCfg = Release|Win32 + {E2707D44-8B82-55F1-6C5A-D03B19159248}.Release|Win32.Build.0 = Release|Win32 + {E2707D44-8B82-55F1-6C5A-D03B19159248}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {E2707D44-8B82-55F1-6C5A-D03B19159248}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug|Win32.ActiveCfg = Debug|Win32 + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug|Win32.Build.0 = Debug|Win32 + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release|Win32.ActiveCfg = Release|Win32 + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release|Win32.Build.0 = Release|Win32 + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {33C16464-831E-103A-5F37-65CCD4F9191F}.Debug|Win32.ActiveCfg = Debug|Win32 + {33C16464-831E-103A-5F37-65CCD4F9191F}.Debug|Win32.Build.0 = Debug|Win32 + {33C16464-831E-103A-5F37-65CCD4F9191F}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {33C16464-831E-103A-5F37-65CCD4F9191F}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {33C16464-831E-103A-5F37-65CCD4F9191F}.Release|Win32.ActiveCfg = Release|Win32 + {33C16464-831E-103A-5F37-65CCD4F9191F}.Release|Win32.Build.0 = Release|Win32 + {33C16464-831E-103A-5F37-65CCD4F9191F}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {33C16464-831E-103A-5F37-65CCD4F9191F}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.Debug|Win32.ActiveCfg = Debug|Win32 + {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.Debug|Win32.Build.0 = Debug|Win32 + {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.Release|Win32.ActiveCfg = Release|Win32 + {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.Release|Win32.Build.0 = Release|Win32 + {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug|Win32.ActiveCfg = Debug|Win32 + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug|Win32.Build.0 = Debug|Win32 + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release|Win32.ActiveCfg = Release|Win32 + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release|Win32.Build.0 = Release|Win32 + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.Debug|Win32.ActiveCfg = Debug|Win32 + {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.Debug|Win32.Build.0 = Debug|Win32 + {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.Release|Win32.ActiveCfg = Release|Win32 + {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.Release|Win32.Build.0 = Release|Win32 + {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {2D714360-B8EC-F8E0-ED74-E95336301075}.Debug|Win32.ActiveCfg = Debug|Win32 + {2D714360-B8EC-F8E0-ED74-E95336301075}.Debug|Win32.Build.0 = Debug|Win32 + {2D714360-B8EC-F8E0-ED74-E95336301075}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {2D714360-B8EC-F8E0-ED74-E95336301075}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {2D714360-B8EC-F8E0-ED74-E95336301075}.Release|Win32.ActiveCfg = Release|Win32 + {2D714360-B8EC-F8E0-ED74-E95336301075}.Release|Win32.Build.0 = Release|Win32 + {2D714360-B8EC-F8E0-ED74-E95336301075}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {2D714360-B8EC-F8E0-ED74-E95336301075}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.Debug|Win32.ActiveCfg = Debug|Win32 + {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.Debug|Win32.Build.0 = Debug|Win32 + {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.Release|Win32.ActiveCfg = Release|Win32 + {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.Release|Win32.Build.0 = Release|Win32 + {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug|Win32.ActiveCfg = Debug|Win32 + {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug|Win32.Build.0 = Debug|Win32 + {60F71B6A-F888-C449-EF49-268BB9F7C963}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {60F71B6A-F888-C449-EF49-268BB9F7C963}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release|Win32.ActiveCfg = Release|Win32 + {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release|Win32.Build.0 = Release|Win32 + {60F71B6A-F888-C449-EF49-268BB9F7C963}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {60F71B6A-F888-C449-EF49-268BB9F7C963}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug|Win32.ActiveCfg = Debug|Win32 + {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug|Win32.Build.0 = Debug|Win32 + {60A1DC9D-F837-3923-E9DE-A7925394A578}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {60A1DC9D-F837-3923-E9DE-A7925394A578}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release|Win32.ActiveCfg = Release|Win32 + {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release|Win32.Build.0 = Release|Win32 + {60A1DC9D-F837-3923-E9DE-A7925394A578}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {60A1DC9D-F837-3923-E9DE-A7925394A578}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {330B5049-6935-5CE6-79B7-28F570962895}.Debug|Win32.ActiveCfg = Debug|Win32 + {330B5049-6935-5CE6-79B7-28F570962895}.Debug|Win32.Build.0 = Debug|Win32 + {330B5049-6935-5CE6-79B7-28F570962895}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {330B5049-6935-5CE6-79B7-28F570962895}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {330B5049-6935-5CE6-79B7-28F570962895}.Release|Win32.ActiveCfg = Release|Win32 + {330B5049-6935-5CE6-79B7-28F570962895}.Release|Win32.Build.0 = Release|Win32 + {330B5049-6935-5CE6-79B7-28F570962895}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {330B5049-6935-5CE6-79B7-28F570962895}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.Debug|Win32.ActiveCfg = Debug|Win32 + {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.Debug|Win32.Build.0 = Debug|Win32 + {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.Release|Win32.ActiveCfg = Release|Win32 + {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.Release|Win32.Build.0 = Release|Win32 + {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {6210A080-01C0-6D67-F1DB-669393175402}.Debug|Win32.ActiveCfg = Debug|Win32 + {6210A080-01C0-6D67-F1DB-669393175402}.Debug|Win32.Build.0 = Debug|Win32 + {6210A080-01C0-6D67-F1DB-669393175402}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {6210A080-01C0-6D67-F1DB-669393175402}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {6210A080-01C0-6D67-F1DB-669393175402}.Release|Win32.ActiveCfg = Release|Win32 + {6210A080-01C0-6D67-F1DB-669393175402}.Release|Win32.Build.0 = Release|Win32 + {6210A080-01C0-6D67-F1DB-669393175402}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {6210A080-01C0-6D67-F1DB-669393175402}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug|Win32.ActiveCfg = Debug|Win32 + {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug|Win32.Build.0 = Debug|Win32 + {9E59B16D-0924-409C-1611-DF2207A0053F}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {9E59B16D-0924-409C-1611-DF2207A0053F}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {9E59B16D-0924-409C-1611-DF2207A0053F}.Release|Win32.ActiveCfg = Release|Win32 + {9E59B16D-0924-409C-1611-DF2207A0053F}.Release|Win32.Build.0 = Release|Win32 + {9E59B16D-0924-409C-1611-DF2207A0053F}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {9E59B16D-0924-409C-1611-DF2207A0053F}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug|Win32.ActiveCfg = Debug|Win32 + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug|Win32.Build.0 = Debug|Win32 + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release|Win32.ActiveCfg = Release|Win32 + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release|Win32.Build.0 = Release|Win32 + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.Debug|Win32.ActiveCfg = Debug|Win32 + {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.Debug|Win32.Build.0 = Debug|Win32 + {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.Release|Win32.ActiveCfg = Release|Win32 + {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.Release|Win32.Build.0 = Release|Win32 + {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Debug|Win32.ActiveCfg = Debug|Win32 + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Debug|Win32.Build.0 = Debug|Win32 + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Release|Win32.ActiveCfg = Release|Win32 + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Release|Win32.Build.0 = Release|Win32 + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug|Win32.ActiveCfg = Debug|Win32 + {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug|Win32.Build.0 = Debug|Win32 + {61BD1097-CF2E-B296-DAA9-73A6FE135319}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {61BD1097-CF2E-B296-DAA9-73A6FE135319}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release|Win32.ActiveCfg = Release|Win32 + {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release|Win32.Build.0 = Release|Win32 + {61BD1097-CF2E-B296-DAA9-73A6FE135319}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {61BD1097-CF2E-B296-DAA9-73A6FE135319}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug|Win32.ActiveCfg = Debug|Win32 + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug|Win32.Build.0 = Debug|Win32 + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release|Win32.ActiveCfg = Release|Win32 + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release|Win32.Build.0 = Release|Win32 + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.Debug|Win32.ActiveCfg = Debug|Win32 + {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.Debug|Win32.Build.0 = Debug|Win32 + {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.Release|Win32.ActiveCfg = Release|Win32 + {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.Release|Win32.Build.0 = Release|Win32 + {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug|Win32.ActiveCfg = Debug|Win32 + {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug|Win32.Build.0 = Debug|Win32 + {7C428E76-9271-6284-20F0-9B38ED6931E3}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {7C428E76-9271-6284-20F0-9B38ED6931E3}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release|Win32.ActiveCfg = Release|Win32 + {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release|Win32.Build.0 = Release|Win32 + {7C428E76-9271-6284-20F0-9B38ED6931E3}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {7C428E76-9271-6284-20F0-9B38ED6931E3}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {6AB01C9C-9163-F400-B5C3-20D046631E17}.Debug|Win32.ActiveCfg = Debug|Win32 + {6AB01C9C-9163-F400-B5C3-20D046631E17}.Debug|Win32.Build.0 = Debug|Win32 + {6AB01C9C-9163-F400-B5C3-20D046631E17}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {6AB01C9C-9163-F400-B5C3-20D046631E17}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {6AB01C9C-9163-F400-B5C3-20D046631E17}.Release|Win32.ActiveCfg = Release|Win32 + {6AB01C9C-9163-F400-B5C3-20D046631E17}.Release|Win32.Build.0 = Release|Win32 + {6AB01C9C-9163-F400-B5C3-20D046631E17}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {6AB01C9C-9163-F400-B5C3-20D046631E17}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug|Win32.ActiveCfg = Debug|Win32 + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug|Win32.Build.0 = Debug|Win32 + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release|Win32.ActiveCfg = Release|Win32 + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release|Win32.Build.0 = Release|Win32 + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.Debug|Win32.ActiveCfg = Debug|Win32 + {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.Debug|Win32.Build.0 = Debug|Win32 + {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.Release|Win32.ActiveCfg = Release|Win32 + {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.Release|Win32.Build.0 = Release|Win32 + {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {B1B5F775-54A9-2437-E4AC-7E817E492142}.Debug|Win32.ActiveCfg = Debug|Win32 + {B1B5F775-54A9-2437-E4AC-7E817E492142}.Debug|Win32.Build.0 = Debug|Win32 + {B1B5F775-54A9-2437-E4AC-7E817E492142}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {B1B5F775-54A9-2437-E4AC-7E817E492142}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {B1B5F775-54A9-2437-E4AC-7E817E492142}.Release|Win32.ActiveCfg = Release|Win32 + {B1B5F775-54A9-2437-E4AC-7E817E492142}.Release|Win32.Build.0 = Release|Win32 + {B1B5F775-54A9-2437-E4AC-7E817E492142}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {B1B5F775-54A9-2437-E4AC-7E817E492142}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {A0958CD9-0E39-4A77-3711-9B488F508FBF}.Debug|Win32.ActiveCfg = Debug|Win32 + {A0958CD9-0E39-4A77-3711-9B488F508FBF}.Debug|Win32.Build.0 = Debug|Win32 + {A0958CD9-0E39-4A77-3711-9B488F508FBF}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {A0958CD9-0E39-4A77-3711-9B488F508FBF}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {A0958CD9-0E39-4A77-3711-9B488F508FBF}.Release|Win32.ActiveCfg = Release|Win32 + {A0958CD9-0E39-4A77-3711-9B488F508FBF}.Release|Win32.Build.0 = Release|Win32 + {A0958CD9-0E39-4A77-3711-9B488F508FBF}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {A0958CD9-0E39-4A77-3711-9B488F508FBF}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 + {D7036964-B44D-8207-0ACC-D838D0BDA379}.Debug|Win32.ActiveCfg = Debug|Win32 + {D7036964-B44D-8207-0ACC-D838D0BDA379}.Debug|Win32.Build.0 = Debug|Win32 + {D7036964-B44D-8207-0ACC-D838D0BDA379}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32 + {D7036964-B44D-8207-0ACC-D838D0BDA379}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32 + {D7036964-B44D-8207-0ACC-D838D0BDA379}.Release|Win32.ActiveCfg = Release|Win32 + {D7036964-B44D-8207-0ACC-D838D0BDA379}.Release|Win32.Build.0 = Release|Win32 + {D7036964-B44D-8207-0ACC-D838D0BDA379}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32 + {D7036964-B44D-8207-0ACC-D838D0BDA379}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32 EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {3578834A-4B06-DE6F-78AC-FE11F7226D35}.Release.ActiveCfg = Release|Win32 - {3578834A-4B06-DE6F-78AC-FE11F7226D35}.Release.Build.0 = Release|Win32 - {3578834A-4B06-DE6F-78AC-FE11F7226D35}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {3578834A-4B06-DE6F-78AC-FE11F7226D35}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {3578834A-4B06-DE6F-78AC-FE11F7226D35}.Debug.ActiveCfg = Debug|Win32 - {3578834A-4B06-DE6F-78AC-FE11F7226D35}.Debug.Build.0 = Debug|Win32 - {3578834A-4B06-DE6F-78AC-FE11F7226D35}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {3578834A-4B06-DE6F-78AC-FE11F7226D35}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {255A379C-F159-5362-4024-D5ADB9F5FBD2}.Release.ActiveCfg = Release|Win32 - {255A379C-F159-5362-4024-D5ADB9F5FBD2}.Release.Build.0 = Release|Win32 - {255A379C-F159-5362-4024-D5ADB9F5FBD2}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {255A379C-F159-5362-4024-D5ADB9F5FBD2}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {255A379C-F159-5362-4024-D5ADB9F5FBD2}.Debug.ActiveCfg = Debug|Win32 - {255A379C-F159-5362-4024-D5ADB9F5FBD2}.Debug.Build.0 = Debug|Win32 - {255A379C-F159-5362-4024-D5ADB9F5FBD2}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {255A379C-F159-5362-4024-D5ADB9F5FBD2}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.Release.ActiveCfg = Release|Win32 - {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.Release.Build.0 = Release|Win32 - {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.Debug.ActiveCfg = Debug|Win32 - {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.Debug.Build.0 = Debug|Win32 - {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {2707A1D2-F23C-0C78-B99B-AA148865D6DD}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release.ActiveCfg = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug.Build.0 = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release.ActiveCfg = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug.Build.0 = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release.ActiveCfg = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug.Build.0 = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release.ActiveCfg = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug.Build.0 = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release.ActiveCfg = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug.Build.0 = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release.ActiveCfg = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug.Build.0 = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release.ActiveCfg = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug.Build.0 = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release.ActiveCfg = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug.Build.0 = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {E2707D44-8B82-55F1-6C5A-D03B19159248}.Release.ActiveCfg = Release|Win32 - {E2707D44-8B82-55F1-6C5A-D03B19159248}.Release.Build.0 = Release|Win32 - {E2707D44-8B82-55F1-6C5A-D03B19159248}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {E2707D44-8B82-55F1-6C5A-D03B19159248}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {E2707D44-8B82-55F1-6C5A-D03B19159248}.Debug.ActiveCfg = Debug|Win32 - {E2707D44-8B82-55F1-6C5A-D03B19159248}.Debug.Build.0 = Debug|Win32 - {E2707D44-8B82-55F1-6C5A-D03B19159248}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {E2707D44-8B82-55F1-6C5A-D03B19159248}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release.ActiveCfg = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug.Build.0 = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {33C16464-831E-103A-5F37-65CCD4F9191F}.Release.ActiveCfg = Release|Win32 - {33C16464-831E-103A-5F37-65CCD4F9191F}.Release.Build.0 = Release|Win32 - {33C16464-831E-103A-5F37-65CCD4F9191F}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {33C16464-831E-103A-5F37-65CCD4F9191F}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {33C16464-831E-103A-5F37-65CCD4F9191F}.Debug.ActiveCfg = Debug|Win32 - {33C16464-831E-103A-5F37-65CCD4F9191F}.Debug.Build.0 = Debug|Win32 - {33C16464-831E-103A-5F37-65CCD4F9191F}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {33C16464-831E-103A-5F37-65CCD4F9191F}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.Release.ActiveCfg = Release|Win32 - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.Release.Build.0 = Release|Win32 - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.Debug.ActiveCfg = Debug|Win32 - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.Debug.Build.0 = Debug|Win32 - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {12B291F0-1880-AFC5-26E1-26DF78EA6D2E}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release.ActiveCfg = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug.Build.0 = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.Release.ActiveCfg = Release|Win32 - {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.Release.Build.0 = Release|Win32 - {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.Debug.ActiveCfg = Debug|Win32 - {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.Debug.Build.0 = Debug|Win32 - {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {385D5AB2-3904-6848-ACA6-9DFFF2F5A23F}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {2D714360-B8EC-F8E0-ED74-E95336301075}.Release.ActiveCfg = Release|Win32 - {2D714360-B8EC-F8E0-ED74-E95336301075}.Release.Build.0 = Release|Win32 - {2D714360-B8EC-F8E0-ED74-E95336301075}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {2D714360-B8EC-F8E0-ED74-E95336301075}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {2D714360-B8EC-F8E0-ED74-E95336301075}.Debug.ActiveCfg = Debug|Win32 - {2D714360-B8EC-F8E0-ED74-E95336301075}.Debug.Build.0 = Debug|Win32 - {2D714360-B8EC-F8E0-ED74-E95336301075}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {2D714360-B8EC-F8E0-ED74-E95336301075}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.Release.ActiveCfg = Release|Win32 - {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.Release.Build.0 = Release|Win32 - {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.Debug.ActiveCfg = Debug|Win32 - {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.Debug.Build.0 = Debug|Win32 - {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {EFEF2072-51F9-DAE8-AC38-3E653C680F74}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release.ActiveCfg = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug.Build.0 = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release.ActiveCfg = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug.Build.0 = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {330B5049-6935-5CE6-79B7-28F570962895}.Release.ActiveCfg = Release|Win32 - {330B5049-6935-5CE6-79B7-28F570962895}.Release.Build.0 = Release|Win32 - {330B5049-6935-5CE6-79B7-28F570962895}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {330B5049-6935-5CE6-79B7-28F570962895}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {330B5049-6935-5CE6-79B7-28F570962895}.Debug.ActiveCfg = Debug|Win32 - {330B5049-6935-5CE6-79B7-28F570962895}.Debug.Build.0 = Debug|Win32 - {330B5049-6935-5CE6-79B7-28F570962895}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {330B5049-6935-5CE6-79B7-28F570962895}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.Release.ActiveCfg = Release|Win32 - {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.Release.Build.0 = Release|Win32 - {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.Debug.ActiveCfg = Debug|Win32 - {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.Debug.Build.0 = Debug|Win32 - {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {07E712DB-DAF8-887E-F099-CE43D4E8B1F9}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Release.ActiveCfg = Release|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Release.Build.0 = Release|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Debug.ActiveCfg = Debug|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Debug.Build.0 = Debug|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Release.ActiveCfg = Release|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Release.Build.0 = Release|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug.ActiveCfg = Debug|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug.Build.0 = Debug|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release.ActiveCfg = Release|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release.Build.0 = Release|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug.ActiveCfg = Debug|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug.Build.0 = Debug|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.Release.ActiveCfg = Release|Win32 - {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.Release.Build.0 = Release|Win32 - {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.Debug.ActiveCfg = Debug|Win32 - {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.Debug.Build.0 = Debug|Win32 - {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {B6257B39-1C3C-09FF-BD85-AAC75B140A19}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Release.ActiveCfg = Release|Win32 - {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Release.Build.0 = Release|Win32 - {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Debug.ActiveCfg = Debug|Win32 - {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Debug.Build.0 = Debug|Win32 - {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release.ActiveCfg = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug.Build.0 = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release.ActiveCfg = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug.Build.0 = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.Release.ActiveCfg = Release|Win32 - {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.Release.Build.0 = Release|Win32 - {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.Debug.ActiveCfg = Debug|Win32 - {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.Debug.Build.0 = Debug|Win32 - {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {A24D77FD-D69A-75A0-A7DC-730894C9D0F7}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release.ActiveCfg = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug.Build.0 = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {6AB01C9C-9163-F400-B5C3-20D046631E17}.Release.ActiveCfg = Release|Win32 - {6AB01C9C-9163-F400-B5C3-20D046631E17}.Release.Build.0 = Release|Win32 - {6AB01C9C-9163-F400-B5C3-20D046631E17}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {6AB01C9C-9163-F400-B5C3-20D046631E17}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {6AB01C9C-9163-F400-B5C3-20D046631E17}.Debug.ActiveCfg = Debug|Win32 - {6AB01C9C-9163-F400-B5C3-20D046631E17}.Debug.Build.0 = Debug|Win32 - {6AB01C9C-9163-F400-B5C3-20D046631E17}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {6AB01C9C-9163-F400-B5C3-20D046631E17}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release.ActiveCfg = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug.Build.0 = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.Release.ActiveCfg = Release|Win32 - {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.Release.Build.0 = Release|Win32 - {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.Debug.ActiveCfg = Debug|Win32 - {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.Debug.Build.0 = Debug|Win32 - {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {F8318FC6-B9C4-D5A1-DCC0-C9CE42ADAE22}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {B1B5F775-54A9-2437-E4AC-7E817E492142}.Release.ActiveCfg = Release|Win32 - {B1B5F775-54A9-2437-E4AC-7E817E492142}.Release.Build.0 = Release|Win32 - {B1B5F775-54A9-2437-E4AC-7E817E492142}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {B1B5F775-54A9-2437-E4AC-7E817E492142}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {B1B5F775-54A9-2437-E4AC-7E817E492142}.Debug.ActiveCfg = Debug|Win32 - {B1B5F775-54A9-2437-E4AC-7E817E492142}.Debug.Build.0 = Debug|Win32 - {B1B5F775-54A9-2437-E4AC-7E817E492142}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {B1B5F775-54A9-2437-E4AC-7E817E492142}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {A0958CD9-0E39-4A77-3711-9B488F508FBF}.Release.ActiveCfg = Release|Win32 - {A0958CD9-0E39-4A77-3711-9B488F508FBF}.Release.Build.0 = Release|Win32 - {A0958CD9-0E39-4A77-3711-9B488F508FBF}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {A0958CD9-0E39-4A77-3711-9B488F508FBF}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {A0958CD9-0E39-4A77-3711-9B488F508FBF}.Debug.ActiveCfg = Debug|Win32 - {A0958CD9-0E39-4A77-3711-9B488F508FBF}.Debug.Build.0 = Debug|Win32 - {A0958CD9-0E39-4A77-3711-9B488F508FBF}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {A0958CD9-0E39-4A77-3711-9B488F508FBF}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - {D7036964-B44D-8207-0ACC-D838D0BDA379}.Release.ActiveCfg = Release|Win32 - {D7036964-B44D-8207-0ACC-D838D0BDA379}.Release.Build.0 = Release|Win32 - {D7036964-B44D-8207-0ACC-D838D0BDA379}.ReleaseDoublePrecision.ActiveCfg = ReleaseDoublePrecision|Win32 - {D7036964-B44D-8207-0ACC-D838D0BDA379}.ReleaseDoublePrecision.Build.0 = ReleaseDoublePrecision|Win32 - {D7036964-B44D-8207-0ACC-D838D0BDA379}.Debug.ActiveCfg = Debug|Win32 - {D7036964-B44D-8207-0ACC-D838D0BDA379}.Debug.Build.0 = Debug|Win32 - {D7036964-B44D-8207-0ACC-D838D0BDA379}.DebugDoublePrecision.ActiveCfg = DebugDoublePrecision|Win32 - {D7036964-B44D-8207-0ACC-D838D0BDA379}.DebugDoublePrecision.Build.0 = DebugDoublePrecision|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE EndGlobalSection EndGlobal diff --git a/src/BulletCollision/BroadphaseCollision/btAxisSweep3.h b/src/BulletCollision/BroadphaseCollision/btAxisSweep3.h index 7ee0942a7..e5927656e 100644 --- a/src/BulletCollision/BroadphaseCollision/btAxisSweep3.h +++ b/src/BulletCollision/BroadphaseCollision/btAxisSweep3.h @@ -63,8 +63,8 @@ public: //void* m_pOwner; this is now in btBroadphaseProxy.m_clientObject - inline void SetNextFree(BP_FP_INT_TYPE next) {m_minEdges[0] = next;} - inline BP_FP_INT_TYPE GetNextFree() const {return m_minEdges[0];} + SIMD_FORCE_INLINE void SetNextFree(BP_FP_INT_TYPE next) {m_minEdges[0] = next;} + SIMD_FORCE_INLINE BP_FP_INT_TYPE GetNextFree() const {return m_minEdges[0];} }; // 24 bytes + 24 for Edge structures = 44 bytes total per entry @@ -119,7 +119,7 @@ public: BP_FP_INT_TYPE addHandle(const btPoint3& aabbMin,const btPoint3& aabbMax, void* pOwner,short int collisionFilterGroup,short int collisionFilterMask,btDispatcher* dispatcher); void removeHandle(BP_FP_INT_TYPE handle,btDispatcher* dispatcher); void updateHandle(BP_FP_INT_TYPE handle, const btPoint3& aabbMin,const btPoint3& aabbMax,btDispatcher* dispatcher); - inline Handle* getHandle(BP_FP_INT_TYPE index) const {return m_pHandles + index;} + SIMD_FORCE_INLINE Handle* getHandle(BP_FP_INT_TYPE index) const {return m_pHandles + index;} void processAllOverlappingPairs(btOverlapCallback* callback); @@ -344,7 +344,7 @@ BP_FP_INT_TYPE btAxisSweep3Internal::addHandle(const btPoint3& a // allocate a handle BP_FP_INT_TYPE handle = allocHandle(); - assert(handle!= 0xcdcd); + Handle* pHandle = getHandle(handle); diff --git a/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h b/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h index fedef1000..b07ec2924 100644 --- a/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h +++ b/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h @@ -98,7 +98,7 @@ BT_DECLARE_ALIGNED_ALLOCATOR(); }; int m_uniqueId;//m_uniqueId is introduced for paircache. could get rid of this, by calculating the address offset etc. - inline int getUid() + SIMD_FORCE_INLINE int getUid() { return m_uniqueId;//(int)this; } @@ -115,26 +115,26 @@ BT_DECLARE_ALIGNED_ALLOCATOR(); - static inline bool isPolyhedral(int proxyType) + static SIMD_FORCE_INLINE bool isPolyhedral(int proxyType) { return (proxyType < IMPLICIT_CONVEX_SHAPES_START_HERE); } - static inline bool isConvex(int proxyType) + static SIMD_FORCE_INLINE bool isConvex(int proxyType) { return (proxyType < CONCAVE_SHAPES_START_HERE); } - static inline bool isConcave(int proxyType) + static SIMD_FORCE_INLINE bool isConcave(int proxyType) { return ((proxyType > CONCAVE_SHAPES_START_HERE) && (proxyType < CONCAVE_SHAPES_END_HERE)); } - static inline bool isCompound(int proxyType) + static SIMD_FORCE_INLINE bool isCompound(int proxyType) { return (proxyType == COMPOUND_SHAPE_PROXYTYPE); } - static inline bool isInfinite(int proxyType) + static SIMD_FORCE_INLINE bool isInfinite(int proxyType) { return (proxyType == STATIC_PLANE_PROXYTYPE); } diff --git a/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.cpp b/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.cpp index 9abd480f5..08b508bf1 100644 --- a/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.cpp +++ b/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.cpp @@ -23,10 +23,17 @@ subject to the following restrictions: /// btOverlappingPairCache* m_overlappingPairs; extern int gOverlappingPairs; -btMultiSapBroadphase::btMultiSapBroadphase(int maxProxies) -:m_invalidPair(0) +btMultiSapBroadphase::btMultiSapBroadphase(int maxProxies,btOverlappingPairCache* pairCache) +:m_invalidPair(0), +m_ownsPairCache(false), +m_overlappingPairs(pairCache) { - m_overlappingPairs = new btOverlappingPairCache(); + if (!m_overlappingPairs) + { + m_ownsPairCache = true; + void* mem = btAlignedAlloc(sizeof(btOverlappingPairCache),16); + m_overlappingPairs = new (mem)btOverlappingPairCache(); + } struct btMultiSapOverlapFilterCallback : public btOverlapFilterCallback { @@ -54,6 +61,10 @@ btMultiSapBroadphase::btMultiSapBroadphase(int maxProxies) btMultiSapBroadphase::~btMultiSapBroadphase() { + if (m_ownsPairCache) + { + btAlignedFree(m_overlappingPairs); + } } btBroadphaseProxy* btMultiSapBroadphase::createProxy( const btVector3& aabbMin, const btVector3& aabbMax,int shapeType,void* userPtr, short int collisionFilterGroup,short int collisionFilterMask, btDispatcher* dispatcher) diff --git a/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h b/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h index aff7c6c50..1ee609b8d 100644 --- a/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h +++ b/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h @@ -35,6 +35,8 @@ class btMultiSapBroadphase :public btBroadphaseInterface btSimpleBroadphase* m_simpleBroadphase; btOverlappingPairCache* m_overlappingPairs; + + bool m_ownsPairCache; btOverlapFilterCallback* m_filterCallback; @@ -81,7 +83,7 @@ protected: public: - btMultiSapBroadphase(int maxProxies = 16384); + btMultiSapBroadphase(int maxProxies = 16384,btOverlappingPairCache* pairCache=0); btSapBroadphaseArray getBroadphaseArray() { diff --git a/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp b/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp index 5e1ca15c1..3753810b2 100644 --- a/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp +++ b/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp @@ -23,24 +23,18 @@ subject to the following restrictions: int gOverlappingPairs = 0; +int gRemovePairs =0; +int gAddedPairs =0; +int gFindPairs =0; + btOverlappingPairCache::btOverlappingPairCache(): -m_blockedForChanges(false), -m_overlapFilterCallback(0) -//m_NumOverlapBroadphasePair(0) + m_blockedForChanges(false), + m_overlapFilterCallback(0) { + int initialAllocatedSize= 65536*256;//2;//this needs to be a power of 2! + m_overlappingPairArray.reserve(initialAllocatedSize); -#ifdef USE_HASH_PAIRCACHE - m_overlappingPairArray.reserve(b2_maxPairs); - - for (int32 i = 0; i < b2_tableCapacity; ++i) - { - m_hashTable[i] = b2_nullPair; - } - for (int32 i = 0; i < b2_maxPairs; ++i) - { - m_next[i] = b2_nullPair; - } -#endif //USE_HASH_PAIRCACHE + growTables(); } @@ -125,66 +119,31 @@ void btOverlappingPairCache::removeOverlappingPairsContainingProxy(btBroadphaseP #ifdef USE_HASH_PAIRCACHE -// Thomas Wang's hash, see: http://www.concentric.net/~Ttwang/tech/inthash.htm -// This assumes proxyId1 and proxyId2 are 16-bit. -inline uint32 Hash(uint32 proxyId1, uint32 proxyId2) + + + + + + +btBroadphasePair* btOverlappingPairCache::findPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) { - uint32 key = (proxyId2 << 16) | proxyId1; - key = ~key + (key << 15); - key = key ^ (key >> 12); - key = key + (key << 2); - key = key ^ (key >> 4); - key = key * 2057; - key = key ^ (key >> 16); - return key; -} + gFindPairs++; -inline bool Equals(const btBroadphasePair& pair, int32 proxyId1, int32 proxyId2) -{ - return pair.m_pProxy0->getUid() == proxyId1 && pair.m_pProxy1->getUid() == proxyId2; -} - -inline btBroadphasePair* btOverlappingPairCache::Find(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1, uint32 hash) -{ - int32 proxyId1 = proxy0->getUid(); - int32 proxyId2 = proxy1->getUid(); - if (proxyId1 > proxyId2) - btSwap(proxyId1, proxyId2); - - int32 index = m_hashTable[hash]; - - while( index != b2_nullPair && Equals(m_overlappingPairArray[index], proxyId1, proxyId2) == false) - { - index = m_next[index]; - } - - if ( index == b2_nullPair ) - { - return NULL; - } - - btAssert(index < m_overlappingPairArray.size()); - - return &m_overlappingPairArray[index]; -} - -btBroadphasePair* btOverlappingPairCache::Find(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) -{ - int32 proxyId1 = proxy0->getUid(); - int32 proxyId2 = proxy1->getUid(); + int proxyId1 = proxy0->getUid(); + int proxyId2 = proxy1->getUid(); if (proxyId1 > proxyId2) btSwap(proxyId1, proxyId2); - int32 hash = Hash(proxyId1, proxyId2) & b2_tableMask; + int hash = getHash(proxyId1, proxyId2) & (m_overlappingPairArray.capacity()-1); - int32 index = m_hashTable[hash]; - while (index != b2_nullPair && Equals(m_overlappingPairArray[index], proxyId1, proxyId2) == false) + int index = m_hashTable[hash]; + while (index != BT_NULL_PAIR && equalsPair(m_overlappingPairArray[index], proxyId1, proxyId2) == false) { index = m_next[index]; } - if (index == b2_nullPair) + if (index == BT_NULL_PAIR) { return NULL; } @@ -196,32 +155,79 @@ btBroadphasePair* btOverlappingPairCache::Find(btBroadphaseProxy* proxy0, btBroa #include -btBroadphasePair* btOverlappingPairCache::Add(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) +void btOverlappingPairCache::growTables() { - int32 proxyId1 = proxy0->getUid(); - int32 proxyId2 = proxy1->getUid(); + //or put an assert here instead? + + int newCapacity = m_overlappingPairArray.capacity(); + + if (m_hashTable.size() < newCapacity) + { + //grow hashtable and next table + int curHashtableSize = m_hashTable.size(); + int curNextTableSize = m_next.size(); + + m_hashTable.resize(newCapacity); + m_next.resize(newCapacity); + + for (int i= curHashtableSize; i < newCapacity; ++i) + { + m_hashTable[i] = BT_NULL_PAIR; + } + for (int i = curNextTableSize; i < newCapacity; ++i) + { + m_next[i] = BT_NULL_PAIR; + } + + for(int i=0;igetUid(); + int proxyId2 = pair.m_pProxy1->getUid(); + if (proxyId1 > proxyId2) + btSwap(proxyId1, proxyId2); + int hashValue = getHash(proxyId1,proxyId2) & (m_overlappingPairArray.capacity()-1); // New hash value with new mask + m_next[i] = m_hashTable[hashValue]; + m_hashTable[hashValue] = i; + } + + + } +} + +btBroadphasePair* btOverlappingPairCache::internalAddPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) +{ + int proxyId1 = proxy0->getUid(); + int proxyId2 = proxy1->getUid(); if (proxyId1 > proxyId2) btSwap(proxyId1, proxyId2); - int32 hash = Hash(proxyId1, proxyId2) & b2_tableMask; + int hash = getHash(proxyId1, proxyId2) & (m_overlappingPairArray.capacity()-1); - btBroadphasePair* pair = Find(proxy0, proxy1, hash); + btBroadphasePair* pair = internalFindPair(proxy0, proxy1, hash); if (pair != NULL) { return pair; } - if (m_overlappingPairArray.size() == b2_maxPairs) - { - btAssert(false); - return NULL; - } - int count = m_overlappingPairArray.size(); + int oldCapacity = m_overlappingPairArray.capacity(); void* mem = &m_overlappingPairArray.expand(); + int newCapacity = m_overlappingPairArray.capacity(); + + if (oldCapacity < newCapacity) + { + growTables(); + //hash with new capacity + hash = getHash(proxyId1, proxyId2) & (m_overlappingPairArray.capacity()-1); + } pair = new (mem) btBroadphasePair(*proxy0,*proxy1); // pair->m_pProxy0 = proxy0; @@ -231,26 +237,29 @@ btBroadphasePair* btOverlappingPairCache::Add(btBroadphaseProxy* proxy0, btBroad m_next[count] = m_hashTable[hash]; - m_hashTable[hash] = (uint16)count; + m_hashTable[hash] = count; return pair; } -void* btOverlappingPairCache::Remove(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1,btDispatcher* dispatcher) + +void* btOverlappingPairCache::removeOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1,btDispatcher* dispatcher) { - int32 proxyId1 = proxy0->getUid(); - int32 proxyId2 = proxy1->getUid(); + gRemovePairs++; + + int proxyId1 = proxy0->getUid(); + int proxyId2 = proxy1->getUid(); if (proxyId1 > proxyId2) btSwap(proxyId1, proxyId2); - int32 hash = Hash(proxyId1, proxyId2) & b2_tableMask; + int hash = getHash(proxyId1, proxyId2) & (m_overlappingPairArray.capacity()-1); - btBroadphasePair* pair = Find(proxy0, proxy1, hash); + btBroadphasePair* pair = internalFindPair(proxy0, proxy1, hash); if (pair == NULL) { - return NULL; + return 0; } cleanOverlappingPair(*pair,dispatcher); @@ -260,21 +269,21 @@ void* btOverlappingPairCache::Remove(btBroadphaseProxy* proxy0, btBroadphaseProx btAssert(pair->m_pProxy0->getUid() == proxyId1); btAssert(pair->m_pProxy1->getUid() == proxyId2); - int32 pairIndex = int32(pair - &m_overlappingPairArray[0]); + int pairIndex = int(pair - &m_overlappingPairArray[0]); btAssert(pairIndex < m_overlappingPairArray.size()); // Remove the pair from the hash table. - int32 index = m_hashTable[hash]; - btAssert(index != b2_nullPair); + int index = m_hashTable[hash]; + btAssert(index != BT_NULL_PAIR); - int32 previous = b2_nullPair; + int previous = BT_NULL_PAIR; while (index != pairIndex) { previous = index; index = m_next[index]; } - if (previous != b2_nullPair) + if (previous != BT_NULL_PAIR) { btAssert(m_next[previous] == pairIndex); m_next[previous] = m_next[pairIndex]; @@ -288,7 +297,7 @@ void* btOverlappingPairCache::Remove(btBroadphaseProxy* proxy0, btBroadphaseProx // pair being removed. We need to fix the hash // table indices to support the move. - int32 lastPairIndex = m_overlappingPairArray.size() - 1; + int lastPairIndex = m_overlappingPairArray.size() - 1; // If the removed pair is the last pair, we are done. if (lastPairIndex == pairIndex) @@ -299,19 +308,19 @@ void* btOverlappingPairCache::Remove(btBroadphaseProxy* proxy0, btBroadphaseProx // Remove the last pair from the hash table. const btBroadphasePair* last = &m_overlappingPairArray[lastPairIndex]; - int32 lastHash = Hash(last->m_pProxy0->getUid(), last->m_pProxy1->getUid()) & b2_tableMask; + int lastHash = getHash(last->m_pProxy0->getUid(), last->m_pProxy1->getUid()) & (m_overlappingPairArray.capacity()-1); index = m_hashTable[lastHash]; - btAssert(index != b2_nullPair); + btAssert(index != BT_NULL_PAIR); - previous = b2_nullPair; + previous = BT_NULL_PAIR; while (index != lastPairIndex) { previous = index; index = m_next[index]; } - if (previous != b2_nullPair) + if (previous != BT_NULL_PAIR) { btAssert(m_next[previous] == lastPairIndex); m_next[previous] = m_next[lastPairIndex]; @@ -326,7 +335,7 @@ void* btOverlappingPairCache::Remove(btBroadphaseProxy* proxy0, btBroadphaseProx // Insert the last pair into the hash table m_next[pairIndex] = m_hashTable[lastHash]; - m_hashTable[lastHash] = (uint16)pairIndex; + m_hashTable[lastHash] = pairIndex; m_overlappingPairArray.pop_back(); @@ -361,7 +370,7 @@ void btOverlappingPairCache::processAllOverlappingPairs(btOverlapCallback* callb -void btOverlappingPairCache::removeOverlappingPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1, btDispatcher* dispatcher ) +void* btOverlappingPairCache::removeOverlappingPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1, btDispatcher* dispatcher ) { #ifndef USE_LAZY_REMOVAL @@ -372,13 +381,16 @@ void btOverlappingPairCache::removeOverlappingPair(btBroadphaseProxy* proxy0,btB { gOverlappingPairs--; btBroadphasePair& pair = m_overlappingPairArray[findIndex]; + void* userData = pair.m_userInfo; cleanOverlappingPair(pair,dispatcher); - m_overlappingPairArray.swap(findIndex,m_overlappingPairArray.size()-1); + m_overlappingPairArray.swap(findIndex,m_overlappingPairArray.capacity()-1); m_overlappingPairArray.pop_back(); + return userData; } #endif //USE_LAZY_REMOVAL + return 0; } @@ -388,18 +400,18 @@ void btOverlappingPairCache::removeOverlappingPair(btBroadphaseProxy* proxy0,btB -void btOverlappingPairCache::addOverlappingPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) +btBroadphasePair* btOverlappingPairCache::addOverlappingPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) { //don't add overlap with own assert(proxy0 != proxy1); if (!needsBroadphaseCollision(proxy0,proxy1)) - return; - - - btBroadphasePair pair(*proxy0,*proxy1); - m_overlappingPairArray.push_back(pair); + return 0; + + void* mem = &m_overlappingPairArray.expand(); + btBroadphasePair* pair = new (mem) btBroadphasePair(*proxy0,*proxy1); gOverlappingPairs++; + return pair; } @@ -448,7 +460,7 @@ void btOverlappingPairCache::processAllOverlappingPairs(btOverlapCallback* callb { cleanOverlappingPair(*pair,dispatcher); - m_overlappingPairArray.swap(i,m_overlappingPairArray.size()-1); + m_overlappingPairArray.swap(i,m_overlappingPairArray.capacity()-1); m_overlappingPairArray.pop_back(); gOverlappingPairs--; } else diff --git a/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h b/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h index 693c66d56..748bbc653 100644 --- a/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h +++ b/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h @@ -24,6 +24,7 @@ subject to the following restrictions: #include "LinearMath/btAlignedObjectArray.h" class btDispatcher; +///disable the USE_HASH_PAIRCACHE define to use a pair manager that sorts the pairs to find duplicates/non-overlap #define USE_HASH_PAIRCACHE 1 @@ -48,18 +49,13 @@ typedef btAlignedObjectArray btBroadphasePairArray; #ifdef USE_HASH_PAIRCACHE - -const int b2_maxPairs = 65536;//32768; -typedef unsigned short int uint16; -typedef int int32; -typedef unsigned int uint32; - /// Hash-space based Pair Cache, thanks to Erin Catto, Box2D, http://www.box2d.org, and Pierre Terdiman, Codercorner, http://codercorner.com -const uint16 b2_nullPair = 0xffff; -const uint16 b2_nullProxy = 0xffff; -const int32 b2_tableCapacity = b2_maxPairs; // must be a power of two -const int32 b2_tableMask = b2_tableCapacity - 1; +extern int gRemovePairs; +extern int gAddedPairs; +extern int gFindPairs; + +#define BT_NULL_PAIR 0xffffffff class btOverlappingPairCache { @@ -67,6 +63,8 @@ class btOverlappingPairCache btOverlapFilterCallback* m_overlapFilterCallback; bool m_blockedForChanges; + + public: btOverlappingPairCache(); ~btOverlappingPairCache(); @@ -74,12 +72,9 @@ public: void removeOverlappingPairsContainingProxy(btBroadphaseProxy* proxy,btDispatcher* dispatcher); - void removeOverlappingPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1,btDispatcher* dispatcher) - { - Remove(proxy0,proxy1,dispatcher); - } - - inline bool needsBroadphaseCollision(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) const + void* removeOverlappingPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1,btDispatcher* dispatcher); + + SIMD_FORCE_INLINE bool needsBroadphaseCollision(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) const { if (m_overlapFilterCallback) return m_overlapFilterCallback->needBroadphaseCollision(proxy0,proxy1); @@ -90,18 +85,19 @@ public: return collides; } - void addOverlappingPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) + // Add a pair and return the new pair. If the pair already exists, + // no new pair is created and the old one is returned. + SIMD_FORCE_INLINE btBroadphasePair* addOverlappingPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) { + gAddedPairs++; + if (!needsBroadphaseCollision(proxy0,proxy1)) - return; + return 0; - Add(proxy0,proxy1); + return internalAddPair(proxy0,proxy1); } - btBroadphasePair* findPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) - { - return Find(proxy0,proxy1); - } + void cleanProxyFromPairs(btBroadphaseProxy* proxy,btDispatcher* dispatcher); @@ -130,16 +126,11 @@ public: void cleanOverlappingPair(btBroadphasePair& pair,btDispatcher* dispatcher); - // Add a pair and return the new pair. If the pair already exists, - // no new pair is created and the old one is returned. - btBroadphasePair* Add(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1); - // Remove a pair, return the pair's userData. - void* Remove(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1,btDispatcher* dispatcher); - btBroadphasePair* Find(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1); + btBroadphasePair* findPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1); - int32 GetCount() const { return m_overlappingPairArray.size(); } + int GetCount() const { return m_overlappingPairArray.size(); } // btBroadphasePair* GetPairs() { return m_pairs; } btOverlapFilterCallback* getOverlapFilterCallback() @@ -157,12 +148,82 @@ public: return m_overlappingPairArray.size(); } private: - btBroadphasePair* Find(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1, uint32 hashValue); + + btBroadphasePair* internalAddPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1); + + void growTables(); + + SIMD_FORCE_INLINE bool equalsPair(const btBroadphasePair& pair, int proxyId1, int proxyId2) + { + return pair.m_pProxy0->getUid() == proxyId1 && pair.m_pProxy1->getUid() == proxyId2; + } + + /* + // Thomas Wang's hash, see: http://www.concentric.net/~Ttwang/tech/inthash.htm + // This assumes proxyId1 and proxyId2 are 16-bit. + SIMD_FORCE_INLINE int getHash(int proxyId1, int proxyId2) + { + int key = (proxyId2 << 16) | proxyId1; + key = ~key + (key << 15); + key = key ^ (key >> 12); + key = key + (key << 2); + key = key ^ (key >> 4); + key = key * 2057; + key = key ^ (key >> 16); + return key; + } + */ + + + + SIMD_FORCE_INLINE unsigned int getHash(unsigned int proxyId1, unsigned int proxyId2) + { + int key = ((unsigned int)proxyId1) | (((unsigned int)proxyId1) <<16); + // Thomas Wang's hash + + key += ~(key << 15); + key ^= (key >> 10); + key += (key << 3); + key ^= (key >> 6); + key += ~(key << 11); + key ^= (key >> 16); + return key; + } + + + + + + SIMD_FORCE_INLINE btBroadphasePair* internalFindPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1, int hash) + { + int proxyId1 = proxy0->getUid(); + int proxyId2 = proxy1->getUid(); + if (proxyId1 > proxyId2) + btSwap(proxyId1, proxyId2); + + int index = m_hashTable[hash]; + + while( index != BT_NULL_PAIR && equalsPair(m_overlappingPairArray[index], proxyId1, proxyId2) == false) + { + index = m_next[index]; + } + + if ( index == BT_NULL_PAIR ) + { + return NULL; + } + + btAssert(index < m_overlappingPairArray.size()); + + return &m_overlappingPairArray[index]; + } + public: - uint16 m_hashTable[b2_tableCapacity]; - uint16 m_next[b2_maxPairs]; + btAlignedObjectArray m_hashTable; + btAlignedObjectArray m_next; + }; @@ -192,11 +253,11 @@ class btOverlappingPairCache virtual void processAllOverlappingPairs(btOverlapCallback*,btDispatcher* dispatcher); - void removeOverlappingPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1,btDispatcher* dispatcher); + void* removeOverlappingPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1,btDispatcher* dispatcher); void cleanOverlappingPair(btBroadphasePair& pair,btDispatcher* dispatcher); - void addOverlappingPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1); + btBroadphasePair* addOverlappingPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1); btBroadphasePair* findPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1); diff --git a/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp b/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp index 04f3ea144..c026b368a 100644 --- a/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp +++ b/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp @@ -44,7 +44,8 @@ btSimpleBroadphase::btSimpleBroadphase(int maxProxies, btOverlappingPairCache* o if (!overlappingPairCache) { - m_pairCache = new btOverlappingPairCache(); + void* mem = btAlignedAlloc(sizeof(btOverlappingPairCache),16); + m_pairCache = new (mem)btOverlappingPairCache(); m_ownsPairCache = true; } @@ -76,7 +77,7 @@ btSimpleBroadphase::~btSimpleBroadphase() if (m_ownsPairCache) { - delete m_pairCache; + btAlignedFree(m_pairCache); } } diff --git a/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h b/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h index 82847e7d1..d40cd5561 100644 --- a/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h +++ b/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h @@ -39,11 +39,11 @@ struct btSimpleBroadphaseProxy : public btBroadphaseProxy } - inline void SetNextFree(int next) {m_nextFree = next;} - inline int GetNextFree() const {return m_nextFree;} + SIMD_FORCE_INLINE void SetNextFree(int next) {m_nextFree = next;} + SIMD_FORCE_INLINE int GetNextFree() const {return m_nextFree;} - inline void SetNextAllocated(int next) {m_nextAllocated = next;} - inline int GetNextAllocated() const {return m_nextAllocated;} + SIMD_FORCE_INLINE void SetNextAllocated(int next) {m_nextAllocated = next;} + SIMD_FORCE_INLINE int GetNextAllocated() const {return m_nextAllocated;} }; diff --git a/src/BulletCollision/CollisionDispatch/btCollisionObject.h b/src/BulletCollision/CollisionDispatch/btCollisionObject.h index 5ec120d10..7c1ddbf1e 100644 --- a/src/BulletCollision/CollisionDispatch/btCollisionObject.h +++ b/src/BulletCollision/CollisionDispatch/btCollisionObject.h @@ -101,28 +101,28 @@ public: }; - inline bool mergesSimulationIslands() const + SIMD_FORCE_INLINE bool mergesSimulationIslands() const { ///static objects, kinematic and object without contact response don't merge islands return ((m_collisionFlags & (CF_STATIC_OBJECT | CF_KINEMATIC_OBJECT | CF_NO_CONTACT_RESPONSE) )==0); } - inline bool isStaticObject() const { + SIMD_FORCE_INLINE bool isStaticObject() const { return (m_collisionFlags & CF_STATIC_OBJECT) != 0; } - inline bool isKinematicObject() const + SIMD_FORCE_INLINE bool isKinematicObject() const { return (m_collisionFlags & CF_KINEMATIC_OBJECT) != 0; } - inline bool isStaticOrKinematicObject() const + SIMD_FORCE_INLINE bool isStaticOrKinematicObject() const { return (m_collisionFlags & (CF_KINEMATIC_OBJECT | CF_STATIC_OBJECT)) != 0 ; } - inline bool hasContactResponse() const { + SIMD_FORCE_INLINE bool hasContactResponse() const { return (m_collisionFlags & CF_NO_CONTACT_RESPONSE)==0; } @@ -136,12 +136,12 @@ public: m_collisionShape = collisionShape; } - inline const btCollisionShape* getCollisionShape() const + SIMD_FORCE_INLINE const btCollisionShape* getCollisionShape() const { return m_collisionShape; } - inline btCollisionShape* getCollisionShape() + SIMD_FORCE_INLINE btCollisionShape* getCollisionShape() { return m_collisionShape; } diff --git a/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h b/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h index 4f7ba99bf..da33e9889 100644 --- a/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h +++ b/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h @@ -55,11 +55,11 @@ int m_triangleCount; void clearCache(); - inline const btVector3& getAabbMin() const + SIMD_FORCE_INLINE const btVector3& getAabbMin() const { return m_aabbMin; } - inline const btVector3& getAabbMax() const + SIMD_FORCE_INLINE const btVector3& getAabbMax() const { return m_aabbMax; } diff --git a/src/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp b/src/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp index 70dc00f83..3deb7f8f6 100644 --- a/src/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp +++ b/src/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp @@ -109,8 +109,8 @@ btScalar btSphereBoxCollisionAlgorithm::getSphereDistance(btCollisionObject* box btVector3 bounds[2]; btBoxShape* boxShape= (btBoxShape*)boxObj->getCollisionShape(); - bounds[0] = -boxShape->getHalfExtents(); - bounds[1] = boxShape->getHalfExtents(); + bounds[0] = -boxShape->getHalfExtentsWithoutMargin(); + bounds[1] = boxShape->getHalfExtentsWithoutMargin(); margins = boxShape->getMargin();//also add sphereShape margin? diff --git a/src/BulletCollision/CollisionDispatch/btUnionFind.h b/src/BulletCollision/CollisionDispatch/btUnionFind.h index 88e449f8b..820c8bc85 100644 --- a/src/BulletCollision/CollisionDispatch/btUnionFind.h +++ b/src/BulletCollision/CollisionDispatch/btUnionFind.h @@ -46,11 +46,11 @@ class btUnionFind void reset(int N); - inline int getNumElements() const + SIMD_FORCE_INLINE int getNumElements() const { return int(m_elements.size()); } - inline bool isRoot(int x) const + SIMD_FORCE_INLINE bool isRoot(int x) const { return (x == m_elements[x].m_id); } diff --git a/src/BulletCollision/CollisionShapes/btBoxShape.cpp b/src/BulletCollision/CollisionShapes/btBoxShape.cpp index 636b0046c..8a8382f8f 100644 --- a/src/BulletCollision/CollisionShapes/btBoxShape.cpp +++ b/src/BulletCollision/CollisionShapes/btBoxShape.cpp @@ -15,16 +15,13 @@ subject to the following restrictions: #include "btBoxShape.h" -btVector3 btBoxShape::getHalfExtents() const -{ - return m_implicitShapeDimensions * m_localScaling; -} + //{ void btBoxShape::getAabb(const btTransform& t,btVector3& aabbMin,btVector3& aabbMax) const { - btVector3 halfExtents = getHalfExtents(); + const btVector3& halfExtents = getHalfExtentsWithoutMargin(); btMatrix3x3 abs_b = t.getBasis().absolute(); btPoint3 center = t.getOrigin(); @@ -43,7 +40,7 @@ void btBoxShape::getAabb(const btTransform& t,btVector3& aabbMin,btVector3& aabb void btBoxShape::calculateLocalInertia(btScalar mass,btVector3& inertia) { //btScalar margin = btScalar(0.); - btVector3 halfExtents = getHalfExtents(); + btVector3 halfExtents = getHalfExtentsWithMargin(); btScalar lx=btScalar(2.)*(halfExtents.x()); btScalar ly=btScalar(2.)*(halfExtents.y()); diff --git a/src/BulletCollision/CollisionShapes/btBoxShape.h b/src/BulletCollision/CollisionShapes/btBoxShape.h index c50c4032d..b647641da 100644 --- a/src/BulletCollision/CollisionShapes/btBoxShape.h +++ b/src/BulletCollision/CollisionShapes/btBoxShape.h @@ -31,25 +31,37 @@ class btBoxShape: public btPolyhedralConvexShape public: - btVector3 getHalfExtents() const; - + btVector3 getHalfExtentsWithMargin() const + { + btVector3 halfExtents = getHalfExtentsWithoutMargin(); + btVector3 margin(getMargin(),getMargin(),getMargin()); + halfExtents += margin; + return halfExtents; + } + + const btVector3& getHalfExtentsWithoutMargin() const + { + return m_implicitShapeDimensions;//changed in Bullet 2.63: assume the scaling and margin are included + } + + virtual int getShapeType() const { return BOX_SHAPE_PROXYTYPE;} virtual btVector3 localGetSupportingVertex(const btVector3& vec) const { - btVector3 halfExtents = getHalfExtents(); + btVector3 halfExtents = getHalfExtentsWithoutMargin(); + btVector3 margin(getMargin(),getMargin(),getMargin()); + halfExtents += margin; return btVector3(btFsels(vec.x(), halfExtents.x(), -halfExtents.x()), btFsels(vec.y(), halfExtents.y(), -halfExtents.y()), btFsels(vec.z(), halfExtents.z(), -halfExtents.z())); } - virtual inline btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec)const + SIMD_FORCE_INLINE btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec)const { - btVector3 halfExtents = getHalfExtents(); - btVector3 margin(getMargin(),getMargin(),getMargin()); - halfExtents -= margin; - + const btVector3& halfExtents = getHalfExtentsWithoutMargin(); + return btVector3(btFsels(vec.x(), halfExtents.x(), -halfExtents.x()), btFsels(vec.y(), halfExtents.y(), -halfExtents.y()), btFsels(vec.z(), halfExtents.z(), -halfExtents.z())); @@ -57,11 +69,8 @@ public: virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors,btVector3* supportVerticesOut,int numVectors) const { - btVector3 halfExtents = getHalfExtents(); - btVector3 margin(getMargin(),getMargin(),getMargin()); - halfExtents -= margin; - - + const btVector3& halfExtents = getHalfExtentsWithoutMargin(); + for (int i=0;i= aabbMin2[0]) & (aabbMin1[2] <= aabbMax2[2]) & (aabbMax1[2] >= aabbMin2[2]) @@ -293,7 +293,7 @@ protected: 1, 0); } #else - inline bool testQuantizedAabbAgainstQuantizedAabb(unsigned short int* aabbMin1,unsigned short int* aabbMax1,const unsigned short int* aabbMin2,const unsigned short int* aabbMax2) const + SIMD_FORCE_INLINE bool testQuantizedAabbAgainstQuantizedAabb(unsigned short int* aabbMin1,unsigned short int* aabbMax1,const unsigned short int* aabbMin2,const unsigned short int* aabbMax2) const { bool overlap = true; overlap = (aabbMin1[0] > aabbMax2[0] || aabbMax1[0] < aabbMin2[0]) ? false : overlap; @@ -316,7 +316,7 @@ public: void reportSphereOverlappingNodex(btNodeOverlapCallback* nodeCallback,const btVector3& aabbMin,const btVector3& aabbMax) const; - inline void quantizeWithClamp(unsigned short* out, const btVector3& point) const + SIMD_FORCE_INLINE void quantizeWithClamp(unsigned short* out, const btVector3& point) const { btAssert(m_useQuantization); @@ -347,12 +347,12 @@ public: void updateBvhNodes(btStridingMeshInterface* meshInterface,int firstNode,int endNode,int index); - inline QuantizedNodeArray& getQuantizedNodeArray() + SIMD_FORCE_INLINE QuantizedNodeArray& getQuantizedNodeArray() { return m_quantizedContiguousNodes; } - inline BvhSubtreeInfoArray& getSubtreeInfoArray() + SIMD_FORCE_INLINE BvhSubtreeInfoArray& getSubtreeInfoArray() { return m_SubtreeHeaders; } @@ -368,7 +368,7 @@ public: static unsigned int getAlignmentSerializationPadding(); - inline bool isQuantized() + SIMD_FORCE_INLINE bool isQuantized() { return m_useQuantization; } diff --git a/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp b/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp index 8829cba84..33973a452 100644 --- a/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp +++ b/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp @@ -158,64 +158,62 @@ btScalar restitutionCurve(btScalar rel_vel, btScalar restitution) //velocity + friction //response between two dynamic objects with friction -SIMD_FORCE_INLINE btScalar resolveSingleCollisionCombinedCacheFriendly( +//SIMD_FORCE_INLINE +btScalar resolveSingleCollisionCombinedCacheFriendly( btSolverBody& body1, btSolverBody& body2, - btSolverConstraint& contactConstraint, + const btSolverConstraint& contactConstraint, const btContactSolverInfo& solverInfo) { (void)solverInfo; - btScalar normalImpulse(0.f); - { - if (contactConstraint.m_penetration < 0.f) - return 0.f; - + btScalar normalImpulse; + // Optimized version of projected relative velocity, use precomputed cross products with normal // body1.getVelocityInLocalPoint(contactConstraint.m_rel_posA,vel1); // body2.getVelocityInLocalPoint(contactConstraint.m_rel_posB,vel2); // btVector3 vel = vel1 - vel2; // btScalar rel_vel = contactConstraint.m_contactNormal.dot(vel); - btScalar rel_vel; - btScalar vel1Dotn = contactConstraint.m_contactNormal.dot(body1.m_linearVelocity) - + contactConstraint.m_relpos1CrossNormal.dot(body1.m_angularVelocity); - btScalar vel2Dotn = contactConstraint.m_contactNormal.dot(body2.m_linearVelocity) - + contactConstraint.m_relpos2CrossNormal.dot(body2.m_angularVelocity); + btScalar rel_vel; + btScalar vel1Dotn = contactConstraint.m_contactNormal.dot(body1.m_linearVelocity) + + contactConstraint.m_relpos1CrossNormal.dot(body1.m_angularVelocity); + btScalar vel2Dotn = contactConstraint.m_contactNormal.dot(body2.m_linearVelocity) + + contactConstraint.m_relpos2CrossNormal.dot(body2.m_angularVelocity); - rel_vel = vel1Dotn-vel2Dotn; + rel_vel = vel1Dotn-vel2Dotn; - btScalar positionalError = contactConstraint.m_penetration; - btScalar velocityError = contactConstraint.m_restitution - rel_vel;// * damping; + btScalar positionalError = contactConstraint.m_penetration; + btScalar velocityError = contactConstraint.m_restitution - rel_vel;// * damping; - btScalar penetrationImpulse = positionalError * contactConstraint.m_jacDiagABInv; - btScalar velocityImpulse = velocityError * contactConstraint.m_jacDiagABInv; - btScalar normalImpulse = penetrationImpulse+velocityImpulse; - - // See Erin Catto's GDC 2006 paper: Clamp the accumulated impulse - btScalar oldNormalImpulse = contactConstraint.m_appliedImpulse; - btScalar sum = oldNormalImpulse + normalImpulse; - contactConstraint.m_appliedImpulse = btScalar(0.) > sum ? btScalar(0.): sum; + btScalar penetrationImpulse = positionalError * contactConstraint.m_jacDiagABInv; + btScalar velocityImpulse = velocityError * contactConstraint.m_jacDiagABInv; + normalImpulse = penetrationImpulse+velocityImpulse; + + // See Erin Catto's GDC 2006 paper: Clamp the accumulated impulse + btScalar oldNormalImpulse = contactConstraint.m_appliedImpulse; + btScalar sum = oldNormalImpulse + normalImpulse; + contactConstraint.m_appliedImpulse = btScalar(0.) > sum ? btScalar(0.): sum; - btScalar oldVelocityImpulse = contactConstraint.m_appliedVelocityImpulse; - btScalar velocitySum = oldVelocityImpulse + velocityImpulse; - contactConstraint.m_appliedVelocityImpulse = btScalar(0.) > velocitySum ? btScalar(0.): velocitySum; + btScalar oldVelocityImpulse = contactConstraint.m_appliedVelocityImpulse; + btScalar velocitySum = oldVelocityImpulse + velocityImpulse; + contactConstraint.m_appliedVelocityImpulse = btScalar(0.) > velocitySum ? btScalar(0.): velocitySum; - normalImpulse = contactConstraint.m_appliedImpulse - oldNormalImpulse; - - if (body1.m_invMass) - { - body1.internalApplyImpulse(contactConstraint.m_contactNormal*body1.m_invMass, - contactConstraint.m_angularComponentA,normalImpulse); - } - if (body2.m_invMass) - { - body2.internalApplyImpulse(contactConstraint.m_contactNormal*body2.m_invMass, - contactConstraint.m_angularComponentB,-normalImpulse); - } + normalImpulse = contactConstraint.m_appliedImpulse - oldNormalImpulse; + if (body1.m_invMass) + { + body1.internalApplyImpulse(contactConstraint.m_contactNormal*body1.m_invMass, + contactConstraint.m_angularComponentA,normalImpulse); } + if (body2.m_invMass) + { + body2.internalApplyImpulse(contactConstraint.m_contactNormal*body2.m_invMass, + contactConstraint.m_angularComponentB,-normalImpulse); + } + + @@ -225,10 +223,11 @@ SIMD_FORCE_INLINE btScalar resolveSingleCollisionCombinedCacheFriendly( #ifndef NO_FRICTION_TANGENTIALS -SIMD_FORCE_INLINE btScalar resolveSingleFrictionCacheFriendly( +//SIMD_FORCE_INLINE +btScalar resolveSingleFrictionCacheFriendly( btSolverBody& body1, btSolverBody& body2, - btSolverConstraint& contactConstraint, + const btSolverConstraint& contactConstraint, const btContactSolverInfo& solverInfo, btScalar appliedNormalImpulse) { @@ -255,11 +254,36 @@ SIMD_FORCE_INLINE btScalar resolveSingleFrictionCacheFriendly( // calculate j that moves us to zero relative velocity j1 = -rel_vel * contactConstraint.m_jacDiagABInv; +#define CLAMP_ACCUMULATED_FRICTION_IMPULSE 1 +#ifdef CLAMP_ACCUMULATED_FRICTION_IMPULSE btScalar oldTangentImpulse = contactConstraint.m_appliedImpulse; contactConstraint.m_appliedImpulse = oldTangentImpulse + j1; - GEN_set_min(contactConstraint.m_appliedImpulse, limit); - GEN_set_max(contactConstraint.m_appliedImpulse, -limit); + + if (limit < contactConstraint.m_appliedImpulse) + { + contactConstraint.m_appliedImpulse = limit; + } else + { + if (contactConstraint.m_appliedImpulse < -limit) + contactConstraint.m_appliedImpulse = -limit; + } j1 = contactConstraint.m_appliedImpulse - oldTangentImpulse; +#else + if (limit < j1) + { + j1 = limit; + } else + { + if (j1 < -limit) + j1 = -limit; + } + +#endif //CLAMP_ACCUMULATED_FRICTION_IMPULSE + + //GEN_set_min(contactConstraint.m_appliedImpulse, limit); + //GEN_set_max(contactConstraint.m_appliedImpulse, -limit); + + } @@ -446,6 +470,8 @@ btScalar btSequentialImpulseConstraintSolver::solveGroupCacheFriendlySetup(btCol tmpSolverBodyPool.reserve(minReservation); + //don't convert all bodies, only the one we need so solver the constraints +/* { for (int i=0;igetIslandTag() >= 0) { - solverBodyIdA = rb0->getCompanionId(); + if (rb0->getCompanionId() >= 0) + { + //body has already been converted + solverBodyIdA = rb0->getCompanionId(); + } else + { + solverBodyIdA = tmpSolverBodyPool.size(); + btSolverBody& solverBody = tmpSolverBodyPool.expand(); + initSolverBody(&solverBody,rb0); + rb0->setCompanionId(solverBodyIdA); + } } else { //create a static body @@ -496,7 +532,16 @@ btScalar btSequentialImpulseConstraintSolver::solveGroupCacheFriendlySetup(btCol if (rb1->getIslandTag() >= 0) { - solverBodyIdB = rb1->getCompanionId(); + if (rb1->getCompanionId() >= 0) + { + solverBodyIdB = rb1->getCompanionId(); + } else + { + solverBodyIdB = tmpSolverBodyPool.size(); + btSolverBody& solverBody = tmpSolverBodyPool.expand(); + initSolverBody(&solverBody,rb1); + rb1->setCompanionId(solverBodyIdB); + } } else { //create a static body @@ -729,7 +774,7 @@ btScalar btSequentialImpulseConstraintSolver::solveGroupCacheFriendlyIterations( int numPoolConstraints = tmpSolverConstraintPool.size(); for (j=0;jsetLinearVelocity(m_linearVelocity); m_originalBody->setAngularVelocity(m_angularVelocity); + //m_originalBody->setCompanionId(-1); } } diff --git a/src/BulletDynamics/ConstraintSolver/btSolverConstraint.h b/src/BulletDynamics/ConstraintSolver/btSolverConstraint.h index cc85e1fee..a750560d3 100644 --- a/src/BulletDynamics/ConstraintSolver/btSolverConstraint.h +++ b/src/BulletDynamics/ConstraintSolver/btSolverConstraint.h @@ -30,20 +30,24 @@ ATTRIBUTE_ALIGNED16 (struct) btSolverConstraint BT_DECLARE_ALIGNED_ALLOCATOR(); btVector3 m_relpos1CrossNormal; - btVector3 m_relpos2CrossNormal; btVector3 m_contactNormal; - btVector3 m_angularComponentA; - btVector3 m_angularComponentB; - btScalar m_appliedVelocityImpulse; + btVector3 m_relpos2CrossNormal; + btVector3 m_angularComponentA; + + btVector3 m_angularComponentB; + mutable btScalar m_appliedVelocityImpulse; + mutable btScalar m_appliedImpulse; int m_solverBodyIdA; int m_solverBodyIdB; + btScalar m_friction; btScalar m_restitution; btScalar m_jacDiagABInv; btScalar m_penetration; - btScalar m_appliedImpulse; + + int m_constraintType; int m_frictionIndex; int m_unusedPadding[2]; diff --git a/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp b/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp index afdb226ea..857ed29d2 100644 --- a/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp +++ b/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp @@ -412,7 +412,7 @@ void btDiscreteDynamicsWorld::removeVehicle(btRaycastVehicle* vehicle) m_vehicles.remove(vehicle); } -inline int btGetConstraintIslandId(const btTypedConstraint* lhs) +SIMD_FORCE_INLINE int btGetConstraintIslandId(const btTypedConstraint* lhs) { int islandId; @@ -866,10 +866,24 @@ void btDiscreteDynamicsWorld::debugDrawObject(const btTransform& worldTransform, btScalar radius = coneShape->getRadius();//+coneShape->getMargin(); btScalar height = coneShape->getHeight();//+coneShape->getMargin(); btVector3 start = worldTransform.getOrigin(); - getDebugDrawer()->drawLine(start+worldTransform.getBasis() * btVector3(btScalar(0.),btScalar(0.),btScalar(0.5)*height),start+worldTransform.getBasis() * btVector3(radius,btScalar(0.),btScalar(-0.5)*height),color); - getDebugDrawer()->drawLine(start+worldTransform.getBasis() * btVector3(btScalar(0.),btScalar(0.),btScalar(0.5)*height),start+worldTransform.getBasis() * btVector3(-radius,btScalar(0.),btScalar(-0.5)*height),color); - getDebugDrawer()->drawLine(start+worldTransform.getBasis() * btVector3(btScalar(0.),btScalar(0.),btScalar(0.5)*height),start+worldTransform.getBasis() * btVector3(btScalar(0.),radius,btScalar(-0.5)*height),color); - getDebugDrawer()->drawLine(start+worldTransform.getBasis() * btVector3(btScalar(0.),btScalar(0.),btScalar(0.5)*height),start+worldTransform.getBasis() * btVector3(btScalar(0.),-radius,btScalar(-0.5)*height),color); + + int upAxis= coneShape->getConeUpIndex(); + + + btVector3 offsetHeight(0,0,0); + offsetHeight[upAxis] = height * btScalar(0.5); + btVector3 offsetRadius(0,0,0); + offsetRadius[(upAxis+1)%3] = radius; + btVector3 offset2Radius(0,0,0); + offset2Radius[(upAxis+2)%3] = radius; + + getDebugDrawer()->drawLine(start+worldTransform.getBasis() * (offsetHeight),start+worldTransform.getBasis() * (-offsetHeight+offsetRadius),color); + getDebugDrawer()->drawLine(start+worldTransform.getBasis() * (offsetHeight),start+worldTransform.getBasis() * (-offsetHeight-offsetRadius),color); + getDebugDrawer()->drawLine(start+worldTransform.getBasis() * (offsetHeight),start+worldTransform.getBasis() * (-offsetHeight+offset2Radius),color); + getDebugDrawer()->drawLine(start+worldTransform.getBasis() * (offsetHeight),start+worldTransform.getBasis() * (-offsetHeight-offset2Radius),color); + + + break; } @@ -878,7 +892,7 @@ void btDiscreteDynamicsWorld::debugDrawObject(const btTransform& worldTransform, const btCylinderShape* cylinder = static_cast(shape); int upAxis = cylinder->getUpAxis(); btScalar radius = cylinder->getRadius(); - btScalar halfHeight = cylinder->getHalfExtents()[upAxis]; + btScalar halfHeight = cylinder->getHalfExtentsWithMargin()[upAxis]; btVector3 start = worldTransform.getOrigin(); btVector3 offsetHeight(0,0,0); offsetHeight[upAxis] = halfHeight; diff --git a/src/BulletDynamics/Dynamics/btRigidBody.h b/src/BulletDynamics/Dynamics/btRigidBody.h index 52193cb5c..b11f9f76d 100644 --- a/src/BulletDynamics/Dynamics/btRigidBody.h +++ b/src/BulletDynamics/Dynamics/btRigidBody.h @@ -111,11 +111,11 @@ public: void setDamping(btScalar lin_damping, btScalar ang_damping); - inline const btCollisionShape* getCollisionShape() const { + SIMD_FORCE_INLINE const btCollisionShape* getCollisionShape() const { return m_collisionShape; } - inline btCollisionShape* getCollisionShape() { + SIMD_FORCE_INLINE btCollisionShape* getCollisionShape() { return m_collisionShape; } @@ -185,7 +185,7 @@ public: } //Optimization for the iterative solver: avoid calculating constant terms involving inertia, normal, relative position - inline void internalApplyImpulse(const btVector3& linearComponent, const btVector3& angularComponent,btScalar impulseMagnitude) + SIMD_FORCE_INLINE void internalApplyImpulse(const btVector3& linearComponent, const btVector3& angularComponent,btScalar impulseMagnitude) { if (m_inverseMass != btScalar(0.)) { @@ -255,7 +255,7 @@ public: - inline btScalar computeImpulseDenominator(const btPoint3& pos, const btVector3& normal) const + SIMD_FORCE_INLINE btScalar computeImpulseDenominator(const btPoint3& pos, const btVector3& normal) const { btVector3 r0 = pos - getCenterOfMassPosition(); @@ -267,13 +267,13 @@ public: } - inline btScalar computeAngularImpulseDenominator(const btVector3& axis) const + SIMD_FORCE_INLINE btScalar computeAngularImpulseDenominator(const btVector3& axis) const { btVector3 vec = axis * getInvInertiaTensorWorld(); return axis.dot(vec); } - inline void updateDeactivation(btScalar timeStep) + SIMD_FORCE_INLINE void updateDeactivation(btScalar timeStep) { if ( (getActivationState() == ISLAND_SLEEPING) || (getActivationState() == DISABLE_DEACTIVATION)) return; @@ -290,7 +290,7 @@ public: } - inline bool wantsSleeping() + SIMD_FORCE_INLINE bool wantsSleeping() { if (getActivationState() == DISABLE_DEACTIVATION) diff --git a/src/LinearMath/btAlignedAllocator.cpp b/src/LinearMath/btAlignedAllocator.cpp index 520c95566..e9d897dca 100644 --- a/src/LinearMath/btAlignedAllocator.cpp +++ b/src/LinearMath/btAlignedAllocator.cpp @@ -16,7 +16,7 @@ subject to the following restrictions: #include "btAlignedAllocator.h" -#if defined (BT_HAS_ALIGNED_ALOCATOR) +#if defined (BT_HAS_ALIGNED_ALLOCATOR) #include void* btAlignedAlloc (size_t size, int alignment) diff --git a/src/LinearMath/btScalar.h b/src/LinearMath/btScalar.h index 436cccaf1..d7accbde1 100644 --- a/src/LinearMath/btScalar.h +++ b/src/LinearMath/btScalar.h @@ -33,7 +33,7 @@ subject to the following restrictions: #define ATTRIBUTE_ALIGNED16(a) a #define ATTRIBUTE_ALIGNED128(a) a #else - #define BT_HAS_ALIGNED_ALOCATOR + #define BT_HAS_ALIGNED_ALLOCATOR #pragma warning(disable:4530) #pragma warning(disable:4996) #pragma warning(disable:4786) @@ -288,7 +288,7 @@ SIMD_FORCE_INLINE float btSelect(unsigned condition, float valueIfConditionNonZe #endif } -template inline void btSwap(T& a, T& b) +template SIMD_FORCE_INLINE void btSwap(T& a, T& b) { T tmp = a; a = b; diff --git a/src/LinearMath/btStackAlloc.h b/src/LinearMath/btStackAlloc.h index ca200cdd5..f60b24e41 100644 --- a/src/LinearMath/btStackAlloc.h +++ b/src/LinearMath/btStackAlloc.h @@ -77,7 +77,7 @@ public: return(0); } - inline btBlock* beginBlock() + SIMD_FORCE_INLINE btBlock* beginBlock() { btBlock* pb = (btBlock*)allocate(sizeof(btBlock)); pb->previous = current; @@ -85,7 +85,7 @@ public: current = pb; return(pb); } - inline void endBlock(btBlock* block) + SIMD_FORCE_INLINE void endBlock(btBlock* block) { btAssert(block==current); //Raise(L"Unmatched blocks"); diff --git a/src/LinearMath/btTransformUtil.h b/src/LinearMath/btTransformUtil.h index 8e1929d76..d39e2e100 100644 --- a/src/LinearMath/btTransformUtil.h +++ b/src/LinearMath/btTransformUtil.h @@ -25,7 +25,7 @@ subject to the following restrictions: #define btRecipSqrt(x) ((btScalar)(btScalar(1.0)/btSqrt(btScalar(x)))) /* reciprocal square root */ -inline btVector3 btAabbSupport(const btVector3& halfExtents,const btVector3& supportDir) +SIMD_FORCE_INLINE btVector3 btAabbSupport(const btVector3& halfExtents,const btVector3& supportDir) { return btVector3(supportDir.x() < btScalar(0.0) ? -halfExtents.x() : halfExtents.x(), supportDir.y() < btScalar(0.0) ? -halfExtents.y() : halfExtents.y(), @@ -33,7 +33,7 @@ inline btVector3 btAabbSupport(const btVector3& halfExtents,const btVector3& sup } -inline void btPlaneSpace1 (const btVector3& n, btVector3& p, btVector3& q) +SIMD_FORCE_INLINE void btPlaneSpace1 (const btVector3& n, btVector3& p, btVector3& q) { if (btFabs(n.z()) > SIMDSQRT12) { // choose p in y-z plane