aboutsummaryrefslogtreecommitdiff
path: root/PhysX_3.4/Source/LowLevelDynamics
diff options
context:
space:
mode:
Diffstat (limited to 'PhysX_3.4/Source/LowLevelDynamics')
-rw-r--r--PhysX_3.4/Source/LowLevelDynamics/src/DyConstraintSetup.cpp8
-rw-r--r--PhysX_3.4/Source/LowLevelDynamics/src/DyContactPrep4.cpp3
-rw-r--r--PhysX_3.4/Source/LowLevelDynamics/src/DyDynamics.cpp7
-rw-r--r--PhysX_3.4/Source/LowLevelDynamics/src/DyFrictionCorrelation.cpp4
-rw-r--r--PhysX_3.4/Source/LowLevelDynamics/src/DySolverConstraints.cpp4
5 files changed, 20 insertions, 6 deletions
diff --git a/PhysX_3.4/Source/LowLevelDynamics/src/DyConstraintSetup.cpp b/PhysX_3.4/Source/LowLevelDynamics/src/DyConstraintSetup.cpp
index c71bb3c2..c3606d4b 100644
--- a/PhysX_3.4/Source/LowLevelDynamics/src/DyConstraintSetup.cpp
+++ b/PhysX_3.4/Source/LowLevelDynamics/src/DyConstraintSetup.cpp
@@ -397,8 +397,14 @@ PxSolverConstraintPrepDesc& prepDesc,
PxConstraintAllocator& allocator,
PxReal dt, PxReal invdt)
{
- if (prepDesc .numRows== 0)
+ if (prepDesc.numRows == 0)
+ {
+ prepDesc.desc->constraint = NULL;
+ prepDesc.desc->writeBack = NULL;
+ prepDesc.desc->constraintLengthOver16 = 0;
+ prepDesc.desc->writeBackLengthOver4 = 0;
return 0;
+ }
PxSolverConstraintDesc& desc = *prepDesc.desc;
diff --git a/PhysX_3.4/Source/LowLevelDynamics/src/DyContactPrep4.cpp b/PhysX_3.4/Source/LowLevelDynamics/src/DyContactPrep4.cpp
index 91b9e638..569e6996 100644
--- a/PhysX_3.4/Source/LowLevelDynamics/src/DyContactPrep4.cpp
+++ b/PhysX_3.4/Source/LowLevelDynamics/src/DyContactPrep4.cpp
@@ -990,7 +990,8 @@ static void setupFinalizeSolverConstraints4(PxSolverContactDesc* PX_RESTRICT des
const Vec4V rbXnY = V4NegMulSub(rbX, t1Z, V4Mul(rbZ, t1X));
const Vec4V rbXnZ = V4NegMulSub(rbY, t1X, V4Mul(rbX, t1Y));
- const Vec4V dotRbXnAngVel1 = V4MulAdd(rbXnZ, angVelT21, V4MulAdd(rbXnY, angVelT11, V4Mul(rbXnX, angVelT01)));
+ const Vec4V tVel1 = V4MulAdd(t1Z, linVelT21, V4MulAdd(t1Y, linVelT11, V4Mul(t1X, linVelT01)));
+ const Vec4V dotRbXnAngVel1 = V4MulAdd(rbXnZ, angVelT21, V4MulAdd(rbXnY, angVelT11, V4MulAdd(rbXnX, angVelT01, tVel1)));
vrel = V4Sub(vrel, dotRbXnAngVel1);
}
diff --git a/PhysX_3.4/Source/LowLevelDynamics/src/DyDynamics.cpp b/PhysX_3.4/Source/LowLevelDynamics/src/DyDynamics.cpp
index fabb1016..b7988989 100644
--- a/PhysX_3.4/Source/LowLevelDynamics/src/DyDynamics.cpp
+++ b/PhysX_3.4/Source/LowLevelDynamics/src/DyDynamics.cpp
@@ -2626,7 +2626,7 @@ static PxU32 createFinalizeContacts_Parallel(PxSolverBodyData* solverBodyData, T
if(contactDescPtr[header.mStartIndex].constraintLengthOver16 == DY_SC_TYPE_RB_CONTACT)
{
- SolverConstraintPrepState::Enum state = SolverConstraintPrepState::eUNBATCHABLE;
+
PxSolverContactDesc blockDescs[4];
PxsContactManagerOutput* cmOutputs[4];
@@ -2679,6 +2679,8 @@ static PxU32 createFinalizeContacts_Parallel(PxSolverBodyData* solverBodyData, T
}
+#if DY_BATCH_CONSTRAINTS
+ SolverConstraintPrepState::Enum state = SolverConstraintPrepState::eUNBATCHABLE;
if(header.mStride == 4)
{
//KS - todo - plumb in axisConstraintCount into this method to keep track of the number of axes
@@ -2692,6 +2694,7 @@ static PxU32 createFinalizeContacts_Parallel(PxSolverBodyData* solverBodyData, T
}
if(SolverConstraintPrepState::eSUCCESS != state)
+#endif
{
for(PxU32 i = 0; i < header.mStride; ++i)
{
@@ -2766,7 +2769,7 @@ static PxU32 createFinalizeContacts_Parallel(PxSolverBodyData* solverBodyData, T
prepDesc.minResponseThreshold = constraint->minResponseThreshold;
}
-#if DY_BATCH_1D
+#if DY_BATCH_CONSTRAINTS && DY_BATCH_1D
SolverConstraintPrepState::Enum state = SolverConstraintPrepState::eUNBATCHABLE;
if(header.mStride == 4)
{
diff --git a/PhysX_3.4/Source/LowLevelDynamics/src/DyFrictionCorrelation.cpp b/PhysX_3.4/Source/LowLevelDynamics/src/DyFrictionCorrelation.cpp
index f087c629..2d0af683 100644
--- a/PhysX_3.4/Source/LowLevelDynamics/src/DyFrictionCorrelation.cpp
+++ b/PhysX_3.4/Source/LowLevelDynamics/src/DyFrictionCorrelation.cpp
@@ -179,7 +179,7 @@ void growPatches(CorrelationBuffer& fb,
const ContactPoint* cb,
const PxTransform& bodyFrame0,
const PxTransform& bodyFrame1,
- PxReal , //unused correlationDistance
+ PxReal correlationDistance,
PxU32 frictionPatchStartIndex,
PxReal frictionOffsetThreshold)
{
@@ -221,7 +221,7 @@ void growPatches(CorrelationBuffer& fb,
break;
case 1:
pointDistSq = (worldPoint-worldAnchors[0]).magnitudeSquared();
- if (pointDistSq > (0.025f * 0.025f))
+ if (pointDistSq > (correlationDistance * correlationDistance))
{
fb.contactID[i][1] = PxU16(cp.start+j);
worldAnchors[1] = worldPoint;
diff --git a/PhysX_3.4/Source/LowLevelDynamics/src/DySolverConstraints.cpp b/PhysX_3.4/Source/LowLevelDynamics/src/DySolverConstraints.cpp
index 3eadf91e..0a33c778 100644
--- a/PhysX_3.4/Source/LowLevelDynamics/src/DySolverConstraints.cpp
+++ b/PhysX_3.4/Source/LowLevelDynamics/src/DySolverConstraints.cpp
@@ -59,6 +59,8 @@ void solve1D(const PxSolverConstraintDesc& desc, SolverContext& cache)
PxSolverBody& b1 = *desc.bodyB;
PxU8* PX_RESTRICT bPtr = desc.constraint;
+ if (bPtr == NULL)
+ return;
//PxU32 length = desc.constraintLength;
const SolverConstraint1DHeader* PX_RESTRICT header = reinterpret_cast<const SolverConstraint1DHeader*>(bPtr);
@@ -125,6 +127,8 @@ void solve1D(const PxSolverConstraintDesc& desc, SolverContext& cache)
void conclude1D(const PxSolverConstraintDesc& desc, SolverContext& /*cache*/)
{
SolverConstraint1DHeader* header = reinterpret_cast<SolverConstraint1DHeader*>(desc.constraint);
+ if (header == NULL)
+ return;
PxU8* base = desc.constraint + sizeof(SolverConstraint1DHeader);
PxU32 stride = header->type == DY_SC_TYPE_EXT_1D ? sizeof(SolverConstraint1DExt) : sizeof(SolverConstraint1D);