20class SoftBodyUpdateContext;
30 explicit PhysicsUpdateContext(TempAllocator &inTempAllocator);
31 ~PhysicsUpdateContext();
33 static constexpr int cMaxConcurrency = 32;
35 using JobHandleArray = StaticArray<JobHandle, cMaxConcurrency>;
41 atomic<uint32> mWriteIdx { 0 };
44 atomic<uint32> mReadIdx { 0 };
48 using BodyPairQueues = StaticArray<BodyPairQueue, cMaxConcurrency>;
51 static_assert(
sizeof(JobMask) * 8 >= cMaxConcurrency);
59 PhysicsUpdateContext *mContext;
64 BroadPhase::UpdateState mBroadPhaseUpdateState;
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;
108 SubShapeID mSubShapeID2;
109 float mFraction = 1.0f;
110 float mFractionPlusSlop = 1.0f;
111 float mLinearCastThresholdSq;
112 float mMaxPenetration;
113 ContactSettings mContactSettings;
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()); }
153 PhysicsSystem * mPhysicsSystem;
154 TempAllocator * mTempAllocator;
155 JobSystem * mJobSystem;
156 JobSystem::Barrier * mBarrier;
158 float mStepDeltaTime;
159 float mWarmStartImpulseRatio;
160 atomic<uint32> mErrors { 0 };
164 BodyPair * mBodyPairs =
nullptr;
166 IslandBuilder * mIslandBuilder;
171 SoftBodyUpdateContext * mSoftBodyUpdateContexts =
nullptr;
172 atomic<uint> mSoftBodyToCollide { 0 };
@ Constraint
Definition Constraint.h:28
std::uint8_t uint8
Definition Core.h:501
#define JPH_CACHE_LINE_SIZE
Definition Core.h:545
unsigned int uint
Definition Core.h:500
#define JPH_NAMESPACE_END
Definition Core.h:425
std::uint32_t uint32
Definition Core.h:503
#define JPH_NAMESPACE_BEGIN
Definition Core.h:419
#define JPH_ASSERT(...)
Definition IssueReporting.h:33
JobSystem::JobHandle JobHandle
Definition JobSystem.h:307
const Vec3 Vec3Arg
Definition MathTypes.h:19
Vec3 RVec3
Definition Real.h:29
@ Array
Used in attribute declaration, indicates that this is an array of objects.
Definition SerializableAttribute.h:23
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
Class that makes another class non-copyable. Usage: Inherit from NonCopyable.
Definition NonCopyable.h:11
Definition PhysicsSystem.h:30
Definition TempAllocator.h:16