fix more warnings in BulletCollision, and fix CMakeLists for Linux

This commit is contained in:
Erwin Coumans
2014-08-21 15:54:50 -07:00
parent 143c2da254
commit 5834547368
27 changed files with 1277 additions and 1246 deletions

View File

@@ -6,7 +6,6 @@ INCLUDE_DIRECTORIES(
${BULLET_PHYSICS_SOURCE_DIR}/btgui/lua-5.2.3/src ${BULLET_PHYSICS_SOURCE_DIR}/btgui/lua-5.2.3/src
) )
SET(App_AllBullet2Demos_SRCS SET(App_AllBullet2Demos_SRCS
main.cpp main.cpp
BulletDemoInterface.h BulletDemoInterface.h
@@ -93,7 +92,13 @@ ELSE(WIN32)
MESSAGE(${COCOA}) MESSAGE(${COCOA})
link_libraries(${COCOA}) link_libraries(${COCOA})
ELSE(APPLE) ELSE(APPLE)
LINK_LIBRARIES( pthread GLEW) ADD_DEFINITIONS("-DGLEW_INIT_OPENGL11_FUNCTIONS=1")
ADD_DEFINITIONS("-DGLEW_STATIC")
ADD_DEFINITIONS("-DGLEW_DYNAMIC_LOAD_ALL_GLX_FUNCTIONS=1")
INCLUDE_DIRECTORIES(
${BULLET_PHYSICS_SOURCE_DIR}/btgui/OpenGLWindow/GlewWindows
)
LINK_LIBRARIES( pthread dl)
ENDIF(APPLE) ENDIF(APPLE)
ENDIF(WIN32) ENDIF(WIN32)

View File

@@ -50,7 +50,16 @@ ELSE(WIN32)
MESSAGE(${COCOA}) MESSAGE(${COCOA})
link_libraries(${COCOA}) link_libraries(${COCOA})
ELSE(APPLE) ELSE(APPLE)
LINK_LIBRARIES( GLEW X11 pthread dl) SET(App_Bullet3_OpenCL_Demos_SRCS ${App_Bullet3_OpenCL_Demos_SRCS} ${App_Bullet3_OpenCL_Demos_Common_SRCS} ../../btgui/OpenGLWindow/GlewWindows/glew.c)
INCLUDE_DIRECTORIES(
${BULLET_PHYSICS_SOURCE_DIR}/btgui/OpenGLWindow/GlewWindows
)
ADD_DEFINITIONS("-DGLEW_INIT_OPENGL11_FUNCTIONS=1")
ADD_DEFINITIONS("-DGLEW_STATIC")
ADD_DEFINITIONS("-DGLEW_DYNAMIC_LOAD_ALL_GLX_FUNCTIONS=1")
LINK_LIBRARIES( X11 pthread dl)
ENDIF(APPLE) ENDIF(APPLE)
ENDIF(WIN32) ENDIF(WIN32)

View File

@@ -27,7 +27,15 @@ ELSE(WIN32)
MESSAGE(${COCOA}) MESSAGE(${COCOA})
link_libraries(${COCOA}) link_libraries(${COCOA})
ELSE(APPLE) ELSE(APPLE)
LINK_LIBRARIES( GLEW X11 pthread dl Xext)
INCLUDE_DIRECTORIES(
${BULLET_PHYSICS_SOURCE_DIR}/btgui/OpenGLWindow/GlewWindows
)
ADD_DEFINITIONS("-DGLEW_INIT_OPENGL11_FUNCTIONS=1")
ADD_DEFINITIONS("-DGLEW_STATIC")
ADD_DEFINITIONS("-DGLEW_DYNAMIC_LOAD_ALL_GLX_FUNCTIONS=1")
LINK_LIBRARIES( X11 pthread dl Xext)
ENDIF(APPLE) ENDIF(APPLE)
ENDIF(WIN32) ENDIF(WIN32)

View File

@@ -32,7 +32,14 @@ ENDIF(APPLE)
#no Linux detection? #no Linux detection?
IF(NOT WIN32 AND NOT APPLE) IF(NOT WIN32 AND NOT APPLE)
SET(OpenGLWindow_SRCS ${OpenGLWindowLinux_CPP} ${OpenGLWindowCommon_CPP} ) INCLUDE_DIRECTORIES(
${BULLET_PHYSICS_SOURCE_DIR}/btgui/OpenGLWindow/GlewWindows
)
ADD_DEFINITIONS(-DGLEW_STATIC)
ADD_DEFINITIONS("-DGLEW_INIT_OPENGL11_FUNCTIONS=1")
ADD_DEFINITIONS("-DGLEW_DYNAMIC_LOAD_ALL_GLX_FUNCTIONS=1")
SET(OpenGLWindow_SRCS ${OpenGLWindowLinux_CPP} ${BULLET_PHYSICS_SOURCE_DIR}/btgui/OpenGLWindow/GlewWindows/glew.c ${OpenGLWindowCommon_CPP} )
ENDIF() ENDIF()

View File

@@ -39,7 +39,8 @@ static DBVT_INLINE btDbvtVolume merge( const btDbvtVolume& a,
{ {
#if (DBVT_MERGE_IMPL==DBVT_IMPL_SSE) #if (DBVT_MERGE_IMPL==DBVT_IMPL_SSE)
ATTRIBUTE_ALIGNED16( char locals[sizeof(btDbvtAabbMm)]); ATTRIBUTE_ALIGNED16( char locals[sizeof(btDbvtAabbMm)]);
btDbvtVolume& res=*(btDbvtVolume*)locals; btDbvtVolume* ptr = (btDbvtVolume*) locals;
btDbvtVolume& res=*ptr;
#else #else
btDbvtVolume res; btDbvtVolume res;
#endif #endif
@@ -250,7 +251,8 @@ static btDbvtVolume bounds( const tNodeArray& leaves)
{ {
#if DBVT_MERGE_IMPL==DBVT_IMPL_SSE #if DBVT_MERGE_IMPL==DBVT_IMPL_SSE
ATTRIBUTE_ALIGNED16(char locals[sizeof(btDbvtVolume)]); ATTRIBUTE_ALIGNED16(char locals[sizeof(btDbvtVolume)]);
btDbvtVolume& volume=*(btDbvtVolume*)locals; btDbvtVolume* ptr = (btDbvtVolume*) locals;
btDbvtVolume& volume=*ptr;
volume=leaves[0]->volume; volume=leaves[0]->volume;
#else #else
btDbvtVolume volume=leaves[0]->volume; btDbvtVolume volume=leaves[0]->volume;

View File

@@ -31,11 +31,10 @@ btCollisionObject::btCollisionObject()
m_activationState1(1), m_activationState1(1),
m_deactivationTime(btScalar(0.)), m_deactivationTime(btScalar(0.)),
m_friction(btScalar(0.5)), m_friction(btScalar(0.5)),
m_rollingFriction(0.0f),
m_restitution(btScalar(0.)), m_restitution(btScalar(0.)),
m_rollingFriction(0.0f),
m_internalType(CO_COLLISION_OBJECT), m_internalType(CO_COLLISION_OBJECT),
m_userObjectPointer(0), m_userObjectPointer(0),
m_userIndex(-1),
m_hitFraction(btScalar(1.)), m_hitFraction(btScalar(1.)),
m_ccdSweptSphereRadius(btScalar(0.)), m_ccdSweptSphereRadius(btScalar(0.)),
m_ccdMotionThreshold(btScalar(0.)), m_ccdMotionThreshold(btScalar(0.)),

View File

@@ -292,7 +292,7 @@ void btCollisionWorld::rayTestSingleInternal(const btTransform& rayFromTrans,con
btGjkConvexCast gjkConvexCaster(castShape,convexShape,&simplexSolver); btGjkConvexCast gjkConvexCaster(castShape,convexShape,&simplexSolver);
//btContinuousConvexCollision convexCaster(castShape,convexShape,&simplexSolver,0); //btContinuousConvexCollision convexCaster(castShape,convexShape,&simplexSolver,0);
bool condition = true;
btConvexCast* convexCasterPtr = 0; btConvexCast* convexCasterPtr = 0;
//use kF_UseSubSimplexConvexCastRaytest by default //use kF_UseSubSimplexConvexCastRaytest by default
if (resultCallback.m_flags & btTriangleRaycastCallback::kF_UseGjkConvexCastRaytest) if (resultCallback.m_flags & btTriangleRaycastCallback::kF_UseGjkConvexCastRaytest)
@@ -1245,7 +1245,10 @@ public:
void btCollisionWorld::debugDrawObject(const btTransform& worldTransform, const btCollisionShape* shape, const btVector3& color) void btCollisionWorld::debugDrawObject(const btTransform& worldTransform, const btCollisionShape* shape, const btVector3& color)
{ {
// Draw a small simplex at the center of the object // Draw a small simplex at the center of the object
if (getDebugDrawer() && getDebugDrawer()->getDebugMode() & btIDebugDraw::DBG_DrawFrames)
{
getDebugDrawer()->drawTransform(worldTransform,1); getDebugDrawer()->drawTransform(worldTransform,1);
}
if (shape->getShapeType() == COMPOUND_SHAPE_PROXYTYPE) if (shape->getShapeType() == COMPOUND_SHAPE_PROXYTYPE)
{ {

View File

@@ -123,7 +123,7 @@ public:
//backup //backup
btTransform orgTrans = m_compoundColObjWrap->getWorldTransform(); btTransform orgTrans = m_compoundColObjWrap->getWorldTransform();
btTransform orgInterpolationTrans = m_compoundColObjWrap->getWorldTransform();
const btTransform& childTrans = compoundShape->getChildTransform(index); const btTransform& childTrans = compoundShape->getChildTransform(index);
btTransform newChildWorldTrans = orgTrans*childTrans ; btTransform newChildWorldTrans = orgTrans*childTrans ;
@@ -294,7 +294,7 @@ void btCompoundCollisionAlgorithm::processCollision (const btCollisionObjectWrap
btManifoldArray manifoldArray; btManifoldArray manifoldArray;
const btCollisionShape* childShape = 0; const btCollisionShape* childShape = 0;
btTransform orgTrans; btTransform orgTrans;
btTransform orgInterpolationTrans;
btTransform newChildWorldTrans; btTransform newChildWorldTrans;
btVector3 aabbMin0,aabbMax0,aabbMin1,aabbMax1; btVector3 aabbMin0,aabbMax0,aabbMin1,aabbMax1;
@@ -305,7 +305,7 @@ void btCompoundCollisionAlgorithm::processCollision (const btCollisionObjectWrap
childShape = compoundShape->getChildShape(i); childShape = compoundShape->getChildShape(i);
//if not longer overlapping, remove the algorithm //if not longer overlapping, remove the algorithm
orgTrans = colObjWrap->getWorldTransform(); orgTrans = colObjWrap->getWorldTransform();
orgInterpolationTrans = colObjWrap->getWorldTransform();
const btTransform& childTrans = compoundShape->getChildTransform(i); const btTransform& childTrans = compoundShape->getChildTransform(i);
newChildWorldTrans = orgTrans*childTrans ; newChildWorldTrans = orgTrans*childTrans ;

View File

@@ -112,10 +112,9 @@ struct btCompoundCompoundLeafCallback : btDbvt::ICollide
btManifoldResult* resultOut, btManifoldResult* resultOut,
btHashedSimplePairCache* childAlgorithmsCache, btHashedSimplePairCache* childAlgorithmsCache,
btPersistentManifold* sharedManifold) btPersistentManifold* sharedManifold)
:m_compound0ColObjWrap(compound1ObjWrap),m_compound1ColObjWrap(compound0ObjWrap),m_dispatcher(dispatcher),m_dispatchInfo(dispatchInfo),m_resultOut(resultOut), :m_numOverlapPairs(0),m_compound0ColObjWrap(compound1ObjWrap),m_compound1ColObjWrap(compound0ObjWrap),m_dispatcher(dispatcher),m_dispatchInfo(dispatchInfo),m_resultOut(resultOut),
m_childCollisionAlgorithmCache(childAlgorithmsCache), m_childCollisionAlgorithmCache(childAlgorithmsCache),
m_sharedManifold(sharedManifold), m_sharedManifold(sharedManifold)
m_numOverlapPairs(0)
{ {
} }

View File

@@ -88,20 +88,19 @@ partId, int triangleIndex)
//just for debugging purposes //just for debugging purposes
//printf("triangle %d",m_triangleCount++); //printf("triangle %d",m_triangleCount++);
const btCollisionObject* ob = const_cast<btCollisionObject*>(m_triBodyWrap->getCollisionObject());
btCollisionAlgorithmConstructionInfo ci; btCollisionAlgorithmConstructionInfo ci;
ci.m_dispatcher1 = m_dispatcher; ci.m_dispatcher1 = m_dispatcher;
//const btCollisionObject* ob = static_cast<btCollisionObject*>(m_triBodyWrap->getCollisionObject());
#if 0 #if 0
///debug drawing of the overlapping triangles ///debug drawing of the overlapping triangles
if (m_dispatchInfoPtr && m_dispatchInfoPtr->m_debugDraw && (m_dispatchInfoPtr->m_debugDraw->getDebugMode() &btIDebugDraw::DBG_DrawWireframe )) if (m_dispatchInfoPtr && m_dispatchInfoPtr->m_debugDraw && (m_dispatchInfoPtr->m_debugDraw->getDebugMode() &btIDebugDraw::DBG_DrawWireframe ))
{ {
const btCollisionObject* ob = const_cast<btCollisionObject*>(m_triBodyWrap->getCollisionObject());
btVector3 color(1,1,0); btVector3 color(1,1,0);
btTransform& tr = ob->getWorldTransform(); btTransform& tr = ob->getWorldTransform();
m_dispatchInfoPtr->m_debugDraw->drawLine(tr(triangle[0]),tr(triangle[1]),color); m_dispatchInfoPtr->m_debugDraw->drawLine(tr(triangle[0]),tr(triangle[1]),color);

View File

@@ -105,8 +105,7 @@ btDefaultCollisionConfiguration::btDefaultCollisionConfiguration(const btDefault
int maxSize = sizeof(btConvexConvexAlgorithm); int maxSize = sizeof(btConvexConvexAlgorithm);
int maxSize2 = sizeof(btConvexConcaveCollisionAlgorithm); int maxSize2 = sizeof(btConvexConcaveCollisionAlgorithm);
int maxSize3 = sizeof(btCompoundCollisionAlgorithm); int maxSize3 = sizeof(btCompoundCollisionAlgorithm);
int sl = sizeof(btConvexSeparatingDistanceUtil);
sl = sizeof(btGjkPairDetector);
int collisionAlgorithmMaxElementSize = btMax(maxSize,constructionInfo.m_customCollisionAlgorithmMaxElementSize); int collisionAlgorithmMaxElementSize = btMax(maxSize,constructionInfo.m_customCollisionAlgorithmMaxElementSize);
collisionAlgorithmMaxElementSize = btMax(collisionAlgorithmMaxElementSize,maxSize2); collisionAlgorithmMaxElementSize = btMax(collisionAlgorithmMaxElementSize,maxSize2);
collisionAlgorithmMaxElementSize = btMax(collisionAlgorithmMaxElementSize,maxSize3); collisionAlgorithmMaxElementSize = btMax(collisionAlgorithmMaxElementSize,maxSize3);

View File

@@ -114,7 +114,6 @@ struct btConnectivityProcessor : public btTriangleCallback
if(numshared >= 3) if(numshared >= 3)
return; return;
} }
switch (numshared) switch (numshared)
{ {
case 0: case 0:
@@ -203,6 +202,7 @@ struct btConnectivityProcessor : public btTriangleCallback
ang4 = 0.f; ang4 = 0.f;
} else } else
{ {
calculatedEdge.normalize(); calculatedEdge.normalize();
btVector3 calculatedNormalA = calculatedEdge.cross(edgeCrossA); btVector3 calculatedNormalA = calculatedEdge.cross(edgeCrossA);
calculatedNormalA.normalize(); calculatedNormalA.normalize();
@@ -213,7 +213,7 @@ struct btConnectivityProcessor : public btTriangleCallback
isConvex = (dotA<0.); isConvex = (dotA<0.);
correctedAngle = isConvex ? ang4 : -ang4; correctedAngle = isConvex ? ang4 : -ang4;
btQuaternion orn2 = btQuaternion(btVector3(calculatedEdge.x(), calculatedEdge.y(), calculatedEdge.z()),-correctedAngle); btQuaternion orn2(calculatedEdge,-correctedAngle);
calculatedNormalB = btMatrix3x3(orn2)*normalA; calculatedNormalB = btMatrix3x3(orn2)*normalA;
@@ -301,6 +301,11 @@ struct btConnectivityProcessor : public btTriangleCallback
break; break;
} }
default:
{
// printf("warning: duplicate triangle\n");
}
} }
} }
}; };

View File

@@ -28,18 +28,14 @@ ATTRIBUTE_ALIGNED16(class) btCollisionShape
{ {
protected: protected:
int m_shapeType; int m_shapeType;
union
{
void* m_userPointer; void* m_userPointer;
int m_userIndex; int m_userIndex;
};
public: public:
BT_DECLARE_ALIGNED_ALLOCATOR(); BT_DECLARE_ALIGNED_ALLOCATOR();
btCollisionShape() : m_shapeType (INVALID_SHAPE_PROXYTYPE), m_userPointer(0) btCollisionShape() : m_shapeType (INVALID_SHAPE_PROXYTYPE), m_userPointer(0), m_userIndex(-1)
{ {
} }
@@ -135,7 +131,6 @@ public:
{ {
return m_userPointer; return m_userPointer;
} }
void setUserIndex(int index) void setUserIndex(int index)
{ {
m_userIndex = index; m_userIndex = index;
@@ -146,6 +141,7 @@ public:
return m_userIndex; return m_userIndex;
} }
virtual int calculateSerializeBufferSize() const; virtual int calculateSerializeBufferSize() const;
///fills the dataBuffer and returns the struct name (and 0 on failure) ///fills the dataBuffer and returns the struct name (and 0 on failure)

View File

@@ -303,7 +303,7 @@ void btCompoundShape::createAabbTreeFromChildren()
m_dynamicAabbTree = new(mem) btDbvt(); m_dynamicAabbTree = new(mem) btDbvt();
btAssert(mem==m_dynamicAabbTree); btAssert(mem==m_dynamicAabbTree);
for ( size_t index = 0; index < m_children.size(); index++ ) for ( int index = 0; index < m_children.size(); index++ )
{ {
btCompoundShapeChild &child = m_children[index]; btCompoundShapeChild &child = m_children[index];
@@ -312,7 +312,8 @@ void btCompoundShape::createAabbTreeFromChildren()
child.m_childShape->getAabb(child.m_transform,localAabbMin,localAabbMax); child.m_childShape->getAabb(child.m_transform,localAabbMin,localAabbMax);
const btDbvtVolume bounds=btDbvtVolume::FromMM(localAabbMin,localAabbMax); const btDbvtVolume bounds=btDbvtVolume::FromMM(localAabbMin,localAabbMax);
child.m_node = m_dynamicAabbTree->insert(bounds, reinterpret_cast<void*>(index) ); size_t index2 = index;
child.m_node = m_dynamicAabbTree->insert(bounds, reinterpret_cast<void*>(index2) );
} }
} }
} }

View File

@@ -313,7 +313,7 @@ bool btPolyhedralContactClipping::findSeparatingAxis( const btConvexPolyhedron&
int edgeB=-1; int edgeB=-1;
btVector3 worldEdgeA; btVector3 worldEdgeA;
btVector3 worldEdgeB; btVector3 worldEdgeB;
btVector3 witnessPointA,witnessPointB; btVector3 witnessPointA(0,0,0),witnessPointB(0,0,0);
int curEdgeEdge = 0; int curEdgeEdge = 0;

View File

@@ -21,7 +21,6 @@ subject to the following restrictions:
struct btBroadphaseProxy; struct btBroadphaseProxy;
class btConvexShape; class btConvexShape;
class btTriangleRaycastCallback: public btTriangleCallback class btTriangleRaycastCallback: public btTriangleCallback
{ {
public: public:

View File

@@ -65,10 +65,10 @@ bool btSubsimplexConvexCast::calcTimeOfImpact(
btVector3 n; btVector3 n;
n.setValue(btScalar(0.),btScalar(0.),btScalar(0.)); n.setValue(btScalar(0.),btScalar(0.),btScalar(0.));
bool hasResult = false;
btVector3 c; btVector3 c;
btScalar lastLambda = lambda;
btScalar dist2 = v.length2(); btScalar dist2 = v.length2();
@@ -109,9 +109,9 @@ bool btSubsimplexConvexCast::calcTimeOfImpact(
//m_simplexSolver->reset(); //m_simplexSolver->reset();
//check next line //check next line
w = supVertexA-supVertexB; w = supVertexA-supVertexB;
lastLambda = lambda;
n = v; n = v;
hasResult = true;
} }
} }
///Just like regular GJK only add the vertex if it isn't already (close) to current vertex, it would lead to divisions by zero and NaN etc. ///Just like regular GJK only add the vertex if it isn't already (close) to current vertex, it would lead to divisions by zero and NaN etc.
@@ -121,7 +121,7 @@ bool btSubsimplexConvexCast::calcTimeOfImpact(
if (m_simplexSolver->closest(v)) if (m_simplexSolver->closest(v))
{ {
dist2 = v.length2(); dist2 = v.length2();
hasResult = true;
//todo: check this normal for validity //todo: check this normal for validity
//n=v; //n=v;
//printf("V=%f , %f, %f\n",v[0],v[1],v[2]); //printf("V=%f , %f, %f\n",v[0],v[1],v[2]);