// pass null to use default construction info public btDefaultCollisionConfiguration( btDefaultCollisionConstructionInfo constructionInfo ) //btDefaultCollisionConfiguration(btStackAlloc* stackAlloc,btPoolAllocator* persistentManifoldPool,btPoolAllocator* collisionAlgorithmPool) { if( constructionInfo == null ) constructionInfo = new btDefaultCollisionConstructionInfo(); m_simplexSolver = BulletGlobals.VoronoiSimplexSolverPool.Get(); #if !REMOVE_OBSOLETE_SOLVER if( constructionInfo.m_useEpaPenetrationAlgorithm ) #endif { m_pdSolver = BulletGlobals.GjkEpaPenetrationDepthSolverPool.Get(); } #if !REMOVE_OBSOLETE_SOLVER else { mem = btAlignedAlloc( sizeof( btMinkowskiPenetrationDepthSolver ), 16 ); m_pdSolver = new btMinkowskiPenetrationDepthSolver; } #endif //default CreationFunctions, filling the m_doubleDispatch table m_convexConvexCreateFunc = new btConvexConvexAlgorithm.CreateFunc( m_simplexSolver, m_pdSolver ); m_convexConcaveCreateFunc = new btConvexConcaveCollisionAlgorithm.CreateFunc(); m_swappedConvexConcaveCreateFunc = new btConvexConcaveCollisionAlgorithm.SwappedCreateFunc(); m_compoundCreateFunc = new btCompoundCollisionAlgorithm.CreateFunc(); m_compoundCompoundCreateFunc = new btCompoundCompoundCollisionAlgorithm.CreateFunc(); m_swappedCompoundCreateFunc = new btCompoundCollisionAlgorithm.SwappedCreateFunc(); m_emptyCreateFunc = new btEmptyAlgorithm.CreateFunc(); m_sphereSphereCF = new btSphereSphereCollisionAlgorithm.CreateFunc(); #if USE_BUGGY_SPHERE_BOX_ALGORITHM m_sphereBoxCF = new(mem) btSphereBoxCollisionAlgorithm.CreateFunc; m_boxSphereCF = new (mem)btSphereBoxCollisionAlgorithm.CreateFunc; m_boxSphereCF.m_swapped = true; #endif //USE_BUGGY_SPHERE_BOX_ALGORITHM m_sphereTriangleCF = new btSphereTriangleCollisionAlgorithm.CreateFunc(); m_triangleSphereCF = new btSphereTriangleCollisionAlgorithm.CreateFunc(); m_triangleSphereCF.m_swapped = true; m_boxBoxCF = new btBoxBoxCollisionAlgorithm.CreateFunc(); //convex versus plane m_convexPlaneCF = new btConvexPlaneCollisionAlgorithm.CreateFunc(); m_planeConvexCF = new btConvexPlaneCollisionAlgorithm.CreateFunc(); m_planeConvexCF.m_swapped = true; ///calculate maximum element size, big enough to fit any collision algorithm in the memory pool /* int maxSize = sizeof( btConvexConvexAlgorithm ); int maxSize2 = sizeof( btConvexConcaveCollisionAlgorithm ); int maxSize3 = sizeof( btCompoundCollisionAlgorithm ); int maxSize4 = sizeof( btCompoundCompoundCollisionAlgorithm ); int collisionAlgorithmMaxElementSize = btScalar.btMax( maxSize, constructionInfo.m_customCollisionAlgorithmMaxElementSize ); collisionAlgorithmMaxElementSize = btScalar.btMax( collisionAlgorithmMaxElementSize, maxSize2 ); collisionAlgorithmMaxElementSize = btScalar.btMax( collisionAlgorithmMaxElementSize, maxSize3 ); collisionAlgorithmMaxElementSize = btScalar.btMax( collisionAlgorithmMaxElementSize, maxSize4 ); */ /* if( constructionInfo.m_persistentManifoldPool ) { m_ownsPersistentManifoldPool = false; m_persistentManifoldPool = constructionInfo.m_persistentManifoldPool; } else { m_ownsPersistentManifoldPool = true; object mem = btAlignedAlloc( sizeof( btPoolAllocator ), 16 ); m_persistentManifoldPool = new btPoolAllocator( sizeof( btPersistentManifold ), constructionInfo.m_defaultMaxPersistentManifoldPoolSize ); } if( constructionInfo.m_collisionAlgorithmPool ) { m_ownsCollisionAlgorithmPool = false; m_collisionAlgorithmPool = constructionInfo.m_collisionAlgorithmPool; } else { m_ownsCollisionAlgorithmPool = true; object mem = btAlignedAlloc( sizeof( btPoolAllocator ), 16 ); m_collisionAlgorithmPool = new btPoolAllocator( collisionAlgorithmMaxElementSize, constructionInfo.m_defaultMaxCollisionAlgorithmPoolSize ); } */ }
void registerCollisionCreateFunc( int proxyType0, int proxyType1, btCollisionAlgorithmCreateFunc createFunc ) { m_doubleDispatch[proxyType0, proxyType1] = createFunc; }