20class SoftBodyUpdateContext;
30 explicit PhysicsUpdateContext(
TempAllocator &inTempAllocator);
31 ~PhysicsUpdateContext();
33 static constexpr int cMaxConcurrency = 32;
41 atomic<uint32> mWriteIdx { 0 };
44 atomic<uint32> mReadIdx { 0 };
51 static_assert(
sizeof(JobMask) * 8 >= cMaxConcurrency);
59 PhysicsUpdateContext *mContext;
66 uint32 mNumActiveBodiesAtStepStart;
68 atomic<uint32> mDetermineActiveConstraintReadIdx { 0 };
71 atomic<uint32> mNumActiveConstraints { 0 };
74 atomic<uint32> mSetupVelocityConstraintsReadIdx { 0 };
77 atomic<uint32> mStepListenerReadIdx { 0 };
80 atomic<uint32> mApplyGravityReadIdx { 0 };
83 atomic<uint32> mActiveBodyReadIdx { 0 };
86 BodyPairQueues mBodyPairQueues;
88 uint32 mMaxBodyPairsPerQueue;
90 atomic<JobMask> mActiveFindCollisionJobs;
92 atomic<uint> mNumBodyPairs { 0 };
93 atomic<uint> mNumManifolds { 0 };
95 atomic<uint32> mSolveVelocityConstraintsNextIsland { 0 };
96 atomic<uint32> mSolvePositionConstraintsNextIsland { 0 };
101 CCDBody(
BodyID inBodyID1,
Vec3Arg inDeltaPosition,
float inLinearCastThresholdSq,
float inMaxPenetration) : mDeltaPosition(inDeltaPosition), mBodyID1(inBodyID1), mLinearCastThresholdSq(inLinearCastThresholdSq), mMaxPenetration(inMaxPenetration) { }
105 RVec3 mContactPointOn2;
109 float mFraction = 1.0f;
110 float mFractionPlusSlop = 1.0f;
111 float mLinearCastThresholdSq;
112 float mMaxPenetration;
115 atomic<uint32> mIntegrateVelocityReadIdx { 0 };
116 CCDBody * mCCDBodies =
nullptr;
117 uint32 mCCDBodiesCapacity = 0;
118 atomic<uint32> mNumCCDBodies = 0;
119 atomic<uint32> mNextCCDBody { 0 };
120 int * mActiveBodyToCCDBody =
nullptr;
121 uint32 mNumActiveBodyToCCDBody = 0;
125 JobHandleArray mStepListeners;
126 JobHandleArray mDetermineActiveConstraints;
127 JobHandleArray mApplyGravity;
128 JobHandleArray mFindCollisions;
130 JobHandleArray mSetupVelocityConstraints;
134 JobHandleArray mSolveVelocityConstraints;
136 JobHandleArray mIntegrateVelocity;
139 JobHandleArray mSolvePositionConstraints;
142 JobHandleArray mSoftBodyCollide;
143 JobHandleArray mSoftBodySimulate;
151 int GetMaxConcurrency()
const {
const int max_concurrency = PhysicsUpdateContext::cMaxConcurrency;
return min(max_concurrency, mJobSystem->GetMaxConcurrency()); }
158 float mStepDeltaTime;
159 float mWarmStartImpulseRatio;
160 atomic<uint32> mErrors { 0 };
171 SoftBodyUpdateContext * mSoftBodyUpdateContexts =
nullptr;
172 atomic<uint> mSoftBodyToCollide { 0 };
std::uint8_t uint8
Definition Core.h:494
#define JPH_CACHE_LINE_SIZE
Definition Core.h:533
unsigned int uint
Definition Core.h:493
#define JPH_NAMESPACE_END
Definition Core.h:419
std::uint32_t uint32
Definition Core.h:496
#define JPH_NAMESPACE_BEGIN
Definition Core.h:413
#define JPH_ASSERT(...)
Definition IssueReporting.h:33
ID of a body. This is a way of reasoning about bodies in a multithreaded simulation while avoiding ra...
Definition BodyID.h:13
Base class for all physics constraints. A constraint removes one or more degrees of freedom for a rig...
Definition Constraint.h:108
Keeps track of connected bodies and builds islands for multithreaded velocity/position update.
Definition IslandBuilder.h:19
A job barrier keeps track of a number of jobs and allows waiting until they are all completed.
Definition JobSystem.h:123
Definition JobSystem.h:80
Definition JobSystem.h:70
Class that makes another class non-copyable. Usage: Inherit from NonCopyable.
Definition NonCopyable.h:11
Definition PhysicsSystem.h:30
Simple variable length array backed by a fixed size buffer.
Definition StaticArray.h:14
A sub shape id contains a path to an element (usually a triangle or other primitive type) of a compou...
Definition SubShapeID.h:23
Definition TempAllocator.h:16
Structure that holds a body pair.
Definition BodyPair.h:14
Context used during broadphase update.
Definition BroadPhase.h:44