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

Method wakeIslands

physx/source/lowlevel/software/src/PxsIslandSim.cpp:676–783  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

674
675
676void IslandSim::wakeIslands()
677{
678 PX_PROFILE_ZONE("Basic.wakeIslands", getContextId());
679
680 //(1) Iterate over activating nodes and activate them
681
682
683 PxU32 originalActiveIslands = mActiveIslands.size();
684
685 for (PxU32 a = 0; a < Edge::eEDGE_TYPE_COUNT; ++a)
686 {
687 for (PxU32 i = 0, count = mActivatedEdges[a].size(); i < count; ++i)
688 {
689 IG::Edge& edge = mEdges[mActivatedEdges[a][i]];
690 edge.mEdgeState &= (~Edge::eACTIVATING);
691 }
692
693 }
694
695 mActivatedEdges[0].forceSize_Unsafe(0);
696 mActivatedEdges[1].forceSize_Unsafe(0);
697 /*mInitialActiveEdgeCount[0] = mActiveEdges[0].size();
698 mInitialActiveEdgeCount[1] = mActiveEdges[1].size();*/
699
700 for(PxU32 a = 0; a < mActivatingNodes.size(); ++a)
701 {
702 NodeIndex wakeNode = mActivatingNodes[a];
703
704 IslandId islandId = mIslandIds[wakeNode.index()];
705
706 Node& node = mNodes[wakeNode.index()];
707 node.clearActivating();
708 if(islandId != IG_INVALID_ISLAND)
709 {
710 if(!mIslandAwake.test(islandId))
711 {
712 markIslandActive(islandId);
713 }
714 mActiveNodeIndex[wakeNode.index()] = IG_INVALID_NODE; //Mark active node as invalid.
715 activateNodeInternal(wakeNode);
716 }
717 else
718 {
719 PX_ASSERT(node.isKinematic());
720 node.setActive();
721 PX_ASSERT(mActiveNodeIndex[wakeNode.index()] == a);
722 mActiveNodeIndex[wakeNode.index()] = mActiveKinematicNodes.size();
723 mActiveKinematicNodes.pushBack(wakeNode);
724
725 //Wake up the islands connected to this waking kinematic!
726 EdgeInstanceIndex index = node.mFirstEdgeIndex;
727 while(index != IG_INVALID_EDGE)
728 {
729 EdgeInstance& edgeInstance = mEdgeInstances[index];
730
731 NodeIndex outboundNode = mEdgeNodeIndices[index ^ 1];
732 //Edge& edge = mEdges[index/2];
733 //if(edge.isConnected()) //Only wake up if the edge is not connected...

Callers 2

firstPassIslandGenMethod · 0.80
secondPassIslandGenMethod · 0.80

Calls 12

indexMethod · 0.80
isStaticBodyMethod · 0.80
getEdgeTypeMethod · 0.80
activateEdgeMethod · 0.80
getContextIdFunction · 0.50
sizeMethod · 0.45
forceSize_UnsafeMethod · 0.45
testMethod · 0.45
isKinematicMethod · 0.45
setActiveMethod · 0.45
pushBackMethod · 0.45
isActiveMethod · 0.45

Tested by

no test coverage detected