diff options
Diffstat (limited to 'PhysX_3.4/Source/LowLevelDynamics')
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); |