MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/PhysX / islandInsertion

Method islandInsertion

physx/source/simulationcontroller/src/ScScene.cpp:5575–5613  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5573///////////////////////////////////////////////////////////////////////////////
5574
5575void Sc::Scene::islandInsertion(PxBaseTask* /*continuation*/)
5576{
5577 {
5578 PX_PROFILE_ZONE("Sim.processNewOverlaps.islandInsertion", getContextId());
5579
5580 const PxU32 nbShapeIdxCreated = mPreallocatedShapeInteractions.size();
5581 for (PxU32 a = 0; a < nbShapeIdxCreated; ++a)
5582 {
5583 size_t address = reinterpret_cast<size_t>(mPreallocatedShapeInteractions[a]);
5584 if (address & 1)
5585 {
5586 ShapeInteraction* interaction = reinterpret_cast<ShapeInteraction*>(address&size_t(~1));
5587
5588 PxsContactManager* contactManager = const_cast<PxsContactManager*>(interaction->getContactManager());
5589
5590 Sc::BodySim* bs0 = interaction->getShape0().getBodySim();
5591 Sc::BodySim* bs1 = interaction->getShape1().getBodySim();
5592
5593 IG::NodeIndex nodeIndexB;
5594 if (bs1)
5595 nodeIndexB = bs1->getNodeIndex();
5596
5597 IG::EdgeIndex edgeIdx = mSimpleIslandManager->addContactManager(contactManager, bs0->getNodeIndex(), nodeIndexB, interaction);
5598 interaction->mEdgeIndex = edgeIdx;
5599
5600 if (contactManager)
5601 contactManager->getWorkUnit().mEdgeIndex = edgeIdx;
5602 }
5603 }
5604
5605 // - Wakes actors that lost touch if appropriate
5606 //processLostTouchPairs();
5607
5608 if(mCCDPass == 0)
5609 {
5610 mSimpleIslandManager->firstPassIslandGen();
5611 }
5612 }
5613}
5614
5615void Sc::Scene::registerContactManagers(PxBaseTask* /*continuation*/)
5616{

Callers

nothing calls this directly

Calls 6

getContactManagerMethod · 0.80
getBodySimMethod · 0.80
firstPassIslandGenMethod · 0.80
getContextIdFunction · 0.50
sizeMethod · 0.45
addContactManagerMethod · 0.45

Tested by

no test coverage detected