NVIDIA(R) PhysX(R) SDK 3.4 API Reference: PxSimulationStatistics.h Source File

NVIDIA PhysX API

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