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
00066 #if PX_USE_PARTICLE_SYSTEM_API
00067
00072 ePARTICLE_SYSTEM PX_DEPRECATED,
00073 #endif
00074
00075 #if PX_USE_CLOTH_API
00076
00081 eCLOTH PX_DEPRECATED,
00082 #endif
00083
00084 eVOLUME_COUNT
00085 };
00086
00091 enum RbPairStatsType
00092 {
00096 eDISCRETE_CONTACT_PAIRS,
00097
00106 eCCD_PAIRS,
00107
00113 eMODIFIED_CONTACT_PAIRS,
00114
00120 eTRIGGER_PAIRS
00121 };
00122
00123
00124
00128 PxU32 nbActiveConstraints;
00129
00135 PxU32 nbActiveDynamicBodies;
00136
00143 PxU32 nbActiveKinematicBodies;
00144
00148 PxU32 nbStaticBodies;
00149
00155 PxU32 nbDynamicBodies;
00156
00161 PxU32 nbShapes[PxGeometryType::eGEOMETRY_COUNT];
00162
00166 PxU32 nbAggregates;
00167
00171 PxU32 nbArticulations;
00172
00173
00177 PxU32 nbAxisSolverConstraints;
00178
00182 PxU32 compressedContactSize;
00183
00187 PxU32 requiredContactConstraintMemory;
00188
00192 PxU32 peakConstraintMemory;
00193
00194
00203 PxU32 getNbBroadPhaseAdds(VolumeType type) const
00204 {
00205 if (type != eVOLUME_COUNT)
00206 return nbBroadPhaseAdds[type];
00207 else
00208 {
00209 PX_ASSERT(false);
00210 return 0;
00211 }
00212 }
00213
00222 PxU32 getNbBroadPhaseRemoves(VolumeType type) const
00223 {
00224 if (type != eVOLUME_COUNT)
00225 return nbBroadPhaseRemoves[type];
00226 else
00227 {
00228 PX_ASSERT(false);
00229 return 0;
00230 }
00231 }
00232
00233
00247 PxU32 getRbPairStats(RbPairStatsType pairType, PxGeometryType::Enum g0, PxGeometryType::Enum g1) const
00248 {
00249 PX_ASSERT_WITH_MESSAGE( (pairType >= eDISCRETE_CONTACT_PAIRS) &&
00250 (pairType <= eTRIGGER_PAIRS),
00251 "Invalid pairType in PxSimulationStatistics::getRbPairStats");
00252
00253 if (g0 >= PxGeometryType::eGEOMETRY_COUNT || g1 >= PxGeometryType::eGEOMETRY_COUNT)
00254 {
00255 PX_ASSERT(false);
00256 return 0;
00257 }
00258
00259 PxU32 nbPairs = 0;
00260 switch(pairType)
00261 {
00262 case eDISCRETE_CONTACT_PAIRS:
00263 nbPairs = nbDiscreteContactPairs[g0][g1];
00264 break;
00265 case eCCD_PAIRS:
00266 nbPairs = nbCCDPairs[g0][g1];
00267 break;
00268 case eMODIFIED_CONTACT_PAIRS:
00269 nbPairs = nbModifiedContactPairs[g0][g1];
00270 break;
00271 case eTRIGGER_PAIRS:
00272 nbPairs = nbTriggerPairs[g0][g1];
00273 break;
00274 }
00275 return nbPairs;
00276 }
00277
00281 PxU32 nbDiscreteContactPairsTotal;
00282
00287 PxU32 nbDiscreteContactPairsWithCacheHits;
00288
00292 PxU32 nbDiscreteContactPairsWithContacts;
00293
00297 PxU32 nbNewPairs;
00298
00302 PxU32 nbLostPairs;
00303
00307 PxU32 nbNewTouches;
00308
00312 PxU32 nbLostTouches;
00313
00317 PxU32 nbPartitions;
00318
00319 PxSimulationStatistics() :
00320 nbActiveConstraints (0),
00321 nbActiveDynamicBodies (0),
00322 nbActiveKinematicBodies (0),
00323 nbStaticBodies (0),
00324 nbDynamicBodies (0),
00325 nbAggregates (0),
00326 nbArticulations (0),
00327 nbAxisSolverConstraints (0),
00328 compressedContactSize (0),
00329 requiredContactConstraintMemory (0),
00330 peakConstraintMemory (0),
00331 nbDiscreteContactPairsTotal (0),
00332 nbDiscreteContactPairsWithCacheHits (0),
00333 nbDiscreteContactPairsWithContacts (0),
00334 nbNewPairs (0),
00335 nbLostPairs (0),
00336 nbNewTouches (0),
00337 nbLostTouches (0),
00338 nbPartitions (0),
00339 particlesGpuMeshCacheSize (0),
00340 particlesGpuMeshCacheUsed (0),
00341 particlesGpuMeshCacheHitrate (0.0f)
00342 {
00343 for(PxU32 i=0; i < eVOLUME_COUNT; i++)
00344 {
00345 nbBroadPhaseAdds[i] = 0;
00346 nbBroadPhaseRemoves[i] = 0;
00347 }
00348
00349 for(PxU32 i=0; i < PxGeometryType::eGEOMETRY_COUNT; i++)
00350 {
00351 for(PxU32 j=0; j < PxGeometryType::eGEOMETRY_COUNT; j++)
00352 {
00353 nbDiscreteContactPairs[i][j] = 0;
00354 nbModifiedContactPairs[i][j] = 0;
00355 nbCCDPairs[i][j] = 0;
00356 nbTriggerPairs[i][j] = 0;
00357 }
00358 }
00359
00360 for(PxU32 i=0; i < PxGeometryType::eGEOMETRY_COUNT; i++)
00361 {
00362 nbShapes[i] = 0;
00363 }
00364 }
00365
00366
00367
00368
00369
00370
00371 PxU32 nbBroadPhaseAdds[eVOLUME_COUNT];
00372 PxU32 nbBroadPhaseRemoves[eVOLUME_COUNT];
00373
00374
00375 PxU32 nbDiscreteContactPairs[PxGeometryType::eGEOMETRY_COUNT][PxGeometryType::eGEOMETRY_COUNT];
00376 PxU32 nbCCDPairs[PxGeometryType::eGEOMETRY_COUNT][PxGeometryType::eGEOMETRY_COUNT];
00377 PxU32 nbModifiedContactPairs[PxGeometryType::eGEOMETRY_COUNT][PxGeometryType::eGEOMETRY_COUNT];
00378 PxU32 nbTriggerPairs[PxGeometryType::eGEOMETRY_COUNT][PxGeometryType::eGEOMETRY_COUNT];
00379
00380
00381 PxU32 particlesGpuMeshCacheSize;
00382 PxU32 particlesGpuMeshCacheUsed;
00383 PxReal particlesGpuMeshCacheHitrate;
00384 };
00385
00386 #if !PX_DOXYGEN
00387 }
00388 #endif
00389
00391 #endif