82 PxU32 mOffsets[1<<PxsContactManagerBase::MaxBucketBits];
83 PxsContactManagerOutput* mOutputs;
93 PX_ASSERT(nbOffsets <= (1<<PxsContactManagerBase::MaxBucketBits));
95 for(PxU32 a = 0; a < nbOffsets; ++a)
97 mOffsets[a] = offsets[a];
103 PX_ASSERT((
id & PxsContactManagerBase::NEW_CONTACT_MANAGER_MASK) == 0);
104 PxU32 bucketId = PxsContactManagerBase::computeBucketIndexFromId(
id);
105 PxU32 cmOutId = PxsContactManagerBase::computeIndexFromId(
id);
106 return mOutputs[mOffsets[bucketId] + cmOutId];
109 PxU32 getIndex(PxU32
id)
111 PX_ASSERT((
id & PxsContactManagerBase::NEW_CONTACT_MANAGER_MASK) == 0);
112 PxU32 bucketId = PxsContactManagerBase::computeBucketIndexFromId(
id);
113 PxU32 cmOutId = PxsContactManagerBase::computeIndexFromId(
id);
114 return mOffsets[bucketId] + cmOutId;
127 virtual void destroy() = 0;
128 virtual void updateContactManager(PxReal dt,
bool hasBoundsArrayChanged,
bool hasContactDistanceChanged,
130 virtual void postBroadPhaseUpdateContactManager(
PxBaseTask* continuation) = 0;
131 virtual void secondPassUpdateContactManager(PxReal dt,
PxBaseTask* continuation) = 0;
132 virtual void fetchUpdateContactManager() = 0;
139 virtual void registerShape(
const PxNodeIndex& nodeIndex,
const PxsShapeCore& shapeCore,
const PxU32 transformCacheID,
PxActor* actor,
const bool isFemCloth =
false) = 0;
140 virtual void unregisterShape(
const PxsShapeCore& shapeCore,
const PxU32 transformCacheID,
const bool isFemCloth =
false) = 0;
142 virtual void registerAggregate(
const PxU32 transformCacheID) = 0;
144 virtual void registerMaterial(
const PxsMaterialCore& materialCore) = 0;
146 virtual void unregisterMaterial(
const PxsMaterialCore& materialCore) = 0;
172 virtual void updateShapeMaterial(
const PxsShapeCore& shapeCore) = 0;
175 virtual void startNarrowPhaseTasks() = 0;
177 virtual void appendContactManagers() = 0;
179 virtual PxsContactManagerOutput& getNewContactManagerOutput(PxU32 index) = 0;
185 virtual void acquireContext() = 0;
186 virtual void releaseContext() = 0;
187 virtual void preallocateNewBuffers(PxU32 nbNewPairs, PxU32 maxIndex) = 0;
189 virtual void lock() = 0;
190 virtual void unlock() = 0;
192 virtual PxsContactManagerOutputCounts* getFoundPatchOutputCounts() = 0;
194 virtual PxU32 getNbFoundPatchManagers() = 0;
199 virtual PxsContactManagerOutput* getGPUContactManagerOutputBase() = 0;
200 virtual PxReal* getGPURestDistances() = 0;
202 virtual PxsTorsionalFrictionData* getGPUTorsionalData() = 0;
204 virtual void waitForContactsReady() {}
219 virtual void processContactManager(PxReal dt, PxsContactManagerOutput* cmOutputs,
PxBaseTask* continuation) = 0;
220 virtual void processContactManagerSecondPass(PxReal dt,
PxBaseTask* continuation) = 0;
223 virtual void unregisterContactManagerFallback(
PxsContactManager* cm, PxsContactManagerOutput* cmOutputs) = 0;
225 virtual void refreshContactManagerFallback(
PxsContactManager* cm, PxsContactManagerOutput* cmOutputs) = 0;
227 virtual PxsContactManagerOutput& getNewContactManagerOutput(PxU32 npId) = 0;
229 virtual void appendContactManagersFallback(PxsContactManagerOutput* outputs) = 0;
233 virtual void removeContactManagersFallback(PxsContactManagerOutput* cmOutputs) = 0;
235 virtual void lock() = 0;
236 virtual void unlock() = 0;
238 virtual PxsContactManagerOutputCounts* getFoundPatchOutputCounts() = 0;
240 virtual PxU32 getNbFoundPatchManagers() = 0;
243 virtual PxReal* getRestDistances() = 0;
244 virtual PxsTorsionalFrictionData* getTorsionalData() = 0;
Definition PxsContext.h:92
Definition PxvNphaseImplementationContext.h:249
Definition PxvNphaseImplementationContext.h:120
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39