97 PX_COMPILE_TIME_ASSERT(MaxCount < 0xFF);
98 Elem mCache[MaxCount];
99 PxU8 mNextInd[MaxCount];
100 PxU8 mIndex[MaxCount];
105 for(PxU32 a = 0; a < MaxCount; ++a)
111 bool addData(
const Elem& data)
113 if(mSize == MaxCount)
116 const PxU8 hash = PxU8(data.getHashCode() % MaxCount);
119 PxU8 nextInd = mIndex[hash];
120 while(nextInd != 0xFF)
123 if(mCache[index] == data)
125 nextInd = mNextInd[nextInd];
128 if(mIndex[hash] == 0xFF)
130 mIndex[hash] = PxTo8(mSize);
134 mNextInd[index] = PxTo8(mSize);
136 mNextInd[mSize] = 0xFF;
137 mCache[mSize++] = data;
141 bool contains(
const Elem& data)
const
143 PxU32 hash = (data.getHashCode() % MaxCount);
144 PxU8 index = mIndex[hash];
148 if(mCache[index] == data)
150 index = mNextInd[index];
155 const Elem* get(
const Elem& data)
const
157 PxU32 hash = (data.getHashCode() % MaxCount);
158 PxU8 index = mIndex[hash];
162 if(mCache[index] == data)
163 return &mCache[index];
164 index = mNextInd[index];
173 PxVec3 mVertices[3*MaxTriangles];
174 PxU32 mIndices[3*MaxTriangles];
175 PxU32 mTriangleIndex[MaxTriangles];
176 PxU8 mEdgeFlags[MaxTriangles];
184 PX_FORCE_INLINE bool isFull()
const {
return mNumTriangles == MaxTriangles; }
187 void addTriangle(
const PxVec3* verts,
const PxU32* indices, PxU32 triangleIndex, PxU8 edgeFlag)
189 PX_ASSERT(mNumTriangles < MaxTriangles);
190 PxU32 triInd = mNumTriangles++;
191 PxU32 triIndMul3 = triInd*3;
192 mVertices[triIndMul3] = verts[0];
193 mVertices[triIndMul3+1] = verts[1];
194 mVertices[triIndMul3+2] = verts[2];
195 mIndices[triIndMul3] = indices[0];
196 mIndices[triIndMul3+1] = indices[1];
197 mIndices[triIndMul3+2] = indices[2];
198 mTriangleIndex[triInd] = triangleIndex;
199 mEdgeFlags[triInd] = edgeFlag;
206 PxVec3 mVertices[4 * MaxTetrahedrons];
207 PxU32 mTetVertIndices[4 * MaxTetrahedrons];
208 PxU32 mTetrahedronIndices[MaxTetrahedrons];
209 PxU32 mNumTetrahedrons;
216 PX_FORCE_INLINE bool isFull()
const {
return mNumTetrahedrons == MaxTetrahedrons; }
219 void addTetrahedrons(
const PxVec3* verts,
const PxU32* indices, PxU32 tetIndex)
221 PX_ASSERT(mNumTetrahedrons < MaxTetrahedrons);
222 PxU32 tetInd = mNumTetrahedrons++;
223 PxU32 tetIndMul4 = tetInd * 4;
224 mVertices[tetIndMul4] = verts[0];
225 mVertices[tetIndMul4 + 1] = verts[1];
226 mVertices[tetIndMul4 + 2] = verts[2];
227 mVertices[tetIndMul4 + 3] = verts[3];
228 mTetVertIndices[tetIndMul4] = indices[0];
229 mTetVertIndices[tetIndMul4 + 1] = indices[1];
230 mTetVertIndices[tetIndMul4 + 2] = indices[2];
231 mTetVertIndices[tetIndMul4 + 3] = indices[3];
232 mTetrahedronIndices[tetInd] = tetIndex;
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
PX_CUDA_CALLABLE PX_FORCE_INLINE T PxMax(T a, T b)
The return value is the greater of the two specified values.
Definition PxMath.h:72
PX_CUDA_CALLABLE PX_FORCE_INLINE T PxMin(T a, T b)
The return value is the lesser of the two specified values.
Definition PxMath.h:88