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

Method addNode

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

Source from the content-addressed store, hash-verified

88}
89
90void IslandSim::addNode(bool isActive, bool isKinematic, Node::NodeType type, NodeIndex nodeIndex)
91{
92 PxU32 handle = nodeIndex.index();
93 if(handle == mNodes.capacity())
94 {
95 const PxU32 newCapacity = PxMax(2*mNodes.capacity(), 256u);
96 mNodes.reserve(newCapacity);
97 mIslandIds.reserve(newCapacity);
98 mFastRoute.reserve(newCapacity);
99 mHopCounts.reserve(newCapacity);
100 mActiveNodeIndex.reserve(newCapacity);
101 }
102
103 const PxU32 newSize = PxMax(handle+1, mNodes.size());
104 mNodes.resize(newSize);
105 mIslandIds.resize(newSize);
106 mFastRoute.resize(newSize);
107 mHopCounts.resize(newSize);
108 mActiveNodeIndex.resize(newSize);
109
110 mActiveNodeIndex[handle] = IG_INVALID_NODE;
111
112
113 Node& node = mNodes[handle];
114 node.mType = Ps::to8(type);
115 //Ensure that the node is not currently being used.
116 PX_ASSERT(node.isDeleted());
117
118 PxU8 flags = PxU16(isActive ? 0 : Node::eREADY_FOR_SLEEPING);
119 if(isKinematic)
120 flags |= Node::eKINEMATIC;
121 node.mFlags = flags;
122 mIslandIds[handle] = IG_INVALID_ISLAND;
123 mFastRoute[handle].setIndices(IG_INVALID_NODE);
124 mHopCounts[handle] = 0;
125
126 if(!isKinematic)
127 {
128 IslandId islandHandle = mIslandHandles.getHandle();
129
130 if(islandHandle == mIslands.capacity())
131 {
132 const PxU32 newCapacity = PxMax(2*mIslands.capacity(), 256u);
133 mIslands.reserve(newCapacity);
134 mIslandAwake.resize(newCapacity);
135 mIslandStaticTouchCount.reserve(newCapacity);
136 }
137 mIslands.resize(PxMax(islandHandle+1, mIslands.size()));
138 mIslandStaticTouchCount.resize(PxMax(islandHandle+1, mIslands.size()));
139 mIslandAwake.growAndReset(PxMax(islandHandle+1, mIslands.size()));
140 Island& island = mIslands[islandHandle];
141 island.mLastNode = island.mRootNode = nodeIndex;
142 island.mSize[type] = 1;
143 mIslandIds[handle] = islandHandle;
144 mIslandStaticTouchCount[islandHandle] = 0;
145 }
146
147 if(isActive)

Callers

nothing calls this directly

Calls 10

PxMaxFunction · 0.85
to8Function · 0.85
indexMethod · 0.80
growAndResetMethod · 0.80
capacityMethod · 0.45
reserveMethod · 0.45
sizeMethod · 0.45
resizeMethod · 0.45
setIndicesMethod · 0.45
getHandleMethod · 0.45

Tested by

no test coverage detected