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

Method addConnection

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

Source from the content-addressed store, hash-verified

181}
182
183void IslandSim::addConnection(NodeIndex nodeHandle1, NodeIndex nodeHandle2, Edge::EdgeType edgeType, EdgeIndex handle)
184{
185 PX_UNUSED(nodeHandle1);
186 PX_UNUSED(nodeHandle2);
187 if(handle >= mEdges.capacity())
188 {
189 PX_PROFILE_ZONE("ReserveIslandEdges", getContextId());
190 const PxU32 newSize = handle + 2048;
191 mEdges.reserve(newSize);
192 mActiveContactEdges.resize(mEdges.capacity());
193 }
194 mEdges.resize(PxMax(mEdges.size(), handle+1));
195 mActiveContactEdges.reset(handle);
196
197 Edge& edge = mEdges[handle];
198
199 if(edge.isPendingDestroyed())
200 {
201 //If it's in this state, then the edge has been tagged for destruction but actually is now not needed to be destroyed
202 edge.clearPendingDestroyed();
203 return;
204 }
205
206 if(edge.isInDirtyList())
207 {
208 PX_ASSERT(mEdgeNodeIndices[handle * 2].index() == nodeHandle1.index());
209 PX_ASSERT(mEdgeNodeIndices[handle * 2 + 1].index() == nodeHandle2.index());
210 PX_ASSERT(edge.mEdgeType == edgeType);
211 return;
212 }
213
214 PX_ASSERT(!edge.isInserted());
215
216 PX_ASSERT(edge.isDestroyed());
217 edge.clearDestroyed();
218
219 PX_ASSERT(edge.mNextIslandEdge == IG_INVALID_ISLAND);
220 PX_ASSERT(edge.mPrevIslandEdge == IG_INVALID_ISLAND);
221
222 PX_ASSERT(mEdgeInstances.size() <= 2*handle || mEdgeInstances[2*handle].mNextEdge == IG_INVALID_EDGE);
223 PX_ASSERT(mEdgeInstances.size() <= 2*handle || mEdgeInstances[2*handle+1].mNextEdge == IG_INVALID_EDGE);
224 PX_ASSERT(mEdgeInstances.size() <= 2*handle || mEdgeInstances[2*handle].mPrevEdge == IG_INVALID_EDGE);
225 PX_ASSERT(mEdgeInstances.size() <= 2*handle || mEdgeInstances[2*handle+1].mPrevEdge == IG_INVALID_EDGE);
226
227 edge.mEdgeType = edgeType;
228
229 PX_ASSERT(handle*2 >= mEdgeInstances.size() || mEdgeInstances[handle*2].mNextEdge == IG_INVALID_EDGE);
230 PX_ASSERT(handle*2+1 >= mEdgeInstances.size() || mEdgeInstances[handle*2+1].mNextEdge == IG_INVALID_EDGE);
231 PX_ASSERT(handle*2 >= mEdgeInstances.size() || mEdgeInstances[handle*2].mPrevEdge == IG_INVALID_EDGE);
232 PX_ASSERT(handle*2+1 >= mEdgeInstances.size() || mEdgeInstances[handle*2+1].mPrevEdge == IG_INVALID_EDGE);
233
234 //Add the new handle
235 if(!edge.isInDirtyList())
236 {
237 PX_ASSERT(!contains(mDirtyEdges[edgeType], handle));
238 mDirtyEdges[edgeType].pushBack(handle);
239 edge.markInDirtyList();
240 }

Callers

nothing calls this directly

Calls 15

PX_UNUSEDFunction · 0.85
PxMaxFunction · 0.85
isPendingDestroyedMethod · 0.80
clearPendingDestroyedMethod · 0.80
isInDirtyListMethod · 0.80
indexMethod · 0.80
isInsertedMethod · 0.80
isDestroyedMethod · 0.80
clearDestroyedMethod · 0.80
markInDirtyListMethod · 0.80
containsFunction · 0.70
getContextIdFunction · 0.50

Tested by

no test coverage detected