PxSimulationStatistics.h
Go to the documentation of this file.00001 // This code contains NVIDIA Confidential Information and is disclosed to you 00002 // under a form of NVIDIA software license agreement provided separately to you. 00003 // 00004 // Notice 00005 // NVIDIA Corporation and its licensors retain all intellectual property and 00006 // proprietary rights in and to this software and related documentation and 00007 // any modifications thereto. Any use, reproduction, disclosure, or 00008 // distribution of this software and related documentation without an express 00009 // license agreement from NVIDIA Corporation is strictly prohibited. 00010 // 00011 // ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES 00012 // NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO 00013 // THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, 00014 // MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. 00015 // 00016 // Information and code furnished is believed to be accurate and reliable. 00017 // However, NVIDIA Corporation assumes no responsibility for the consequences of use of such 00018 // information or for any infringement of patents or other rights of third parties that may 00019 // result from its use. No license is granted by implication or otherwise under any patent 00020 // or patent rights of NVIDIA Corporation. Details are subject to change without notice. 00021 // This code supersedes and replaces all information previously supplied. 00022 // NVIDIA Corporation products are not authorized for use as critical 00023 // components in life support devices or systems without express written approval of 00024 // NVIDIA Corporation. 00025 // 00026 // Copyright (c) 2008-2017 NVIDIA Corporation. All rights reserved. 00027 // Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved. 00028 // Copyright (c) 2001-2004 NovodeX AG. All rights reserved. 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 //objects: 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 //solver: 00177 PxU32 nbAxisSolverConstraints; 00178 00182 PxU32 compressedContactSize; 00183 00187 PxU32 requiredContactConstraintMemory; 00188 00192 PxU32 peakConstraintMemory; 00193 00194 //broadphase: 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 //collisions: 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 // We advise to not access these members directly. Use the provided accessor methods instead. 00369 // 00370 //broadphase: 00371 PxU32 nbBroadPhaseAdds[eVOLUME_COUNT]; 00372 PxU32 nbBroadPhaseRemoves[eVOLUME_COUNT]; 00373 00374 //collisions: 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 //triangle mesh cache statistics 00381 PxU32 particlesGpuMeshCacheSize; 00382 PxU32 particlesGpuMeshCacheUsed; 00383 PxReal particlesGpuMeshCacheHitrate; 00384 }; 00385 00386 #if !PX_DOXYGEN 00387 } // namespace physx 00388 #endif 00389 00391 #endif
Copyright © 2008-2017 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com