diff options
| author | sschirm <[email protected]> | 2017-02-27 16:40:12 +0100 |
|---|---|---|
| committer | sschirm <[email protected]> | 2017-03-01 18:04:26 +0100 |
| commit | 7840347c32755e94a807f978f1cbb558717ac8cf (patch) | |
| tree | 295cd3ca93a45f8fcc43cf3cbf3887c0e0c5526b /PhysX_3.4/Source/ImmediateMode/src/NpImmediateMode.cpp | |
| parent | Pre-release comments marking end of beta. (diff) | |
| download | physx-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.cpp | 28 |
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); |