RavEngine
Loading...
Searching...
No Matches
DyTGSDynamics.h
1// Redistribution and use in source and binary forms, with or without
2// modification, are permitted provided that the following conditions
3// are met:
4// * Redistributions of source code must retain the above copyright
5// notice, this list of conditions and the following disclaimer.
6// * Redistributions in binary form must reproduce the above copyright
7// notice, this list of conditions and the following disclaimer in the
8// documentation and/or other materials provided with the distribution.
9// * Neither the name of NVIDIA CORPORATION nor the names of its
10// contributors may be used to endorse or promote products derived
11// from this software without specific prior written permission.
12//
13// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24//
25// Copyright (c) 2008-2022 NVIDIA Corporation. All rights reserved.
26// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
27// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
28
29#ifndef DY_TGS_DYNAMICS_H
30#define DY_TGS_DYNAMICS_H
31
32#include "PxvConfig.h"
33#include "CmSpatialVector.h"
34#include "CmTask.h"
35#include "CmPool.h"
36#include "PxcThreadCoherentCache.h"
37#include "DyThreadContext.h"
38#include "PxcConstraintBlockStream.h"
39#include "DySolverBody.h"
40#include "DyContext.h"
41#include "PxsIslandManagerTypes.h"
42#include "PxvNphaseImplementationContext.h"
43#include "solver/PxSolverDefs.h"
44#include "PxsIslandSim.h"
45
46namespace physx
47{
48
49 namespace Cm
50 {
51 class FlushPool;
52 }
53
54 namespace IG
55 {
56 class SimpleIslandManager;
57 struct Edge;
58 }
59
60 class PxsRigidBody;
61
62 struct PxsBodyCore;
63 class PxsIslandIndices;
64 struct PxsIndexedInteraction;
65 struct PxsIndexedContactManager;
66
67 namespace Cm
68 {
69 class SpatialVector;
70 }
71
72 namespace Dy
73 {
74 class SolverCore;
75 struct SolverIslandParams;
76 struct ArticulationSolverDesc;
77 class DynamicsContext;
78 struct SolverContext;
79
81 {
82 PxsRigidBody** bodies;
83 FeatherstoneArticulation** articulations;
84 FeatherstoneArticulation** articulationOwners;
85 PxsIndexedContactManager* contactManagers;
86
87 const IG::IslandId* islandIds;
88 PxU32 numIslands;
89 PxU32* bodyRemapTable;
90 PxU32* nodeIndexArray;
91
92 PxSolverConstraintDesc* constraintDescs;
93 PxSolverConstraintDesc* orderedConstraintDescs;
94 PxSolverConstraintDesc* tempConstraintDescs;
95 PxConstraintBatchHeader* constraintBatchHeaders;
96 Cm::SpatialVector* motionVelocities;
97 PxsBodyCore** bodyCoreArray;
98
99 PxU32 solverBodyOffset;
100
101 SolverIslandObjectsStep() : bodies(NULL), articulations(NULL), articulationOwners(NULL),
102 contactManagers(NULL), islandIds(NULL), numIslands(0), nodeIndexArray(NULL), constraintDescs(NULL), motionVelocities(NULL), bodyCoreArray(NULL),
103 solverBodyOffset(0)
104 {
105 }
106 };
107
109 {
110 //The thread context for this island (set in in the island start task, released in the island end task)
111 ThreadContext* mThreadContext;
112 PxsIslandIndices mCounts;
114 PxU32 mPosIters;
115 PxU32 mVelIters;
116 PxU32 mArticulationOffset;
117 PxReal mStepDt;
118 PxReal mInvStepDt;
119 PxReal mBiasCoefficient;
120 PxI32 mSharedSolverIndex;
121 PxI32 mSolvedCount;
122 PxI32 mSharedRigidBodyIndex;
123 PxI32 mRigidBodyIntegratedCount;
124 PxI32 mSharedArticulationIndex;
125 PxI32 mArticulationIntegratedCount;
126 };
127
129
130 class SolverBodyVelDataPool : public PxArray<PxTGSSolverBodyVel, PxAlignedAllocator<128, PxReflectionAllocator<PxTGSSolverBodyVel> > >
131 {
132 PX_NOCOPY(SolverBodyVelDataPool)
133 public:
135 };
136
137 class SolverBodyTxInertiaPool : public PxArray<PxTGSSolverBodyTxInertia, PxAlignedAllocator<128, PxReflectionAllocator<PxTGSSolverBodyTxInertia> > >
138 {
139 PX_NOCOPY(SolverBodyTxInertiaPool)
140 public:
142 };
143
144 class SolverBodyDataStepPool : public PxArray<PxTGSSolverBodyData, PxAlignedAllocator<128, PxReflectionAllocator<PxTGSSolverBodyData> > >
145 {
146 PX_NOCOPY(SolverBodyDataStepPool)
147 public:
149 };
150
151 class SolverStepConstraintDescPool : public PxArray<PxSolverConstraintDesc, PxAlignedAllocator<128, PxReflectionAllocator<PxSolverConstraintDesc> > >
152 {
154 public:
156 };
157
158#if PX_VC
159#pragma warning(push)
160#pragma warning( disable : 4324 ) // Padding was added at the end of a structure because of a __declspec(align) value.
161#endif
162
164 {
165 PX_NOCOPY(DynamicsTGSContext)
166 public:
167
172 static DynamicsTGSContext* create(PxcNpMemBlockPool* memBlockPool,
173 PxcScratchAllocator& scratchAllocator,
174 Cm::FlushPool& taskPool,
175 PxvSimStats& simStats,
176 PxTaskManager* taskManager,
178 PxsMaterialManager* materialManager,
179 IG::SimpleIslandManager* islandManager,
180 PxU64 contextID,
181 const bool enableStabilization,
182 const bool useEnhancedDeterminism,
183 const PxReal lengthScale
184 );
185
189 void destroy();
190
195 //PX_FORCE_INLINE PxSolverBody& getWorldSolverBody() { return mWorldSolverBody; }
196
198
199 PX_FORCE_INLINE ThresholdStream& getThresholdStream() { return *mThresholdStream; }
200
201 PX_FORCE_INLINE PxvSimStats& getSimStats() { return mSimStats; }
202
203#if PX_ENABLE_SIM_STATS
204 void addThreadStats(const ThreadContext::ThreadSimStats& stats);
205#else
206 PX_CATCH_UNDEFINED_ENABLE_SIM_STATS
207#endif
208
223 virtual void update(IG::SimpleIslandManager& simpleIslandManager, PxBaseTask* continuation, PxBaseTask* lostTouchTask,
224 PxvNphaseImplementationContext* nphase,
225 const PxU32 maxPatchesPerCM, const PxU32 maxArticulationLinks, const PxReal dt, const PxVec3& gravity, PxBitMapPinned& changedHandleMap);
226
227 void updatePostKinematic(IG::SimpleIslandManager& simpleIslandManager, PxBaseTask* continuation,
228 PxBaseTask* lostTouchTask, const PxU32 maxLinks);
229
230 virtual void processLostPatches(IG::SimpleIslandManager& /*simpleIslandManager*/, PxsContactManager** /*lostPatchManagers*/, PxU32 /*nbLostPatchManagers*/, PxsContactManagerOutputCounts* /*outCounts*/){}
231 virtual void processFoundPatches(IG::SimpleIslandManager& /*simpleIslandManager*/, PxsContactManager** /*foundPatchManagers*/, PxU32 /*nbFoundPatchManagers*/, PxsContactManagerOutputCounts* /*outCounts*/) {}
232
233 virtual void updateBodyCore(PxBaseTask* continuation);
234
235 virtual void setSimulationController(PxsSimulationController* simulationController){ mSimulationController = simulationController; }
239 virtual void mergeResults();
240
241 virtual void getDataStreamBase(void*& /*contactStreamBase*/, void*& /*patchStreamBase*/, void*& /*forceAndIndicesStreamBase*/){}
242
243 virtual PxSolverType::Enum getSolverType() const { return PxSolverType::eTGS; }
244
253
262
263
264 PX_FORCE_INLINE PxU32 getKinematicCount() const { return mKinematicCount; }
265 PX_FORCE_INLINE PxU64 getContextId() const { return mContextID; }
266
267 PX_FORCE_INLINE PxReal getLengthScale() const { return mLengthScale; }
268
269 protected:
270
274 DynamicsTGSContext(PxcNpMemBlockPool* memBlockPool,
275 PxcScratchAllocator& scratchAllocator,
276 Cm::FlushPool& taskPool,
277 PxvSimStats& simStats,
278 PxTaskManager* taskManager,
279 PxVirtualAllocatorCallback* allocator,
280 PxsMaterialManager* materialManager,
281 IG::SimpleIslandManager* islandManager,
282 PxU64 contextID,
283 const bool enableStabilization,
284 const bool useEnhancedDeterminism,
285 const PxReal lengthScale
286 );
290 virtual ~DynamicsTGSContext();
291
292
293 // Solver helper-methods
299
305 void setDescFromIndices(PxSolverConstraintDesc& desc, const IG::IslandSim& islandSim,
306 const PxsIndexedInteraction& constraint, const PxU32 solverBodyOffset, PxTGSSolverBodyVel* solverBodies);
307
308
309 void setDescFromIndices(PxSolverConstraintDesc& desc, IG::EdgeIndex edgeIndex,
310 const IG::SimpleIslandManager& islandManager, PxU32* bodyRemapTable, const PxU32 solverBodyOffset, PxTGSSolverBodyVel* solverBodies);
311
312
313 void solveIsland(const SolverIslandObjectsStep& objects,
314 const PxsIslandIndices& counts,
315 const PxU32 solverBodyOffset,
316 IG::SimpleIslandManager& islandManager,
317 PxU32* bodyRemapTable, PxsMaterialManager* materialManager,
319 PxBaseTask* continuation);
320
321 void prepareBodiesAndConstraints(const SolverIslandObjectsStep& objects,
322 IG::SimpleIslandManager& islandManager,
323 IslandContextStep& islandContext);
324
325 void setupDescs(IslandContextStep& islandContext, const SolverIslandObjectsStep& objects, PxU32* mBodyRemapTable, PxU32 mSolverBodyOffset,
327
328 void preIntegrateBodies(PxsBodyCore** bodyArray, PxsRigidBody** originalBodyArray,
329 PxTGSSolverBodyVel* solverBodyVelPool, PxTGSSolverBodyTxInertia* solverBodyTxInertia, PxTGSSolverBodyData* solverBodyDataPool2,
330 PxU32* nodeIndexArray, const PxU32 bodyCount, const PxVec3& gravity, const PxReal dt, PxU32& posIters, PxU32& velIters, PxU32 iteration);
331
332 void setupArticulations(IslandContextStep& islandContext, const PxVec3& gravity, const PxReal dt, PxU32& posIters, PxU32& velIters, PxBaseTask* continuation);
333
334 PxU32 setupArticulationInternalConstraints(IslandContextStep& islandContext, PxReal dt, PxReal invStepDt);
335
336 void createSolverConstraints(PxSolverConstraintDesc* contactDescPtr, PxConstraintBatchHeader* headers, const PxU32 nbHeaders,
337 PxsContactManagerOutputIterator& outputs, Dy::ThreadContext& islandThreadContext, Dy::ThreadContext& threadContext, PxReal stepDt, PxReal totalDt,
338 PxReal invStepDt, const PxReal biasCoefficient, PxI32 velIters);
339
340 void solveConstraintsIteration(const PxSolverConstraintDesc* const contactDescPtr, const PxConstraintBatchHeader* const batchHeaders, const PxU32 nbHeaders, PxReal invStepDt,
341 const PxTGSSolverBodyTxInertia* const solverTxInertia, const PxReal elapsedTime, const PxReal minPenetration, SolverContext& cache);
342
343 template <bool TSync>
344 void solveConcludeConstraintsIteration(const PxSolverConstraintDesc* const contactDescPtr, const PxConstraintBatchHeader* const batchHeaders, const PxU32 nbHeaders,
345 PxTGSSolverBodyTxInertia* solverTxInertia, const PxReal elapsedTime, SolverContext& cache, const PxU32 iterCount);
346
347 template <bool Sync>
348 void parallelSolveConstraints(const PxSolverConstraintDesc* const contactDescPtr, const PxConstraintBatchHeader* const batchHeaders, const PxU32 nbHeaders, PxTGSSolverBodyTxInertia* solverTxInertia,
349 const PxReal elapsedTime, const PxReal minPenetration, SolverContext& cache, const PxU32 iterCount);
350
351 void writebackConstraintsIteration(const PxConstraintBatchHeader* const hdrs, const PxSolverConstraintDesc* const contactDescPtr, const PxU32 nbHeaders);
352
353 void parallelWritebackConstraintsIteration(const PxSolverConstraintDesc* const contactDescPtr, const PxConstraintBatchHeader* const batchHeaders, const PxU32 nbHeaders);
354
355 void integrateBodies(const SolverIslandObjectsStep& objects,
356 const PxU32 count, PxTGSSolverBodyVel* vels,
357 PxTGSSolverBodyTxInertia* txInertias, const PxTGSSolverBodyData*const bodyDatas, PxReal dt, PxReal invTotalDt, bool averageBodies,
358 const PxReal ratio);
359
360 void parallelIntegrateBodies(PxTGSSolverBodyVel* vels, PxTGSSolverBodyTxInertia* txInertias,
361 const PxTGSSolverBodyData* const bodyDatas, const PxU32 count, PxReal dt, const PxU32 iteration, PxReal invTotalDt, bool average,
362 const PxReal ratio);
363
364 void copyBackBodies(const SolverIslandObjectsStep& objects,
366 PxTGSSolverBodyData* solverBodyData, PxReal invDt, IG::IslandSim& islandSim,
367 PxU32 startIdx, PxU32 endIdx);
368
369 void updateArticulations(Dy::ThreadContext& threadContext, const PxU32 startIdx, const PxU32 endIdx, PxReal dt);
370
371 void stepArticulations(Dy::ThreadContext& threadContext, const PxsIslandIndices& counts, PxReal dt, PxReal stepInvDt);
372
373 void iterativeSolveIsland(const SolverIslandObjectsStep& objects, const PxsIslandIndices& counts, ThreadContext& mThreadContext,
374 const PxReal stepDt, const PxReal invStepDt, const PxU32 posIters, const PxU32 velIters, SolverContext& cache, const PxReal ratio,
375 const PxReal biasCoefficient);
376
377 void iterativeSolveIslandParallel(const SolverIslandObjectsStep& objects, const PxsIslandIndices& counts, ThreadContext& mThreadContext,
378 const PxReal stepDt, const PxU32 posIters, const PxU32 velIters, PxI32* solverCounts, PxI32* integrationCounts, PxI32* articulationIntegrationCounts,
379 PxI32* solverProgressCount, PxI32* integrationProgressCount, PxI32* articulationProgressCount, PxU32 solverUnrollSize, PxU32 integrationUnrollSize,
380 const PxReal ratio, const PxReal biasCoefficient);
381
382 void endIsland(ThreadContext& mThreadContext);
383
384 void finishSolveIsland(ThreadContext& mThreadContext, const SolverIslandObjectsStep& objects,
385 const PxsIslandIndices& counts, IG::SimpleIslandManager& islandManager, PxBaseTask* continuation);
386
390 void resetThreadContexts();
391
397
398 //Data
399
400 PxTGSSolverBodyVel mWorldSolverBodyVel;
401 PxTGSSolverBodyTxInertia mWorldSolverBodyTxInertia;
402 PxTGSSolverBodyData mWorldSolverBodyData2;
403
408
413
414 SolverStepConstraintDescPool mOrderedSolverConstraintDescPool;
415
416 SolverStepConstraintDescPool mTempSolverConstraintDescPool;
417
418 PxArray<PxConstraintBatchHeader> mContactConstraintBatchHeaders;
419
424
429
434
439
440 SolverBodyVelDataPool mSolverBodyVelPool;
441
442 SolverBodyTxInertiaPool mSolverBodyTxInertiaPool;
443
444 SolverBodyDataStepPool mSolverBodyDataPool2;
445
446
447 ThresholdStream* mExceededForceThresholdStream[2]; //this store previous and current exceeded force thresholdStream
448
449 PxArray<PxU32> mExceededForceThresholdStreamMask;
450
451 PxArray<PxU32> mSolverBodyRemapTable; //Remaps from the "active island" index to the index within a solver island
452
453 PxArray<PxU32> mNodeIndexArray; //island node index
454
456
461
466
467 PxsMaterialManager* mMaterialManager;
468
469 PxsContactManagerOutputIterator mOutputIterator;
470
471 private:
472 //private:
473 PxcScratchAllocator& mScratchAllocator;
474 Cm::FlushPool& mTaskPool;
475 PxTaskManager* mTaskManager;
476 PxU32 mCurrentIndex; // this is the index point to the current exceeded force threshold stream
477
478 PxU64 mContextID;
479
480 friend class SetupDescsTask;
481 friend class PreIntegrateTask;
482 friend class SetupArticulationTask;
484 friend class SetupSolverConstraintsTask;
485 friend class SolveIslandTask;
486 friend class EndIslandTask;
488 friend class ParallelSolveTask;
489 friend class PreIntegrateParallelTask;
490 friend class CopyBackTask;
491 friend class UpdateArticTask;
492 friend class FinishSolveIslandTask;
493 };
494
495#if PX_VC
496#pragma warning(pop)
497#endif
498
499 }
500}
501
502#endif
503
Definition base.h:1940
Definition CmFlushPool.h:49
Definition CmSpatialVector.h:46
Definition DyContext.h:76
PxReal mLengthScale
The length scale from PxTolerancesScale::length.
Definition DyContext.h:346
Definition DyTGSDynamics.cpp:3224
Definition DyTGSDynamics.h:164
virtual ~DynamicsTGSContext()
Destructor for DynamicsContext.
Definition DyTGSDynamics.cpp:371
virtual void mergeResults()
This method combines the results of several islands, e.g. constructing scene-level simulation statist...
Definition DyTGSDynamics.cpp:3399
void setDescFromIndices(PxSolverConstraintDesc &desc, const IG::IslandSim &islandSim, const PxsIndexedInteraction &constraint, const PxU32 solverBodyOffset, PxTGSSolverBodyVel *solverBodies)
fills in a PxSolverConstraintDesc from an indexed interaction
Definition DyTGSDynamics.cpp:377
static DynamicsTGSContext * create(PxcNpMemBlockPool *memBlockPool, PxcScratchAllocator &scratchAllocator, Cm::FlushPool &taskPool, PxvSimStats &simStats, PxTaskManager *taskManager, PxVirtualAllocatorCallback *allocator, PxsMaterialManager *materialManager, IG::SimpleIslandManager *islandManager, PxU64 contextID, const bool enableStabilization, const bool useEnhancedDeterminism, const PxReal lengthScale)
Creates a DynamicsContext associated with a PxsContext.
Definition DyTGSDynamics.cpp:146
void putThreadContext(ThreadContext *context)
Returns a thread context to the thread context pool.
Definition DyTGSDynamics.h:258
DynamicsTGSContext(PxcNpMemBlockPool *memBlockPool, PxcScratchAllocator &scratchAllocator, Cm::FlushPool &taskPool, PxvSimStats &simStats, PxTaskManager *taskManager, PxVirtualAllocatorCallback *allocator, PxsMaterialManager *materialManager, IG::SimpleIslandManager *islandManager, PxU64 contextID, const bool enableStabilization, const bool useEnhancedDeterminism, const PxReal lengthScale)
Constructor for DynamicsContext.
Definition DyTGSDynamics.cpp:327
void computeUnconstrainedVelocity(PxsRigidBody *atom) const
Computes the unconstrained velocity for a given PxsRigidBody.
virtual void updateBodyCore(PxBaseTask *continuation)
This method copy gpu solver body data to cpu body core.
Definition DyTGSDynamics.cpp:3394
PxArray< PxsBodyCore * > mBodyCoreArray
Array of body core pointers for all bodies in the scene.
Definition DyTGSDynamics.h:428
void destroy()
Destroys this DynamicsContext.
Definition DyTGSDynamics.cpp:169
PxI32 mThresholdStreamOut
Atomic counter for the number of threshold stream elements.
Definition DyTGSDynamics.h:465
PxArray< FeatherstoneArticulation * > mArticulationArray
Array of articulationpointers for all articulations in the scene.
Definition DyTGSDynamics.h:438
PxArray< Cm::SpatialVector > mMotionVelocityArray
Array of motion velocities for all bodies in the scene.
Definition DyTGSDynamics.h:423
PxArray< PxsRigidBody * > mRigidBodyArray
Array of rigid body pointers for all bodies in the scene.
Definition DyTGSDynamics.h:433
SolverStepConstraintDescPool mSolverConstraintDescPool
Solver constraint desc array.
Definition DyTGSDynamics.h:412
PX_FORCE_INLINE ThreadContext * getThreadContext()
Allocates and returns a thread context object.
Definition DyTGSDynamics.h:249
void resetThreadContexts()
Resets the thread contexts.
Definition DyTGSDynamics.cpp:175
PxcThreadCoherentCache< ThreadContext, PxcNpMemBlockPool > mThreadContextPool
A thread context pool.
Definition DyTGSDynamics.h:407
PxU32 mKinematicCount
The total number of kinematic bodies in the scene.
Definition DyTGSDynamics.h:460
PX_FORCE_INLINE PxcScratchAllocator & getScratchAllocator()
Returns the scratch memory allocator.
Definition DyTGSDynamics.h:396
PX_FORCE_INLINE Cm::FlushPool & getTaskPool()
Returns the static world solver body.
Definition DyTGSDynamics.h:197
virtual PX_CATCH_UNDEFINED_ENABLE_SIM_STATS void update(IG::SimpleIslandManager &simpleIslandManager, PxBaseTask *continuation, PxBaseTask *lostTouchTask, PxvNphaseImplementationContext *nphase, const PxU32 maxPatchesPerCM, const PxU32 maxArticulationLinks, const PxReal dt, const PxVec3 &gravity, PxBitMapPinned &changedHandleMap)
The entry point for the constraint solver.
Definition DyTGSDynamics.cpp:615
Definition DyTGSDynamics.cpp:2667
Definition DyFeatherstoneArticulation.h:590
Definition DyTGSDynamics.cpp:2689
Definition DyTGSDynamics.cpp:2456
Definition DyTGSDynamics.cpp:1917
Definition DyTGSDynamics.cpp:1961
Definition DyTGSDynamics.cpp:2074
Definition DyTGSDynamics.cpp:1887
Definition DyTGSDynamics.cpp:2131
Definition DyTGSDynamics.cpp:2244
Definition DyTGSDynamics.cpp:2487
Definition DyTGSDynamics.h:145
Definition DyTGSDynamics.h:138
Definition DyTGSDynamics.h:131
Definition DyTGSDynamics.h:152
Definition DyThreadContext.h:65
Definition DyThresholdTable.h:81
Definition DyTGSDynamics.cpp:3257
Definition PxsIslandSim.h:412
Definition PxsSimpleIslandManager.h:87
Definition PxArray.h:53
Base class of all task types.
Definition PxTask.h:45
The PxTaskManager interface.
Definition PxTaskManager.h:81
3 Element vector class.
Definition PxVec3.h:50
Definition PxAllocator.h:140
Definition PxcNpMemBlockPool.h:52
Definition PxcScratchAllocator.h:42
Definition PxcThreadCoherentCache.h:52
Definition PxvNphaseImplementationContext.h:81
Definition PxsIslandManagerTypes.h:78
Definition PxsMaterialManager.h:126
Definition PxsRigidBody.h:43
#define PX_FORCE_INLINE
Definition PxPreprocessor.h:335
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
Definition DyTGSDynamics.h:109
Definition DySolverContext.h:42
Definition DyTGSDynamics.h:81
A header that defines the size of a specific batch of constraints (of same type and without dependenc...
Definition PxSolverDefs.h:98
Constraint descriptor used inside the solver.
Definition PxSolverDefs.h:108
Enum
Definition PxSceneDesc.h:89
@ eTGS
Default Temporal Gauss-Seidel solver.
Definition PxSceneDesc.h:91
Definition PxSolverDefs.h:446
Definition PxSolverDefs.h:440
Definition PxSolverDefs.h:419
Definition PxvDynamics.h:74
Definition PxsIslandManagerTypes.h:167
Each contact manager or constraint references two separate bodies, where a body can be a dynamic rigi...
Definition PxsIslandManagerTypes.h:101
Definition PxvSimStats.h:52