fixes to allow btStaticPlaneShape to be processed on SPU (alignment, non-virtual calls)
This commit is contained in:
@@ -26,6 +26,7 @@ subject to the following restrictions:
|
|||||||
#define SPU_BATCHSIZE_BROADPHASE_PAIRS 64
|
#define SPU_BATCHSIZE_BROADPHASE_PAIRS 64
|
||||||
//#define SPU_BATCHSIZE_BROADPHASE_PAIRS 128
|
//#define SPU_BATCHSIZE_BROADPHASE_PAIRS 128
|
||||||
//#define SPU_BATCHSIZE_BROADPHASE_PAIRS 256
|
//#define SPU_BATCHSIZE_BROADPHASE_PAIRS 256
|
||||||
|
//#define SPU_BATCHSIZE_BROADPHASE_PAIRS 512
|
||||||
//#define SPU_BATCHSIZE_BROADPHASE_PAIRS 1024
|
//#define SPU_BATCHSIZE_BROADPHASE_PAIRS 1024
|
||||||
|
|
||||||
|
|
||||||
@@ -67,3 +68,5 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
#endif //SPU_GATHERING_COLLISION__DISPATCHER_H
|
#endif //SPU_GATHERING_COLLISION__DISPATCHER_H
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -375,6 +375,7 @@ public:
|
|||||||
|
|
||||||
void btConvexPlaneCollideSingleContact (SpuCollisionPairInput* wuInput,CollisionTask_LocalStoreMemory* lsMemPtr,SpuContactResult& spuContacts)
|
void btConvexPlaneCollideSingleContact (SpuCollisionPairInput* wuInput,CollisionTask_LocalStoreMemory* lsMemPtr,SpuContactResult& spuContacts)
|
||||||
{
|
{
|
||||||
|
|
||||||
btConvexShape* convexShape = (btConvexShape*) wuInput->m_spuCollisionShapes[0];
|
btConvexShape* convexShape = (btConvexShape*) wuInput->m_spuCollisionShapes[0];
|
||||||
btStaticPlaneShape* planeShape = (btStaticPlaneShape*) wuInput->m_spuCollisionShapes[1];
|
btStaticPlaneShape* planeShape = (btStaticPlaneShape*) wuInput->m_spuCollisionShapes[1];
|
||||||
|
|
||||||
@@ -382,13 +383,15 @@ void btConvexPlaneCollideSingleContact (SpuCollisionPairInput* wuInput,Collision
|
|||||||
const btVector3& planeNormal = planeShape->getPlaneNormal();
|
const btVector3& planeNormal = planeShape->getPlaneNormal();
|
||||||
const btScalar& planeConstant = planeShape->getPlaneConstant();
|
const btScalar& planeConstant = planeShape->getPlaneConstant();
|
||||||
|
|
||||||
|
|
||||||
btTransform convexWorldTransform = wuInput->m_worldTransform0;
|
btTransform convexWorldTransform = wuInput->m_worldTransform0;
|
||||||
btTransform convexInPlaneTrans;
|
btTransform convexInPlaneTrans;
|
||||||
convexInPlaneTrans= wuInput->m_worldTransform1.inverse() * convexWorldTransform;
|
convexInPlaneTrans= wuInput->m_worldTransform1.inverse() * convexWorldTransform;
|
||||||
btTransform planeInConvex;
|
btTransform planeInConvex;
|
||||||
planeInConvex= convexWorldTransform.inverse() * wuInput->m_worldTransform1;
|
planeInConvex= convexWorldTransform.inverse() * wuInput->m_worldTransform1;
|
||||||
|
|
||||||
btVector3 vtx = convexShape->localGetSupportingVertex(planeInConvex.getBasis()*-planeNormal);
|
//btVector3 vtx = convexShape->localGetSupportVertexWithoutMarginNonVirtual(planeInConvex.getBasis()*-planeNormal);
|
||||||
|
btVector3 vtx = convexShape->localGetSupportVertexNonVirtual(planeInConvex.getBasis()*-planeNormal);
|
||||||
|
|
||||||
btVector3 vtxInPlane = convexInPlaneTrans(vtx);
|
btVector3 vtxInPlane = convexInPlaneTrans(vtx);
|
||||||
btScalar distance = (planeNormal.dot(vtxInPlane) - planeConstant);
|
btScalar distance = (planeNormal.dot(vtxInPlane) - planeConstant);
|
||||||
@@ -1369,3 +1372,5 @@ void processCollisionTask(void* userPtr, void* lsMemPtr)
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user