21class SoftBodyUpdateContext;
31 explicit PhysicsUpdateContext(TempAllocator &inTempAllocator);
32 ~PhysicsUpdateContext();
34 static constexpr int cMaxConcurrency = 32;
36 using JobHandleArray = StaticArray<JobHandle, cMaxConcurrency>;
42 atomic<uint32> mWriteIdx { 0 };
45 atomic<uint32> mReadIdx { 0 };
49 using BodyPairQueues = StaticArray<BodyPairQueue, cMaxConcurrency>;
52 static_assert(
sizeof(JobMask) * 8 >= cMaxConcurrency);
60 PhysicsUpdateContext *mContext;
65 BroadPhase::UpdateState mBroadPhaseUpdateState;
67 uint32 mNumActiveBodiesAtStepStart;
69 atomic<uint32> mDetermineActiveConstraintReadIdx { 0 };
72 atomic<uint32> mNumActiveConstraints { 0 };
75 atomic<uint32> mSetupVelocityConstraintsReadIdx { 0 };
78 atomic<uint32> mStepListenerReadIdx { 0 };
81 atomic<uint32> mApplyGravityReadIdx { 0 };
84 atomic<uint32> mActiveBodyReadIdx { 0 };
87 BodyPairQueues mBodyPairQueues;
89 uint32 mMaxBodyPairsPerQueue;
91 atomic<JobMask> mActiveFindCollisionJobs;
93 atomic<uint> mNumBodyPairs { 0 };
94 atomic<uint> mNumManifolds { 0 };
96 atomic<uint32> mSolveVelocityConstraintsNextIsland { 0 };
97 atomic<uint32> mSolvePositionConstraintsNextIsland { 0 };
102 CCDBody(BodyID inBodyID1,
Vec3Arg inDeltaPosition,
float inLinearCastThresholdSq,
float inMaxPenetration) : mDeltaPosition(inDeltaPosition), mBodyID1(inBodyID1), mLinearCastThresholdSq(inLinearCastThresholdSq), mMaxPenetration(inMaxPenetration) { }
106 RVec3 mContactPointOn2;
109 SubShapeID mSubShapeID2;
110 float mFraction = 1.0f;
111 float mFractionPlusSlop = 1.0f;
112 float mLinearCastThresholdSq;
113 float mMaxPenetration;
114 ContactSettings mContactSettings;
116 atomic<uint32> mIntegrateVelocityReadIdx { 0 };
117 CCDBody * mCCDBodies =
nullptr;
118 uint32 mCCDBodiesCapacity = 0;
119 atomic<uint32> mNumCCDBodies = 0;
120 atomic<uint32> mNextCCDBody { 0 };
121 int * mActiveBodyToCCDBody =
nullptr;
122 uint32 mNumActiveBodyToCCDBody = 0;
126 JobHandleArray mStepListeners;
127 JobHandleArray mDetermineActiveConstraints;
128 JobHandleArray mApplyGravity;
129 JobHandleArray mFindCollisions;
131 JobHandleArray mSetupVelocityConstraints;
135 JobHandleArray mSolveVelocityConstraints;
137 JobHandleArray mIntegrateVelocity;
140 JobHandleArray mSolvePositionConstraints;
143 JobHandleArray mSoftBodyCollide;
144 JobHandleArray mSoftBodySimulate;
152 int GetMaxConcurrency()
const {
const int max_concurrency = PhysicsUpdateContext::cMaxConcurrency;
return min(max_concurrency, mJobSystem->GetMaxConcurrency()); }
154 PhysicsSystem * mPhysicsSystem;
155 TempAllocator * mTempAllocator;
156 JobSystem * mJobSystem;
157 JobSystem::Barrier * mBarrier;
159 float mStepDeltaTime;
160 float mWarmStartImpulseRatio;
161 atomic<uint32> mErrors { 0 };
165 BodyPair * mBodyPairs =
nullptr;
167 BodyManager * mBodyManager;
168 IslandBuilder * mIslandBuilder;
173 SoftBodyUpdateContext * mSoftBodyUpdateContexts =
nullptr;
174 atomic<uint> mSoftBodyToCollide { 0 };
@ Constraint
Definition Constraint.h:28
std::uint8_t uint8
Definition Core.h:547
#define JPH_CACHE_LINE_SIZE
Definition Core.h:593
unsigned int uint
Definition Core.h:546
#define JPH_NAMESPACE_END
Definition Core.h:469
std::uint32_t uint32
Definition Core.h:549
#define JPH_NAMESPACE_BEGIN
Definition Core.h:463
#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
Definition BodyManager.h:47
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
constexpr float2 min(const float2 &inA, const float2 &inB)
Definition HLSLToCPP.h:66