29#ifndef SC_CONSTRAINT_GROUP_NODE_H
30#define SC_CONSTRAINT_GROUP_NODE_H
32#include "ScConstraintProjectionTree.h"
33#include "foundation/PxUtilities.h"
41 class ConstraintProjectionManager;
49 eIN_PROJECTION_PASS_LIST = 1 << 1,
50 ePENDING_TREE_UPDATE = 1 << 2,
52 eNEXT_FREE = 1 << eNEXT_FREE_SHIFT
60 enum ProjectionCountHintFlags
63 e5_TO_16 = eNEXT_FREE << 1,
64 e17_TO_64 = eNEXT_FREE << 2,
65 e65_TO_INF = eNEXT_FREE << 3,
66 eCLEAR_MASK = ~(0xffffffff << eNEXT_FREE_SHIFT)
72 PX_ASSERT(!readFlag(ePENDING_TREE_UPDATE));
73 PX_ASSERT(projectionFirstRoot == NULL);
78 PX_FORCE_INLINE bool readFlag(StateFlags f)
const {
return (flags & f) != 0; }
80 PX_FORCE_INLINE void setProjectionCountHint(PxU32 constraintsToProjectCount);
87 PX_FORCE_INLINE bool hasProjectionTreeRoot() {
return projectionFirstRoot != NULL; }
91 void clearProjectionData();
123PX_FORCE_INLINE PxU32 Sc::ConstraintGroupNode::getProjectionCountHint()
const
127 if (flags & ConstraintGroupNode::e65_TO_INF)
129 else if (flags & ConstraintGroupNode::e17_TO_64)
131 else if (flags & ConstraintGroupNode::e5_TO_16)
133 else if (flags & ConstraintGroupNode::e1_TO_4)
140PX_FORCE_INLINE void Sc::ConstraintGroupNode::setProjectionCountHint(PxU32 constraintsToProjectCount)
142 PxU8 tmpFlags = flags;
143 tmpFlags &= PxU8(ConstraintGroupNode::eCLEAR_MASK);
145 if (constraintsToProjectCount >= 65)
146 tmpFlags |= ConstraintGroupNode::e65_TO_INF;
147 else if (constraintsToProjectCount >= 17)
148 tmpFlags |= ConstraintGroupNode::e17_TO_64;
149 else if (constraintsToProjectCount >= 5)
150 tmpFlags |= ConstraintGroupNode::e5_TO_16;
151 else if (constraintsToProjectCount >= 1)
152 tmpFlags |= ConstraintGroupNode::e1_TO_4;
160 PX_ASSERT(
this == parent);
161 PX_ASSERT(!hasProjectionTreeRoot());
163 ConstraintProjectionTree::buildProjectionTrees(*
this);
169 PX_ASSERT(
this == parent);
170 PX_ASSERT(hasProjectionTreeRoot());
171 ConstraintProjectionTree::purgeProjectionTrees(*
this);
Definition PxUserAllocated.h:43
Definition ScBodySim.h:60
Definition ScConstraintProjectionManager.h:47
Definition ScConstraintSim.h:48
#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 ScConstraintGroupNode.h:45