From 9eddd42347b4d766fabaaff9f72d69632cb82f48 Mon Sep 17 00:00:00 2001 From: "erwin.coumans" Date: Sat, 10 Nov 2012 01:42:35 +0000 Subject: [PATCH] fix win32 (non-glut) cmake build. add partId/index to btCollisionObjectWrapper to be able to recognize recursive shape indices (a btCompoundShape with a btGimpactShape child shape etc) --- Demos/FractureDemo/CMakeLists.txt | 4 + Demos/OpenGL/GlutStuff.h | 2 +- Demos/OpenGL/Win32AppMain.cpp | 68 ++++++++++++++++ Demos/RaytestDemo/Win32RaytestDemo.cpp | 4 +- .../Win32VoronoiFractureDemo.cpp | 4 +- .../btCollisionDispatcher.cpp | 4 +- .../btCollisionObjectWrapper.h | 7 +- .../CollisionDispatch/btCollisionWorld.cpp | 16 ++-- .../btCompoundCollisionAlgorithm.cpp | 4 +- .../btConvexConcaveCollisionAlgorithm.cpp | 2 +- .../Gimpact/btGImpactCollisionAlgorithm.cpp | 80 +++++++++++++++---- .../Gimpact/btGImpactCollisionAlgorithm.h | 4 + .../SpuGatheringCollisionDispatcher.cpp | 8 +- .../btSoftBodyConcaveCollisionAlgorithm.cpp | 8 +- 14 files changed, 173 insertions(+), 42 deletions(-) diff --git a/Demos/FractureDemo/CMakeLists.txt b/Demos/FractureDemo/CMakeLists.txt index 1f7900b23..27736dc1d 100644 --- a/Demos/FractureDemo/CMakeLists.txt +++ b/Demos/FractureDemo/CMakeLists.txt @@ -83,6 +83,10 @@ ELSE (USE_GLUT) Win32FractureDemo.cpp FractureDemo.cpp FractureDemo.h + btFractureBody.h + btFractureBody.cpp + btFractureDynamicsWorld.cpp + btFractureDynamicsWorld.h ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc ) diff --git a/Demos/OpenGL/GlutStuff.h b/Demos/OpenGL/GlutStuff.h index 0f618be8b..76435ceeb 100644 --- a/Demos/OpenGL/GlutStuff.h +++ b/Demos/OpenGL/GlutStuff.h @@ -40,7 +40,7 @@ subject to the following restrictions: #ifdef _WINDOWS #define BT_ACTIVE_ALT VK_LMENU - +#define BT_ACTIVE_SHIFT VK_LSHIFT #else #define BT_KEY_K 'k' #define BT_KEY_LEFT GLUT_KEY_LEFT diff --git a/Demos/OpenGL/Win32AppMain.cpp b/Demos/OpenGL/Win32AppMain.cpp index 84f48a316..903961002 100644 --- a/Demos/OpenGL/Win32AppMain.cpp +++ b/Demos/OpenGL/Win32AppMain.cpp @@ -44,6 +44,69 @@ static int quitRequest = 0; // WinMain + +#ifdef USE_AMD_OPENCL + + + +#include "btOpenCLUtils.h" + +#include + +cl_context g_cxMainContext; +cl_device_id g_cdDevice; +cl_command_queue g_cqCommandQue; + + +// Returns true if OpenCL is initialized properly, false otherwise. +bool initCL( void* glCtx, void* glDC ) +{ + const char* vendorSDK = btOpenCLUtils::getSdkVendorName(); + printf("This program was compiled using the %s OpenCL SDK\n",vendorSDK); + + int ciErrNum = 0; + +#ifdef BT_USE_CLEW + ciErrNum = clewInit( "OpenCL.dll" ); + if ( ciErrNum != CLEW_SUCCESS ) { + return false; + } +#endif + +#if defined(CL_PLATFORM_MINI_CL) + cl_device_type deviceType = CL_DEVICE_TYPE_CPU; +#elif defined(CL_PLATFORM_AMD) + cl_device_type deviceType = CL_DEVICE_TYPE_GPU; +#elif defined(CL_PLATFORM_NVIDIA) + cl_device_type deviceType = CL_DEVICE_TYPE_GPU; +#else + cl_device_type deviceType = CL_DEVICE_TYPE_CPU; +#endif + + g_cxMainContext = btOpenCLUtils::createContextFromType(deviceType, &ciErrNum, glCtx, glDC); + oclCHECKERROR(ciErrNum, CL_SUCCESS); + + int numDev = btOpenCLUtils::getNumDevices(g_cxMainContext); + if (!numDev) + return false; + + g_cdDevice = btOpenCLUtils::getDevice(g_cxMainContext,0); + + btOpenCLDeviceInfo clInfo; + btOpenCLUtils::getDeviceInfo(g_cdDevice,clInfo); + btOpenCLUtils::printDeviceInfo(g_cdDevice); + + // create a command-queue + g_cqCommandQue = clCreateCommandQueue(g_cxMainContext, g_cdDevice, 0, &ciErrNum); + oclCHECKERROR(ciErrNum, CL_SUCCESS); + + return true; +} + +#endif //#ifdef USE_AMD_OPENCL + + + int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow) { @@ -56,7 +119,12 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, float theta = 0.0f; gDemoApplication = createDemo(); + +#ifdef USE_AMD_OPENCL + bool initialized = initCL(0,0); + btAssert(initialized); +#endif //USE_AMD_OPENCL // register window class wc.style = CS_OWNDC; diff --git a/Demos/RaytestDemo/Win32RaytestDemo.cpp b/Demos/RaytestDemo/Win32RaytestDemo.cpp index a55fb67eb..ae096bacc 100644 --- a/Demos/RaytestDemo/Win32RaytestDemo.cpp +++ b/Demos/RaytestDemo/Win32RaytestDemo.cpp @@ -14,12 +14,12 @@ subject to the following restrictions: 3. This notice may not be removed or altered from any source distribution. */ -#include "BasicDemo.h" +#include "RaytestDemo.h" ///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo DemoApplication* createDemo() { - return new BasicDemo(); + return new RaytestDemo(); } #endif diff --git a/Demos/VoronoiFractureDemo/Win32VoronoiFractureDemo.cpp b/Demos/VoronoiFractureDemo/Win32VoronoiFractureDemo.cpp index a55fb67eb..f0e095586 100644 --- a/Demos/VoronoiFractureDemo/Win32VoronoiFractureDemo.cpp +++ b/Demos/VoronoiFractureDemo/Win32VoronoiFractureDemo.cpp @@ -14,12 +14,12 @@ subject to the following restrictions: 3. This notice may not be removed or altered from any source distribution. */ -#include "BasicDemo.h" +#include "VoronoiFractureDemo.h" ///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo DemoApplication* createDemo() { - return new BasicDemo(); + return new VoronoiFractureDemo(); } #endif diff --git a/src/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp b/src/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp index d1ef1ffc9..669d0b6b5 100644 --- a/src/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp +++ b/src/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp @@ -258,8 +258,8 @@ void btCollisionDispatcher::defaultNearCallback(btBroadphasePair& collisionPair, if (dispatcher.needsCollision(colObj0,colObj1)) { - btCollisionObjectWrapper obj0Wrap(0,colObj0->getCollisionShape(),colObj0,colObj0->getWorldTransform()); - btCollisionObjectWrapper obj1Wrap(0,colObj1->getCollisionShape(),colObj1,colObj1->getWorldTransform()); + btCollisionObjectWrapper obj0Wrap(0,colObj0->getCollisionShape(),colObj0,colObj0->getWorldTransform(),-1,-1); + btCollisionObjectWrapper obj1Wrap(0,colObj1->getCollisionShape(),colObj1,colObj1->getWorldTransform(),-1,-1); //dispatcher will keep algorithms persistent in the collision pair diff --git a/src/BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h b/src/BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h index ac2e85cd0..4daa9441d 100644 --- a/src/BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h +++ b/src/BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h @@ -27,9 +27,12 @@ public: const btCollisionShape* m_shape; const btCollisionObject* m_collisionObject; const btTransform& m_worldTransform; + int m_partId; + int m_index; - btCollisionObjectWrapper(const btCollisionObjectWrapper* parent, const btCollisionShape* shape, const btCollisionObject* collisionObject, const btTransform& worldTransform) - : m_parent(parent), m_shape(shape), m_collisionObject(collisionObject), m_worldTransform(worldTransform) + btCollisionObjectWrapper(const btCollisionObjectWrapper* parent, const btCollisionShape* shape, const btCollisionObject* collisionObject, const btTransform& worldTransform, int partId, int index) + : m_parent(parent), m_shape(shape), m_collisionObject(collisionObject), m_worldTransform(worldTransform), + m_partId(partId), m_index(index) {} SIMD_FORCE_INLINE const btTransform& getWorldTransform() const { return m_worldTransform; } diff --git a/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp b/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp index 91f4c6200..4c0929169 100644 --- a/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp +++ b/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp @@ -268,7 +268,7 @@ void btCollisionWorld::rayTestSingle(const btTransform& rayFromTrans,const btTra const btTransform& colObjWorldTransform, RayResultCallback& resultCallback) { - btCollisionObjectWrapper colObWrap(0,collisionShape,collisionObject,colObjWorldTransform); + btCollisionObjectWrapper colObWrap(0,collisionShape,collisionObject,colObjWorldTransform,-1,-1); btCollisionWorld::rayTestSingleInternal(rayFromTrans,rayToTrans,&colObWrap,resultCallback); } @@ -509,7 +509,7 @@ void btCollisionWorld::rayTestSingleInternal(const btTransform& rayFromTrans,con const btTransform& childTrans = m_compoundShape->getChildTransform(i); btTransform childWorldTrans = m_colObjWorldTransform * childTrans; - btCollisionObjectWrapper tmpOb(0,childCollisionShape,m_collisionObject,childWorldTrans); + btCollisionObjectWrapper tmpOb(0,childCollisionShape,m_collisionObject,childWorldTrans,-1,i); // replace collision shape so that callback can determine the triangle @@ -567,7 +567,7 @@ void btCollisionWorld::objectQuerySingle(const btConvexShape* castShape,const bt const btTransform& colObjWorldTransform, ConvexResultCallback& resultCallback, btScalar allowedPenetration) { - btCollisionObjectWrapper tmpOb(0,collisionShape,collisionObject,colObjWorldTransform); + btCollisionObjectWrapper tmpOb(0,collisionShape,collisionObject,colObjWorldTransform,-1,-1); btCollisionWorld::objectQuerySingleInternal(castShape,convexFromTrans,convexToTrans,&tmpOb,resultCallback,allowedPenetration); } @@ -823,7 +823,7 @@ void btCollisionWorld::objectQuerySingleInternal(const btConvexShape* castShape, LocalInfoAdder my_cb(i, &resultCallback); - btCollisionObjectWrapper tmpObj(colObjWrap,childCollisionShape,colObjWrap->getCollisionObject(),childWorldTrans); + btCollisionObjectWrapper tmpObj(colObjWrap,childCollisionShape,colObjWrap->getCollisionObject(),childWorldTrans,-1,i); objectQuerySingleInternal(castShape, convexFromTrans,convexToTrans, &tmpObj,my_cb, allowedPenetration); @@ -1135,8 +1135,8 @@ struct btSingleContactCallback : public btBroadphaseAabbCallback //only perform raycast if filterMask matches if(m_resultCallback.needsCollision(collisionObject->getBroadphaseHandle())) { - btCollisionObjectWrapper ob0(0,m_collisionObject->getCollisionShape(),m_collisionObject,m_collisionObject->getWorldTransform()); - btCollisionObjectWrapper ob1(0,collisionObject->getCollisionShape(),collisionObject,collisionObject->getWorldTransform()); + btCollisionObjectWrapper ob0(0,m_collisionObject->getCollisionShape(),m_collisionObject,m_collisionObject->getWorldTransform(),-1,-1); + btCollisionObjectWrapper ob1(0,collisionObject->getCollisionShape(),collisionObject,collisionObject->getWorldTransform(),-1,-1); btCollisionAlgorithm* algorithm = m_world->getDispatcher()->findAlgorithm(&ob0,&ob1); if (algorithm) @@ -1171,8 +1171,8 @@ void btCollisionWorld::contactTest( btCollisionObject* colObj, ContactResultCall ///it reports one or more contact points (including the one with deepest penetration) void btCollisionWorld::contactPairTest(btCollisionObject* colObjA, btCollisionObject* colObjB, ContactResultCallback& resultCallback) { - btCollisionObjectWrapper obA(0,colObjA->getCollisionShape(),colObjA,colObjA->getWorldTransform()); - btCollisionObjectWrapper obB(0,colObjB->getCollisionShape(),colObjB,colObjB->getWorldTransform()); + btCollisionObjectWrapper obA(0,colObjA->getCollisionShape(),colObjA,colObjA->getWorldTransform(),-1,-1); + btCollisionObjectWrapper obB(0,colObjB->getCollisionShape(),colObjB,colObjB->getWorldTransform(),-1,-1); btCollisionAlgorithm* algorithm = getDispatcher()->findAlgorithm(&obA,&obB); if (algorithm) diff --git a/src/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp b/src/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp index 290d67797..39b86a289 100644 --- a/src/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp +++ b/src/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp @@ -61,7 +61,7 @@ void btCompoundCollisionAlgorithm::preallocateChildAlgorithms(const btCollisionO const btCollisionShape* childShape = compoundShape->getChildShape(i); - btCollisionObjectWrapper childWrap(colObjWrap,childShape,colObjWrap->getCollisionObject(),colObjWrap->getWorldTransform());//wrong child trans, but unused (hopefully) + btCollisionObjectWrapper childWrap(colObjWrap,childShape,colObjWrap->getCollisionObject(),colObjWrap->getWorldTransform(),-1,i);//wrong child trans, but unused (hopefully) m_childCollisionAlgorithms[i] = m_dispatcher->findAlgorithm(&childWrap,otherObjWrap,m_sharedManifold); } } @@ -132,7 +132,7 @@ public: if (TestAabbAgainstAabb2(aabbMin0,aabbMax0,aabbMin1,aabbMax1)) { - btCollisionObjectWrapper compoundWrap(this->m_compoundColObjWrap,childShape,m_compoundColObjWrap->getCollisionObject(),newChildWorldTrans); + btCollisionObjectWrapper compoundWrap(this->m_compoundColObjWrap,childShape,m_compoundColObjWrap->getCollisionObject(),newChildWorldTrans,-1,index); //the contactpoint is still projected back using the original inverted worldtrans diff --git a/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp b/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp index 6905e9737..18fde771b 100644 --- a/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp +++ b/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp @@ -110,7 +110,7 @@ void btConvexTriangleCallback::processTriangle(btVector3* triangle,int partId, i tm.setMargin(m_collisionMarginTriangle); - btCollisionObjectWrapper triObWrap(m_triBodyWrap,&tm,m_triBodyWrap->getCollisionObject(),m_triBodyWrap->getWorldTransform());//correct transform? + btCollisionObjectWrapper triObWrap(m_triBodyWrap,&tm,m_triBodyWrap->getCollisionObject(),m_triBodyWrap->getWorldTransform(),partId,triangleIndex);//correct transform? btCollisionAlgorithm* colAlgo = ci.m_dispatcher1->findAlgorithm(m_convexBodyWrap,&triObWrap,m_manifoldPtr); const btCollisionObjectWrapper* tmpWrap = 0; diff --git a/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp b/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp index 5997e443e..2e87475e3 100644 --- a/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp +++ b/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp @@ -231,17 +231,15 @@ void btGImpactCollisionAlgorithm::shape_vs_shape_collision( { - btCollisionObjectWrapper ob0(body0Wrap,shape0,body0Wrap->getCollisionObject(), body0Wrap->getWorldTransform()); - btCollisionObjectWrapper ob1(body1Wrap,shape1,body1Wrap->getCollisionObject(),body1Wrap->getWorldTransform()); - - btCollisionAlgorithm* algor = newAlgorithm(&ob0,&ob1); + + btCollisionAlgorithm* algor = newAlgorithm(body0Wrap,body1Wrap); // post : checkManifold is called m_resultOut->setShapeIdentifiersA(m_part0,m_triface0); m_resultOut->setShapeIdentifiersB(m_part1,m_triface1); - - algor->processCollision(&ob0,&ob1,*m_dispatchInfo,m_resultOut); - + + algor->processCollision(body0Wrap,body1Wrap,*m_dispatchInfo,m_resultOut); + algor->~btCollisionAlgorithm(); m_dispatcher->freeCollisionAlgorithm(algor); } @@ -258,8 +256,8 @@ void btGImpactCollisionAlgorithm::convex_vs_convex_collision( m_resultOut->setShapeIdentifiersA(m_part0,m_triface0); m_resultOut->setShapeIdentifiersB(m_part1,m_triface1); - btCollisionObjectWrapper ob0(body0Wrap,shape0,body0Wrap->getCollisionObject(),body0Wrap->getWorldTransform()); - btCollisionObjectWrapper ob1(body1Wrap,shape1,body1Wrap->getCollisionObject(),body1Wrap->getWorldTransform()); + btCollisionObjectWrapper ob0(body0Wrap,shape0,body0Wrap->getCollisionObject(),body0Wrap->getWorldTransform(),m_part0,m_triface0); + btCollisionObjectWrapper ob1(body1Wrap,shape1,body1Wrap->getCollisionObject(),body1Wrap->getWorldTransform(),m_part1,m_triface1); checkConvexAlgorithm(&ob0,&ob1); m_convex_algorithm->processCollision(&ob0,&ob1,*m_dispatchInfo,m_resultOut); @@ -553,8 +551,8 @@ void btGImpactCollisionAlgorithm::gimpact_vs_gimpact( tr1 = orgtrans1*shape1->getChildTransform(m_triface1); } - btCollisionObjectWrapper ob0(body0Wrap,colshape0,body0Wrap->getCollisionObject(),tr0); - btCollisionObjectWrapper ob1(body1Wrap,colshape1,body1Wrap->getCollisionObject(),tr1); + btCollisionObjectWrapper ob0(body0Wrap,colshape0,body0Wrap->getCollisionObject(),tr0,m_part0,m_triface0); + btCollisionObjectWrapper ob1(body1Wrap,colshape1,body1Wrap->getCollisionObject(),tr1,m_part1,m_triface1); //collide two convex shapes convex_vs_convex_collision(&ob0,&ob1,colshape0,colshape1); @@ -654,17 +652,29 @@ void btGImpactCollisionAlgorithm::gimpact_vs_shape(const btCollisionObjectWrappe tr0 = orgtrans0*shape0->getChildTransform(child_index); } - btCollisionObjectWrapper ob0(body0Wrap,colshape0,body0Wrap->getCollisionObject(),body0Wrap->getWorldTransform()); + btCollisionObjectWrapper ob0(body0Wrap,colshape0,body0Wrap->getCollisionObject(),body0Wrap->getWorldTransform(),m_part0,m_triface0); + const btCollisionObjectWrapper* prevObj0 = m_resultOut->getBody0Wrap(); + + if (m_resultOut->getBody0Wrap()->getCollisionObject()==ob0.getCollisionObject()) + { + m_resultOut->setBody0Wrap(&ob0); + } else + { + m_resultOut->setBody1Wrap(&ob0); + } //collide two shapes if(swapped) { + shape_vs_shape_collision(body1Wrap,&ob0,shape1,colshape0); } else { + shape_vs_shape_collision(&ob0,body1Wrap,colshape0,shape1); } + m_resultOut->setBody0Wrap(prevObj0); } @@ -686,10 +696,29 @@ void btGImpactCollisionAlgorithm::gimpact_vs_compoundshape(const btCollisionObje const btCollisionShape * colshape1 = shape1->getChildShape(i); btTransform childtrans1 = orgtrans1*shape1->getChildTransform(i); - btCollisionObjectWrapper ob1(body1Wrap,colshape1,body1Wrap->getCollisionObject(),childtrans1); + btCollisionObjectWrapper ob1(body1Wrap,colshape1,body1Wrap->getCollisionObject(),childtrans1,-1,i); + + const btCollisionObjectWrapper* tmp = 0; + if (m_resultOut->getBody0Wrap()->getCollisionObject()==ob1.getCollisionObject()) + { + tmp = m_resultOut->getBody0Wrap(); + m_resultOut->setBody0Wrap(&ob1); + } else + { + tmp = m_resultOut->getBody1Wrap(); + m_resultOut->setBody1Wrap(&ob1); + } //collide child shape gimpact_vs_shape(body0Wrap, &ob1, shape0,colshape1,swapped); + + if (m_resultOut->getBody0Wrap()->getCollisionObject()==ob1.getCollisionObject()) + { + m_resultOut->setBody0Wrap(tmp); + } else + { + m_resultOut->setBody1Wrap(tmp); + } } } @@ -778,8 +807,31 @@ public: algorithm->setPart1(partId); algorithm->setFace1(triangleIndex); } + + btCollisionObjectWrapper ob1Wrap(body1Wrap,&tri1,body1Wrap->getCollisionObject(),body1Wrap->getWorldTransform(),partId,triangleIndex); + const btCollisionObjectWrapper * tmp = 0; + + if (algorithm->internalGetResultOut()->getBody0Wrap()->getCollisionObject()==ob1Wrap.getCollisionObject()) + { + tmp = algorithm->internalGetResultOut()->getBody0Wrap(); + algorithm->internalGetResultOut()->setBody0Wrap(&ob1Wrap); + } else + { + tmp = algorithm->internalGetResultOut()->getBody1Wrap(); + algorithm->internalGetResultOut()->setBody1Wrap(&ob1Wrap); + } + algorithm->gimpact_vs_shape( - body0Wrap,body1Wrap,gimpactshape0,&tri1,swapped); + body0Wrap,&ob1Wrap,gimpactshape0,&tri1,swapped); + + if (algorithm->internalGetResultOut()->getBody0Wrap()->getCollisionObject()==ob1Wrap.getCollisionObject()) + { + algorithm->internalGetResultOut()->setBody0Wrap(tmp); + } else + { + algorithm->internalGetResultOut()->setBody1Wrap(tmp); + } + } }; diff --git a/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h b/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h index c01b1eee8..f85a94cb4 100644 --- a/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h +++ b/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h @@ -210,6 +210,10 @@ public: manifoldArray.push_back(m_manifoldPtr); } + btManifoldResult* internalGetResultOut() + { + return m_resultOut; + } struct CreateFunc :public btCollisionAlgorithmCreateFunc { diff --git a/src/BulletMultiThreaded/SpuGatheringCollisionDispatcher.cpp b/src/BulletMultiThreaded/SpuGatheringCollisionDispatcher.cpp index b9e88a07f..c8712dab7 100644 --- a/src/BulletMultiThreaded/SpuGatheringCollisionDispatcher.cpp +++ b/src/BulletMultiThreaded/SpuGatheringCollisionDispatcher.cpp @@ -166,8 +166,8 @@ public: collisionPair.m_internalTmpValue = 2; } else { - btCollisionObjectWrapper ob0(0,colObj0->getCollisionShape(),colObj0,colObj0->getWorldTransform()); - btCollisionObjectWrapper ob1(0,colObj1->getCollisionShape(),colObj1,colObj1->getWorldTransform()); + btCollisionObjectWrapper ob0(0,colObj0->getCollisionShape(),colObj0,colObj0->getWorldTransform(),-1,-1); + btCollisionObjectWrapper ob1(0,colObj1->getCollisionShape(),colObj1,colObj1->getWorldTransform(),-1,-1); collisionPair.m_algorithm = m_dispatcher->findAlgorithm(&ob0,&ob1); collisionPair.m_internalTmpValue = 3; @@ -245,8 +245,8 @@ void SpuGatheringCollisionDispatcher::dispatchAllCollisionPairs(btOverlappingPai if (dispatcher->needsCollision(colObj0,colObj1)) { //discrete collision detection query - btCollisionObjectWrapper ob0(0,colObj0->getCollisionShape(),colObj0,colObj0->getWorldTransform()); - btCollisionObjectWrapper ob1(0,colObj1->getCollisionShape(),colObj1,colObj1->getWorldTransform()); + btCollisionObjectWrapper ob0(0,colObj0->getCollisionShape(),colObj0,colObj0->getWorldTransform(),-1,-1); + btCollisionObjectWrapper ob1(0,colObj1->getCollisionShape(),colObj1,colObj1->getWorldTransform(),-1,-1); btManifoldResult contactPointResult(&ob0,&ob1); diff --git a/src/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp b/src/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp index 6e94d0a81..9f0d44526 100644 --- a/src/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp +++ b/src/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp @@ -117,9 +117,9 @@ void btSoftBodyTriangleCallback::processTriangle(btVector3* triangle,int partId, //copy over user pointers to temporary shape tm->setUserPointer(m_triBody->getCollisionShape()->getUserPointer()); - btCollisionObjectWrapper softBody(0,m_softBody->getCollisionShape(),m_softBody,m_softBody->getWorldTransform()); + btCollisionObjectWrapper softBody(0,m_softBody->getCollisionShape(),m_softBody,m_softBody->getWorldTransform(),-1,-1); //btCollisionObjectWrapper triBody(0,tm, ob, btTransform::getIdentity());//ob->getWorldTransform());//?? - btCollisionObjectWrapper triBody(0,tm, m_triBody, m_triBody->getWorldTransform()); + btCollisionObjectWrapper triBody(0,tm, m_triBody, m_triBody->getWorldTransform(),partId, triangleIndex); btCollisionAlgorithm* colAlgo = ci.m_dispatcher1->findAlgorithm(&softBody,&triBody,0);//m_manifoldPtr); @@ -161,8 +161,8 @@ void btSoftBodyTriangleCallback::processTriangle(btVector3* triangle,int partId, tm->setUserPointer(m_triBody->getCollisionShape()->getUserPointer()); - btCollisionObjectWrapper softBody(0,m_softBody->getCollisionShape(),m_softBody,m_softBody->getWorldTransform()); - btCollisionObjectWrapper triBody(0,tm, m_triBody, m_triBody->getWorldTransform());//btTransform::getIdentity());//?? + btCollisionObjectWrapper softBody(0,m_softBody->getCollisionShape(),m_softBody,m_softBody->getWorldTransform(),-1,-1); + btCollisionObjectWrapper triBody(0,tm, m_triBody, m_triBody->getWorldTransform(),partId, triangleIndex);//btTransform::getIdentity());//?? btCollisionAlgorithm* colAlgo = ci.m_dispatcher1->findAlgorithm(&softBody,&triBody,0);//m_manifoldPtr);