00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef PX_SIMULATION_STATISTICS
00032 #define PX_SIMULATION_STATISTICS
00033
00037 #include "PxPhysXConfig.h"
00038 #include "foundation/PxAssert.h"
00039 #include "geometry/PxGeometry.h"
00040
00041 #if !PX_DOXYGEN
00042 namespace physx
00043 {
00044 #endif
00045
00051 class PxSimulationStatistics
00052 {
00053 public:
00058 enum VolumeType
00059 {
00064 eRIGID_BODY,
00065
00071 ePARTICLE_SYSTEM PX_DEPRECATED,
00072
00077 eCLOTH,
00078
00079 eVOLUME_COUNT
00080 };
00081
00086 enum RbPairStatsType
00087 {
00091 eDISCRETE_CONTACT_PAIRS,
00092
00101 eCCD_PAIRS,
00102
00108 eMODIFIED_CONTACT_PAIRS,
00109
00115 eTRIGGER_PAIRS
00116 };
00117
00118
00119
00123 PxU32 nbActiveConstraints;
00124
00130 PxU32 nbActiveDynamicBodies;
00131
00138 PxU32 nbActiveKinematicBodies;
00139
00143 PxU32 nbStaticBodies;
00144
00150 PxU32 nbDynamicBodies;
00151
00156 PxU32 nbShapes[PxGeometryType::eGEOMETRY_COUNT];
00157
00161 PxU32 nbAggregates;
00162
00166 PxU32 nbArticulations;
00167
00168
00172 PxU32 nbAxisSolverConstraints;
00173
00177 PxU32 compressedContactSize;
00178
00182 PxU32 requiredContactConstraintMemory;
00183
00187 PxU32 peakConstraintMemory;
00188
00189
00198 PxU32 getNbBroadPhaseAdds(VolumeType type) const
00199 {
00200 if (type != eVOLUME_COUNT)
00201 return nbBroadPhaseAdds[type];
00202 else
00203 {
00204 PX_ASSERT(false);
00205 return 0;
00206 }
00207 }
00208
00217 PxU32 getNbBroadPhaseRemoves(VolumeType type) const
00218 {
00219 if (type != eVOLUME_COUNT)
00220 return nbBroadPhaseRemoves[type];
00221 else
00222 {
00223 PX_ASSERT(false);
00224 return 0;
00225 }
00226 }
00227
00228
00242 PxU32 getRbPairStats(RbPairStatsType pairType, PxGeometryType::Enum g0, PxGeometryType::Enum g1) const
00243 {
00244 PX_ASSERT_WITH_MESSAGE( (pairType >= eDISCRETE_CONTACT_PAIRS) &&
00245 (pairType <= eTRIGGER_PAIRS),
00246 "Invalid pairType in PxSimulationStatistics::getRbPairStats");
00247
00248 if (g0 >= PxGeometryType::eGEOMETRY_COUNT || g1 >= PxGeometryType::eGEOMETRY_COUNT)
00249 {
00250 PX_ASSERT(false);
00251 return 0;
00252 }
00253
00254 PxU32 nbPairs = 0;
00255 switch(pairType)
00256 {
00257 case eDISCRETE_CONTACT_PAIRS:
00258 nbPairs = nbDiscreteContactPairs[g0][g1];
00259 break;
00260 case eCCD_PAIRS:
00261 nbPairs = nbCCDPairs[g0][g1];
00262 break;
00263 case eMODIFIED_CONTACT_PAIRS:
00264 nbPairs = nbModifiedContactPairs[g0][g1];
00265 break;
00266 case eTRIGGER_PAIRS:
00267 nbPairs = nbTriggerPairs[g0][g1];
00268 break;
00269 }
00270 return nbPairs;
00271 }
00272
00276 PxU32 nbDiscreteContactPairsTotal;
00277
00282 PxU32 nbDiscreteContactPairsWithCacheHits;
00283
00287 PxU32 nbDiscreteContactPairsWithContacts;
00288
00292 PxU32 nbNewPairs;
00293
00297 PxU32 nbLostPairs;
00298
00302 PxU32 nbNewTouches;
00303
00307 PxU32 nbLostTouches;
00308
00312 PxU32 nbPartitions;
00313
00314 PxSimulationStatistics() :
00315 nbActiveConstraints (0),
00316 nbActiveDynamicBodies (0),
00317 nbActiveKinematicBodies (0),
00318 nbStaticBodies (0),
00319 nbDynamicBodies (0),
00320 nbAggregates (0),
00321 nbArticulations (0),
00322 nbAxisSolverConstraints (0),
00323 compressedContactSize (0),
00324 requiredContactConstraintMemory (0),
00325 peakConstraintMemory (0),
00326 nbDiscreteContactPairsTotal (0),
00327 nbDiscreteContactPairsWithCacheHits (0),
00328 nbDiscreteContactPairsWithContacts (0),
00329 nbNewPairs (0),
00330 nbLostPairs (0),
00331 nbNewTouches (0),
00332 nbLostTouches (0),
00333 nbPartitions (0),
00334 particlesGpuMeshCacheSize (0),
00335 particlesGpuMeshCacheUsed (0),
00336 particlesGpuMeshCacheHitrate (0.0f)
00337 {
00338 for(PxU32 i=0; i < eVOLUME_COUNT; i++)
00339 {
00340 nbBroadPhaseAdds[i] = 0;
00341 nbBroadPhaseRemoves[i] = 0;
00342 }
00343
00344 for(PxU32 i=0; i < PxGeometryType::eGEOMETRY_COUNT; i++)
00345 {
00346 for(PxU32 j=0; j < PxGeometryType::eGEOMETRY_COUNT; j++)
00347 {
00348 nbDiscreteContactPairs[i][j] = 0;
00349 nbModifiedContactPairs[i][j] = 0;
00350 nbCCDPairs[i][j] = 0;
00351 nbTriggerPairs[i][j] = 0;
00352 }
00353 }
00354
00355 for(PxU32 i=0; i < PxGeometryType::eGEOMETRY_COUNT; i++)
00356 {
00357 nbShapes[i] = 0;
00358 }
00359 }
00360
00361
00362
00363
00364
00365
00366 PxU32 nbBroadPhaseAdds[eVOLUME_COUNT];
00367 PxU32 nbBroadPhaseRemoves[eVOLUME_COUNT];
00368
00369
00370 PxU32 nbDiscreteContactPairs[PxGeometryType::eGEOMETRY_COUNT][PxGeometryType::eGEOMETRY_COUNT];
00371 PxU32 nbCCDPairs[PxGeometryType::eGEOMETRY_COUNT][PxGeometryType::eGEOMETRY_COUNT];
00372 PxU32 nbModifiedContactPairs[PxGeometryType::eGEOMETRY_COUNT][PxGeometryType::eGEOMETRY_COUNT];
00373 PxU32 nbTriggerPairs[PxGeometryType::eGEOMETRY_COUNT][PxGeometryType::eGEOMETRY_COUNT];
00374
00375
00376 PxU32 particlesGpuMeshCacheSize;
00377 PxU32 particlesGpuMeshCacheUsed;
00378 PxReal particlesGpuMeshCacheHitrate;
00379 };
00380
00381 #if !PX_DOXYGEN
00382 }
00383 #endif
00384
00386 #endif