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 
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 //objects:
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 //solver:
00172     PxU32   nbAxisSolverConstraints;
00173 
00177     PxU32   compressedContactSize;
00178 
00182     PxU32   requiredContactConstraintMemory;
00183 
00187     PxU32   peakConstraintMemory;
00188 
00189 //broadphase:
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 //collisions:
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     // We advise to not access these members directly. Use the provided accessor methods instead.
00364     //
00365 //broadphase:
00366     PxU32   nbBroadPhaseAdds[eVOLUME_COUNT];
00367     PxU32   nbBroadPhaseRemoves[eVOLUME_COUNT];
00368 
00369 //collisions:
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 //triangle mesh cache statistics
00376     PxU32   particlesGpuMeshCacheSize;
00377     PxU32   particlesGpuMeshCacheUsed;
00378     PxReal  particlesGpuMeshCacheHitrate;
00379 };
00380 
00381 #if !PX_DOXYGEN
00382 } // namespace physx
00383 #endif
00384 
00386 #endif


Copyright © 2008-2017 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com