aboutsummaryrefslogtreecommitdiff
path: root/PhysX_3.4/Source/ImmediateMode/src/NpImmediateMode.cpp
diff options
context:
space:
mode:
authorsschirm <[email protected]>2017-02-27 16:40:12 +0100
committersschirm <[email protected]>2017-03-01 18:04:26 +0100
commit7840347c32755e94a807f978f1cbb558717ac8cf (patch)
tree295cd3ca93a45f8fcc43cf3cbf3887c0e0c5526b /PhysX_3.4/Source/ImmediateMode/src/NpImmediateMode.cpp
parentPre-release comments marking end of beta. (diff)
downloadphysx-3.4-7840347c32755e94a807f978f1cbb558717ac8cf.tar.xz
physx-3.4-7840347c32755e94a807f978f1cbb558717ac8cf.zip
PhysX 3.4, APEX 1.4 final release @21757769v3.4.0-rc-2
Diffstat (limited to 'PhysX_3.4/Source/ImmediateMode/src/NpImmediateMode.cpp')
-rw-r--r--PhysX_3.4/Source/ImmediateMode/src/NpImmediateMode.cpp28
1 files changed, 22 insertions, 6 deletions
diff --git a/PhysX_3.4/Source/ImmediateMode/src/NpImmediateMode.cpp b/PhysX_3.4/Source/ImmediateMode/src/NpImmediateMode.cpp
index c2d1b2f8..ad976d12 100644
--- a/PhysX_3.4/Source/ImmediateMode/src/NpImmediateMode.cpp
+++ b/PhysX_3.4/Source/ImmediateMode/src/NpImmediateMode.cpp
@@ -413,31 +413,43 @@ namespace physx
for (PxU32 i = 0; i < nbHeaders; ++i)
{
PxConstraintBatchHeader& batchHeader = batchHeaders[i];
+
+ PxU8 type = DY_SC_TYPE_BLOCK_1D;
if (batchHeader.mStride == 4)
{
PxU32 totalRows = 0;
PxU32 maxRows = 0;
+ bool batchable = true;
for (PxU32 a = 0; a < batchHeader.mStride; ++a)
{
+ if (jointDescs[currentDescIdx + a].numRows == 0)
+ {
+ batchable = false;
+ break;
+ }
totalRows += jointDescs[currentDescIdx + a].numRows;
maxRows = PxMax(maxRows, jointDescs[currentDescIdx + a].numRows);
}
- state = Dy::setupSolverConstraint4
- (jointDescs + currentDescIdx,
- dt, invDt, totalRows,
- allocator, maxRows);
+ if (batchable)
+ {
+ state = Dy::setupSolverConstraint4
+ (jointDescs + currentDescIdx,
+ dt, invDt, totalRows,
+ allocator, maxRows);
+ }
}
if (state == Dy::SolverConstraintPrepState::eUNBATCHABLE)
{
+ type = DY_SC_TYPE_RB_1D;
for (PxU32 a = 0; a < batchHeader.mStride; ++a)
{
Dy::ConstraintHelper::setupSolverConstraint(jointDescs[currentDescIdx + a], allocator, dt, invDt);
}
}
- batchHeader.mConstraintType = *jointDescs[currentDescIdx].desc->constraint;
+ batchHeader.mConstraintType = type;
currentDescIdx += batchHeader.mStride;
}
@@ -678,8 +690,12 @@ namespace physx
if (cache.isMultiManifold())
{
multiManifold.fromBuffer(reinterpret_cast<PxU8*>(&cache.getMultipleManifold()));
- cache.setManifold(&multiManifold);
}
+ else
+ {
+ multiManifold.initialize();
+ }
+ cache.setMultiManifold(&multiManifold);
//Do collision detection, then write manifold out...
g_PCMContactMethodTable[type0][type1](geomUnion0, geomUnion1, transform0, transform1, params, cache, contactBuffer, NULL);