[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11027] trunk/blender: upgrade to latest Bullet 2.53.

Erwin Coumans blender at erwincoumans.com
Sat Jun 23 07:28:10 CEST 2007


Revision: 11027
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11027
Author:   erwin
Date:     2007-06-23 07:28:07 +0200 (Sat, 23 Jun 2007)

Log Message:
-----------
upgrade to latest Bullet 2.53. cross the fingers it doesn't break one of the exotic or less exotic platforms

Modified Paths:
--------------
    trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btAxisSweep3.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btAxisSweep3.h
    trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btBroadphaseInterface.h
    trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h
    trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h
    trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btDispatcher.h
    trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h
    trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/SphereTriangleDetector.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/SphereTriangleDetector.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionCreateFunc.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionDispatcher.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btManifoldResult.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btManifoldResult.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btSimulationIslandManager.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btUnionFind.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btUnionFind.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btBoxShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btBoxShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btCollisionMargin.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btCollisionShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btCollisionShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btCompoundShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btCompoundShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btConcaveShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btConcaveShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btConeShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btConeShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btConvexHullShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btConvexHullShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btConvexShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btConvexShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btCylinderShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btCylinderShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btEmptyShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btEmptyShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btMinkowskiSumShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btMinkowskiSumShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btMultiSphereShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btMultiSphereShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btOptimizedBvh.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btOptimizedBvh.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btPolyhedralConvexShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btSphereShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btSphereShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btStaticPlaneShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btStaticPlaneShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btStridingMeshInterface.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btStridingMeshInterface.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btTetrahedronShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btTetrahedronShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleBuffer.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleCallback.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleMesh.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleMesh.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleMeshShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleShape.h
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btConvexCast.h
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btGjkEpa.h
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btPointCollector.h
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btRaycastCallback.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConstraintSolver.h
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btContactConstraint.cpp
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btContactConstraint.h
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btContactSolverInfo.h
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btHingeConstraint.h
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btJacobianEntry.h
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.cpp
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.cpp
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btTypedConstraint.h
    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp
    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h
    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDynamicsWorld.h
    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.cpp
    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.h
    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp
    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h
    trunk/blender/extern/bullet2/src/BulletDynamics/Vehicle/btRaycastVehicle.cpp
    trunk/blender/extern/bullet2/src/BulletDynamics/Vehicle/btRaycastVehicle.h
    trunk/blender/extern/bullet2/src/BulletDynamics/Vehicle/btVehicleRaycaster.h
    trunk/blender/extern/bullet2/src/BulletDynamics/Vehicle/btWheelInfo.cpp
    trunk/blender/extern/bullet2/src/BulletDynamics/Vehicle/btWheelInfo.h
    trunk/blender/extern/bullet2/src/Jamfile
    trunk/blender/extern/bullet2/src/LinearMath/btAabbUtil2.h
    trunk/blender/extern/bullet2/src/LinearMath/btAlignedAllocator.cpp
    trunk/blender/extern/bullet2/src/LinearMath/btAlignedAllocator.h
    trunk/blender/extern/bullet2/src/LinearMath/btAlignedObjectArray.h
    trunk/blender/extern/bullet2/src/LinearMath/btDefaultMotionState.h
    trunk/blender/extern/bullet2/src/LinearMath/btGeometryUtil.cpp
    trunk/blender/extern/bullet2/src/LinearMath/btGeometryUtil.h
    trunk/blender/extern/bullet2/src/LinearMath/btIDebugDraw.h
    trunk/blender/extern/bullet2/src/LinearMath/btMatrix3x3.h
    trunk/blender/extern/bullet2/src/LinearMath/btMotionState.h
    trunk/blender/extern/bullet2/src/LinearMath/btPoint3.h
    trunk/blender/extern/bullet2/src/LinearMath/btQuadWord.h
    trunk/blender/extern/bullet2/src/LinearMath/btQuaternion.h
    trunk/blender/extern/bullet2/src/LinearMath/btQuickprof.cpp
    trunk/blender/extern/bullet2/src/LinearMath/btQuickprof.h
    trunk/blender/extern/bullet2/src/LinearMath/btScalar.h
    trunk/blender/extern/bullet2/src/LinearMath/btSimdMinMax.h
    trunk/blender/extern/bullet2/src/LinearMath/btTransform.h
    trunk/blender/extern/bullet2/src/LinearMath/btTransformUtil.h
    trunk/blender/extern/bullet2/src/LinearMath/btVector3.h
    trunk/blender/extern/bullet2/src/btBulletCollisionCommon.h
    trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp

Added Paths:
-----------
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btCapsuleShape.cpp
    trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btCapsuleShape.h
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSolverBody.h
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSolverConstraint.h

Modified: trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btAxisSweep3.cpp
===================================================================
--- trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btAxisSweep3.cpp	2007-06-23 05:02:31 UTC (rev 11026)
+++ trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btAxisSweep3.cpp	2007-06-23 05:28:07 UTC (rev 11027)
@@ -21,9 +21,34 @@
 
 #include <assert.h>
 
+#ifdef DEBUG_BROADPHASE
+#include <stdio.h>
+void btAxisSweep3::debugPrintAxis(int axis, bool checkCardinality)
+{
+	int numEdges = m_pHandles[0].m_maxEdges[axis];
+	printf("SAP Axis %d, numEdges=%d\n",axis,numEdges);
+
+	int i;
+	for (i=0;i<numEdges+1;i++)
+	{
+		Edge* pEdge = m_pEdges[axis] + i;
+		Handle* pHandlePrev = getHandle(pEdge->m_handle);
+		int handleIndex = pEdge->IsMax()? pHandlePrev->m_maxEdges[axis] : pHandlePrev->m_minEdges[axis];
+		char beginOrEnd;
+		beginOrEnd=pEdge->IsMax()?'E':'B';
+		printf("	[%c,h=%d,p=%x,i=%d]\n",beginOrEnd,pEdge->m_handle,pEdge->m_pos,handleIndex);
+	}
+
+	if (checkCardinality)
+		assert(numEdges == m_numHandles*2+1);
+}
+#endif //DEBUG_BROADPHASE
+
+
 btBroadphaseProxy*	btAxisSweep3::createProxy(  const btVector3& min,  const btVector3& max,int shapeType,void* userPtr,short int collisionFilterGroup,short int collisionFilterMask)
 {
-		unsigned short handleId = addHandle(min,max, userPtr,collisionFilterGroup,collisionFilterMask);
+		(void)shapeType;
+		BP_FP_INT_TYPE handleId = addHandle(min,max, userPtr,collisionFilterGroup,collisionFilterMask);
 		
 		Handle* handle = getHandle(handleId);
 				
@@ -40,6 +65,7 @@
 {
 	Handle* handle = static_cast<Handle*>(proxy);
 	updateHandle(handle->m_handleId,aabbMin,aabbMax);
+
 }
 
 
@@ -50,10 +76,11 @@
 btAxisSweep3::btAxisSweep3(const btPoint3& worldAabbMin,const btPoint3& worldAabbMax, int maxHandles)
 :btOverlappingPairCache()
 {
+	m_invalidPair = 0;
 	//assert(bounds.HasVolume());
 
 	// 1 handle is reserved as sentinel
-	assert(maxHandles > 1 && maxHandles < 32767);
+	btAssert(maxHandles > 1 && maxHandles < BP_MAX_HANDLES);
 
 	// init bounds
 	m_worldAabbMin = worldAabbMin;
@@ -61,8 +88,10 @@
 
 	btVector3 aabbSize = m_worldAabbMax - m_worldAabbMin;
 
-	m_quantize = btVector3(65535.0f,65535.0f,65535.0f) / aabbSize;
+	BP_FP_INT_TYPE	maxInt = BP_HANDLE_SENTINEL;
 
+	m_quantize = btVector3(btScalar(maxInt),btScalar(maxInt),btScalar(maxInt)) / aabbSize;
+
 	// allocate handles buffer and put all handles on free list
 	m_pHandles = new Handle[maxHandles];
 	m_maxHandles = maxHandles;
@@ -71,7 +100,7 @@
 	// handle 0 is reserved as the null index, and is also used as the sentinel
 	m_firstFreeHandle = 1;
 	{
-		for (int i = m_firstFreeHandle; i < maxHandles; i++)
+		for (BP_FP_INT_TYPE i = m_firstFreeHandle; i < maxHandles; i++)
 			m_pHandles[i].SetNextFree(i + 1);
 		m_pHandles[maxHandles - 1].SetNextFree(0);
 	}
@@ -94,9 +123,14 @@
 
 		m_pEdges[axis][0].m_pos = 0;
 		m_pEdges[axis][0].m_handle = 0;
-		m_pEdges[axis][1].m_pos = 0xffff;
+		m_pEdges[axis][1].m_pos = BP_HANDLE_SENTINEL;
 		m_pEdges[axis][1].m_handle = 0;
+#ifdef DEBUG_BROADPHASE
+		debugPrintAxis(axis);
+#endif //DEBUG_BROADPHASE
+
 	}
+
 }
 
 btAxisSweep3::~btAxisSweep3()
@@ -107,43 +141,36 @@
 	delete[] m_pHandles;
 }
 
-void btAxisSweep3::quantize(unsigned short* out, const btPoint3& point, int isMax) const
+void btAxisSweep3::quantize(BP_FP_INT_TYPE* out, const btPoint3& point, int isMax) const
 {
 	btPoint3 clampedPoint(point);
-	/*
-	if (isMax)
-		clampedPoint += btVector3(10,10,10);
-	else
-	{
-		clampedPoint -= btVector3(10,10,10);
-	}
-	*/
+	
 
 
 	clampedPoint.setMax(m_worldAabbMin);
 	clampedPoint.setMin(m_worldAabbMax);
 
 	btVector3 v = (clampedPoint - m_worldAabbMin) * m_quantize;
-	out[0] = (unsigned short)(((int)v.getX() & 0xfffc) | isMax);
-	out[1] = (unsigned short)(((int)v.getY() & 0xfffc) | isMax);
-	out[2] = (unsigned short)(((int)v.getZ() & 0xfffc) | isMax);
+	out[0] = (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v.getX() & BP_HANDLE_MASK) | isMax);
+	out[1] = (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v.getY() & BP_HANDLE_MASK) | isMax);
+	out[2] = (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v.getZ() & BP_HANDLE_MASK) | isMax);
 	
 }
 
 
 
-unsigned short btAxisSweep3::allocHandle()
+BP_FP_INT_TYPE btAxisSweep3::allocHandle()
 {
 	assert(m_firstFreeHandle);
 
-	unsigned short handle = m_firstFreeHandle;
+	BP_FP_INT_TYPE handle = m_firstFreeHandle;
 	m_firstFreeHandle = getHandle(handle)->GetNextFree();
 	m_numHandles++;
 
 	return handle;
 }
 
-void btAxisSweep3::freeHandle(unsigned short handle)
+void btAxisSweep3::freeHandle(BP_FP_INT_TYPE handle)
 {
 	assert(handle > 0 && handle < m_maxHandles);
 
@@ -155,15 +182,15 @@
 
 
 
-unsigned short btAxisSweep3::addHandle(const btPoint3& aabbMin,const btPoint3& aabbMax, void* pOwner,short int collisionFilterGroup,short int collisionFilterMask)
+BP_FP_INT_TYPE btAxisSweep3::addHandle(const btPoint3& aabbMin,const btPoint3& aabbMax, void* pOwner,short int collisionFilterGroup,short int collisionFilterMask)
 {
 	// quantize the bounds
-	unsigned short min[3], max[3];
+	BP_FP_INT_TYPE min[3], max[3];
 	quantize(min, aabbMin, 0);
 	quantize(max, aabbMax, 1);
 
 	// allocate a handle
-	unsigned short handle = allocHandle();
+	BP_FP_INT_TYPE handle = allocHandle();
 	assert(handle!= 0xcdcd);
 
 	Handle* pHandle = getHandle(handle);
@@ -175,11 +202,13 @@
 	pHandle->m_collisionFilterMask = collisionFilterMask;
 
 	// compute current limit of edge arrays
-	int limit = m_numHandles * 2;
+	BP_FP_INT_TYPE limit = m_numHandles * 2;
 
+	
 	// insert new edges just inside the max boundary edge
-	for (int axis = 0; axis < 3; axis++)
+	for (BP_FP_INT_TYPE axis = 0; axis < 3; axis++)
 	{
+
 		m_pHandles[0].m_maxEdges[axis] += 2;
 
 		m_pEdges[axis][limit + 1] = m_pEdges[axis][limit - 1];
@@ -202,14 +231,14 @@
 	sortMinDown(2, pHandle->m_minEdges[2], true);
 	sortMaxDown(2, pHandle->m_maxEdges[2], true);
 
-	//PrintAxis(1);
 
 	return handle;
 }
 
 
-void btAxisSweep3::removeHandle(unsigned short handle)
+void btAxisSweep3::removeHandle(BP_FP_INT_TYPE handle)
 {
+	
 	Handle* pHandle = getHandle(handle);
 
 	//explicitly remove the pairs containing the proxy
@@ -220,42 +249,145 @@
 
 	// compute current limit of edge arrays
 	int limit = m_numHandles * 2;
+	
 	int axis;
 
 	for (axis = 0;axis<3;axis++)
 	{
-		Edge* pEdges = m_pEdges[axis];
-		int maxEdge= pHandle->m_maxEdges[axis];
-		pEdges[maxEdge].m_pos = 0xffff;
-		int minEdge = pHandle->m_minEdges[axis];
-		pEdges[minEdge].m_pos = 0xffff;
+		m_pHandles[0].m_maxEdges[axis] -= 2;
 	}
 
 	// remove the edges by sorting them up to the end of the list
 	for ( axis = 0; axis < 3; axis++)
 	{
 		Edge* pEdges = m_pEdges[axis];
-		int max = pHandle->m_maxEdges[axis];
-		pEdges[max].m_pos = 0xffff;
+		BP_FP_INT_TYPE max = pHandle->m_maxEdges[axis];
+		pEdges[max].m_pos = BP_HANDLE_SENTINEL;
 
 		sortMaxUp(axis,max,false);
-		
-		int i = pHandle->m_minEdges[axis];
-		pEdges[i].m_pos = 0xffff;
 
+
+		BP_FP_INT_TYPE i = pHandle->m_minEdges[axis];
+		pEdges[i].m_pos = BP_HANDLE_SENTINEL;
+
+
 		sortMinUp(axis,i,false);
 
 		pEdges[limit-1].m_handle = 0;
-		pEdges[limit-1].m_pos = 0xffff;
+		pEdges[limit-1].m_pos = BP_HANDLE_SENTINEL;
+		
+#ifdef DEBUG_BROADPHASE
+			debugPrintAxis(axis,false);
+#endif //DEBUG_BROADPHASE
 
+
 	}
 
+
 	// free the handle
 	freeHandle(handle);
 
 	
 }
 
+extern int gOverlappingPairs;
+
+
+void	btAxisSweep3::refreshOverlappingPairs()
+{
+
+}
+void	btAxisSweep3::processAllOverlappingPairs(btOverlapCallback* callback)
+{
+
+	//perform a sort, to find duplicates and to sort 'invalid' pairs to the end
+	m_overlappingPairArray.heapSort(btBroadphasePairSortPredicate());
+
+	//remove the 'invalid' ones
+#ifdef USE_POPBACK_REMOVAL
+	while (m_invalidPair>0)
+	{
+		m_invalidPair--;
+		m_overlappingPairArray.pop_back();
+	}
+#else	
+	m_overlappingPairArray.resize(m_overlappingPairArray.size() - m_invalidPair);
+	m_invalidPair = 0;
+#endif
+
+	
+	int i;
+
+	btBroadphasePair previousPair;
+	previousPair.m_pProxy0 = 0;
+	previousPair.m_pProxy1 = 0;
+	previousPair.m_algorithm = 0;
+	
+	
+	for (i=0;i<m_overlappingPairArray.size();i++)
+	{
+	
+		btBroadphasePair& pair = m_overlappingPairArray[i];
+
+		bool isDuplicate = (pair == previousPair);
+
+		previousPair = pair;
+
+		bool needsRemoval = false;
+
+		if (!isDuplicate)
+		{
+			bool hasOverlap = testOverlap(pair.m_pProxy0,pair.m_pProxy1);
+
+			if (hasOverlap)
+			{
+				needsRemoval = callback->processOverlap(pair);
+			} else
+			{
+				needsRemoval = true;
+			}
+		} else
+		{
+			//remove duplicate
+			needsRemoval = true;
+			//should have no algorithm
+			btAssert(!pair.m_algorithm);
+		}
+		
+		if (needsRemoval)
+		{
+			cleanOverlappingPair(pair);
+
+	//		m_overlappingPairArray.swap(i,m_overlappingPairArray.size()-1);
+	//		m_overlappingPairArray.pop_back();
+			pair.m_pProxy0 = 0;
+			pair.m_pProxy1 = 0;
+			m_invalidPair++;
+			gOverlappingPairs--;
+		} 
+		
+	}
+}
+
+
+bool btAxisSweep3::testOverlap(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1)
+{
+	const Handle* pHandleA = static_cast<Handle*>(proxy0);
+	const Handle* pHandleB = static_cast<Handle*>(proxy1);
+	
+	//optimization 1: check the array index (memory address), instead of the m_pos
+
+	for (int axis = 0; axis < 3; axis++)
+	{ 
+		if (pHandleA->m_maxEdges[axis] < pHandleB->m_minEdges[axis] || 
+			pHandleB->m_maxEdges[axis] < pHandleA->m_minEdges[axis]) 
+		{ 
+			return false; 
+		} 
+	} 
+	return true;
+}
+
 bool btAxisSweep3::testOverlap(int ignoreAxis,const Handle* pHandleA, const Handle* pHandleB)
 {
 	//optimization 1: check the array index (memory address), instead of the m_pos
@@ -272,7 +404,7 @@
 		}
 	} 
 
-	//optimization 2: only 2 axis need to be tested
+	//optimization 2: only 2 axis need to be tested (conflicts with 'delayed removal' optimization)
 
 	/*for (int axis = 0; axis < 3; axis++)
 	{
@@ -287,7 +419,7 @@
 	return true;
 }
 
-void btAxisSweep3::updateHandle(unsigned short handle, const btPoint3& aabbMin,const btPoint3& aabbMax)
+void btAxisSweep3::updateHandle(BP_FP_INT_TYPE handle, const btPoint3& aabbMin,const btPoint3& aabbMax)
 {
 //	assert(bounds.IsFinite());
 	//assert(bounds.HasVolume());
@@ -295,15 +427,15 @@
 	Handle* pHandle = getHandle(handle);
 
 	// quantize the new bounds
-	unsigned short min[3], max[3];
+	BP_FP_INT_TYPE min[3], max[3];
 	quantize(min, aabbMin, 0);
 	quantize(max, aabbMax, 1);
 
 	// update changed edges
 	for (int axis = 0; axis < 3; axis++)
 	{
-		unsigned short emin = pHandle->m_minEdges[axis];
-		unsigned short emax = pHandle->m_maxEdges[axis];

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list