49 void GetBodiesInIsland(
uint32 inIslandIndex,
BodyID *&outBodiesBegin,
BodyID *&outBodiesEnd)
const;
50 bool GetConstraintsInIsland(
uint32 inIslandIndex,
uint32 *&outConstraintsBegin,
uint32 *&outConstraintsEnd)
const;
51 bool GetContactsInIsland(
uint32 inIslandIndex,
uint32 *&outContactsBegin,
uint32 *&outContactsEnd)
const;
57#ifdef JPH_TRACK_SIMULATION_STATS
60 atomic<uint64> mVelocityConstraintTicks = 0;
61 atomic<uint64> mPositionConstraintTicks = 0;
62 atomic<uint64> mUpdateBoundsTicks = 0;
63 uint8 mNumVelocitySteps = 0;
64 uint8 mNumPositionSteps = 0;
65 bool mIsLargeIsland =
false;
69 IslandStats & GetIslandStats(
uint32 inIslandIndex) {
return mIslandStats[inIslandIndex]; }
73 void ResetIslands(TempAllocator *inTempAllocator);
77 uint32 GetLowestBodyIndex(
uint32 inActiveBodyIndex)
const;
79#ifdef JPH_VALIDATE_ISLAND_BUILDER
81 void ValidateIslands(
uint32 inNumActiveBodies)
const;
85 void BuildBodyIslands(
const BodyID *inActiveBodies,
uint32 inNumActiveBodies, TempAllocator *inTempAllocator);
86 void BuildConstraintIslands(
const uint32 *inConstraintToBody,
uint32 inNumConstraints,
uint32 *&outConstraints,
uint32 *&outConstraintsEnd, TempAllocator *inTempAllocator)
const;
89 void SortIslands(TempAllocator *inTempAllocator);
96 atomic<uint32> mLinkedTo;
101 BodyLink * mBodyLinks =
nullptr;
102 uint32 * mConstraintLinks =
nullptr;
103 uint32 * mContactLinks =
nullptr;
106 BodyID * mBodyIslands =
nullptr;
107 uint32 * mBodyIslandEnds =
nullptr;
109 uint32 * mConstraintIslands =
nullptr;
110 uint32 * mConstraintIslandEnds =
nullptr;
112 uint32 * mContactIslands =
nullptr;
113 uint32 * mContactIslandEnds =
nullptr;
115 uint32 * mIslandsSorted =
nullptr;
117 uint8 * mNumPositionSteps =
nullptr;
119#ifdef JPH_TRACK_SIMULATION_STATS
120 IslandStats * mIslandStats =
nullptr;
125 uint32 mNumActiveBodies = 0;
126 uint32 mNumConstraints = 0;
131#ifdef JPH_VALIDATE_ISLAND_BUILDER
133 struct LinkValidation
139 LinkValidation * mLinkValidation =
nullptr;
140 atomic<uint32> mNumLinkValidation;
std::uint8_t uint8
Definition Core.h:501
#define JPH_EXPORT
Definition Core.h:275
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
#define JPH_OVERRIDE_NEW_DELETE
Macro to override the new and delete functions.
Definition Memory.h:50
ID of a body. This is a way of reasoning about bodies in a multithreaded simulation while avoiding ra...
Definition BodyID.h:13
Keeps track of connected bodies and builds islands for multithreaded velocity/position update.
Definition IslandBuilder.h:19
void Init(uint32 inMaxActiveBodies)
Initialize the island builder with the maximum amount of bodies that could be active.
Definition IslandBuilder.cpp:32
uint GetNumPositionSteps(uint32 inIslandIndex) const
Definition IslandBuilder.h:55
void LinkConstraint(uint32 inConstraintIndex, uint32 inFirst, uint32 inSecond)
Link a constraint to a body by their index in the BodyManager::mActiveBodies.
Definition IslandBuilder.cpp:157
void LinkContact(uint32 inContactIndex, uint32 inFirst, uint32 inSecond)
Link a contact to a body by their index in the BodyManager::mActiveBodies.
Definition IslandBuilder.cpp:167
void SetNumPositionSteps(uint32 inIslandIndex, uint inNumPositionSteps)
The number of position iterations for each island.
Definition IslandBuilder.h:54
uint32 GetNumIslands() const
Get the amount of islands formed.
Definition IslandBuilder.h:46
void PrepareContactConstraints(uint32 inMaxContactConstraints, TempAllocator *inTempAllocator)
Prepare for simulation step by allocating space for the contact constraints.
Definition IslandBuilder.cpp:43
void PrepareNonContactConstraints(uint32 inNumConstraints, TempAllocator *inTempAllocator)
Prepare for simulation step by allocating space for the non-contact constraints.
Definition IslandBuilder.cpp:67
void LinkBodies(uint32 inFirst, uint32 inSecond)
Link two bodies by their index in the BodyManager::mActiveBodies list to form islands.
Definition IslandBuilder.cpp:98
void Finalize(const BodyID *inActiveBodies, uint32 inNumActiveBodies, uint32 inNumContacts, TempAllocator *inTempAllocator)
Finalize the islands after all bodies have been Link()-ed.
Definition IslandBuilder.cpp:373
Definition TempAllocator.h:16