PxPhysics.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_PHYSICS_NX_PHYSICS
00032 #define PX_PHYSICS_NX_PHYSICS
00033 
00034 
00039 #include "PxPhysXConfig.h"
00040 #include "PxDeletionListener.h"
00041 #include "foundation/PxTransform.h"
00042 #include "PxShape.h"
00043 
00044 
00045 #if PX_USE_CLOTH_API
00046 #include "cloth/PxClothTypes.h"
00047 #include "cloth/PxClothFabric.h"
00048 #endif
00049 
00050 
00051 #if !PX_DOXYGEN
00052 namespace physx
00053 {
00054 #endif
00055 
00056 class PxPvd;
00057 class PxPhysicsInsertionCallback;
00058 
00059 class PxRigidActor;
00060 class PxConstraintConnector;
00061 struct PxConstraintShaderTable;
00062 
00063 class PxGeometry;
00064 class PxFoundation;
00065 class PxSerializationRegistry;
00066 
00067 class PxPruningStructure;
00068 
00079 class PxPhysics
00080 {
00081 public:
00082 
00086     
00087     
00088 
00089     virtual ~PxPhysics() {}
00090     
00091     
00110     virtual void release() = 0;
00111 
00116     virtual PxFoundation&       getFoundation() = 0;
00117         
00127     virtual PxAggregate*        createAggregate(PxU32 maxSize, bool enableSelfCollision)    = 0;
00128 
00133     virtual const PxTolerancesScale&        getTolerancesScale() const = 0;
00134 
00135     
00137 
00140 
00151     virtual PxTriangleMesh*    createTriangleMesh(PxInputStream& stream) = 0;
00152     
00153 
00154 
00162     virtual PxU32               getNbTriangleMeshes() const = 0;
00163 
00178     virtual PxU32               getTriangleMeshes(PxTriangleMesh** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
00179 
00190     virtual PxHeightField*      createHeightField(PxInputStream& stream) = 0;
00191 
00199     virtual PxU32               getNbHeightFields() const = 0;
00200 
00215     virtual PxU32               getHeightFields(PxHeightField** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
00216 
00227     virtual PxConvexMesh*       createConvexMesh(PxInputStream &stream)                 = 0;
00228 
00236     virtual PxU32               getNbConvexMeshes() const = 0;
00237 
00252     virtual PxU32               getConvexMeshes(PxConvexMesh** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
00253 
00254 
00255 #if PX_USE_CLOTH_API
00256 
00266     virtual PxClothFabric*      createClothFabric(PxInputStream& stream) = 0;
00267 
00280     virtual PxClothFabric*      createClothFabric(const PxClothFabricDesc& desc) = 0;
00281 
00289     virtual PxU32               getNbClothFabrics() const = 0;
00290 
00304     virtual PxU32               getClothFabrics(PxClothFabric** userBuffer, PxU32 bufferSize) const = 0;
00305 #endif
00306 
00308 
00311 
00323     virtual PxScene*            createScene(const PxSceneDesc& sceneDesc) = 0;
00324 
00332     virtual PxU32               getNbScenes()           const   = 0;
00333 
00348     virtual PxU32               getScenes(PxScene** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
00349     
00351 
00354 
00364     virtual PxRigidStatic*      createRigidStatic(const PxTransform& pose) = 0;
00365 
00366 
00367 
00377     virtual PxRigidDynamic*      createRigidDynamic(const PxTransform& pose) = 0;
00378 
00379 
00380 #if PX_USE_PARTICLE_SYSTEM_API
00381 
00392     PX_DEPRECATED virtual PxParticleSystem* createParticleSystem(PxU32 maxParticles, bool perParticleRestOffset = false) = 0;
00393 
00405     PX_DEPRECATED virtual PxParticleFluid*  createParticleFluid(PxU32 maxParticles, bool perParticleRestOffset = false) = 0;
00406 #endif
00407 
00408 
00409 #if PX_USE_CLOTH_API
00410 
00421     virtual PxCloth*            createCloth(const PxTransform& globalPose, PxClothFabric& fabric, const PxClothParticle* particles, PxClothFlags flags) = 0;
00422 #endif
00423 
00437     virtual PxPruningStructure* createPruningStructure(PxRigidActor*const* actors, PxU32 nbActors)  = 0;
00438     
00440 
00443     
00444 
00460     PX_FORCE_INLINE PxShape*    createShape(    const PxGeometry& geometry, 
00461                                                 const PxMaterial& material, 
00462                                                 bool isExclusive = false, 
00463                                                 PxShapeFlags shapeFlags = PxShapeFlag::eVISUALIZATION | PxShapeFlag::eSCENE_QUERY_SHAPE | PxShapeFlag::eSIMULATION_SHAPE)
00464     {
00465         PxMaterial* materialPtr = const_cast<PxMaterial*>(&material);
00466         return createShape(geometry, &materialPtr, 1, isExclusive, shapeFlags);
00467     }
00468 
00469 
00486     virtual PxShape*            createShape(const PxGeometry& geometry, 
00487                                             PxMaterial*const * materials, 
00488                                             PxU16 materialCount, 
00489                                             bool isExclusive = false,
00490                                             PxShapeFlags shapeFlags = PxShapeFlag::eVISUALIZATION | PxShapeFlag::eSCENE_QUERY_SHAPE | PxShapeFlag::eSIMULATION_SHAPE) = 0;
00491 
00492 
00500     virtual PxU32               getNbShapes() const = 0;
00501 
00516     virtual PxU32               getShapes(PxShape** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
00517 
00519 
00522 
00523 
00540     virtual PxConstraint*      createConstraint(PxRigidActor* actor0, PxRigidActor* actor1, PxConstraintConnector& connector, const PxConstraintShaderTable& shaders, PxU32 dataSize)       = 0;
00541 
00542 
00550     virtual PxArticulation*      createArticulation() = 0;
00551 
00553 
00556 
00557 
00569     virtual PxMaterial*        createMaterial(PxReal staticFriction, PxReal dynamicFriction, PxReal restitution)        = 0;
00570 
00571 
00579     virtual PxU32               getNbMaterials() const = 0;
00580 
00595     virtual PxU32               getMaterials(PxMaterial** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
00596 
00598 
00601 
00617     virtual void registerDeletionListener(PxDeletionListener& observer, const PxDeletionEventFlags& deletionEvents, bool restrictedObjectSet = false) = 0;
00618 
00628     virtual void unregisterDeletionListener(PxDeletionListener& observer) = 0;
00629 
00645     virtual void registerDeletionListenerObjects(PxDeletionListener& observer, const PxBase* const* observables, PxU32 observableCount) = 0;
00646 
00662     virtual void unregisterDeletionListenerObjects(PxDeletionListener& observer, const PxBase* const* observables, PxU32 observableCount) = 0;
00663 
00672     virtual PxPhysicsInsertionCallback& getPhysicsInsertionCallback() = 0;
00673 
00675 };
00676 
00677 #if !PX_DOXYGEN
00678 } // namespace physx
00679 #endif
00680 
00688 PX_C_EXPORT PX_PHYSX_CORE_API void PX_CALL_CONV PxRegisterArticulations(physx::PxPhysics& physics);
00689 
00707 PX_C_EXPORT PX_PHYSX_CORE_API void PX_CALL_CONV PxRegisterHeightFields(physx::PxPhysics& physics);
00708 
00721 PX_DEPRECATED PX_C_EXPORT PX_PHYSX_CORE_API void PX_CALL_CONV PxRegisterLegacyHeightFields(physx::PxPhysics& physics);
00722 
00730 PX_DEPRECATED PX_INLINE void PX_CALL_CONV PxRegisterUnifiedHeightFields(physx::PxPhysics& physics)
00731 {
00732     PxRegisterHeightFields(physics);
00733 }
00734 
00735 
00743 PX_C_EXPORT PX_PHYSX_CORE_API void PX_CALL_CONV PxRegisterCloth(physx::PxPhysics& physics);
00744 
00754 PX_DEPRECATED PX_C_EXPORT PX_PHYSX_CORE_API void PX_CALL_CONV PxRegisterParticles(physx::PxPhysics& physics);
00755 
00777 PX_C_EXPORT PX_PHYSX_CORE_API physx::PxPhysics* PX_CALL_CONV PxCreateBasePhysics(physx::PxU32 version,
00778                                                                                  physx::PxFoundation& foundation,
00779                                                                                  const physx::PxTolerancesScale& scale,                                                                              
00780                                                                                  bool trackOutstandingAllocations = false,
00781                                                                                  physx::PxPvd* pvd = NULL);
00782 
00810 PX_INLINE physx::PxPhysics* PxCreatePhysics(physx::PxU32 version,
00811                                             physx::PxFoundation& foundation,
00812                                             const physx::PxTolerancesScale& scale,                                          
00813                                             bool trackOutstandingAllocations = false,
00814                                             physx::PxPvd* pvd = NULL )
00815 {
00816     physx::PxPhysics* physics = PxCreateBasePhysics(version, foundation, scale, trackOutstandingAllocations, pvd);
00817     if(!physics)
00818         return NULL;
00819 
00820     PxRegisterArticulations(*physics);
00821     PxRegisterHeightFields(*physics);
00822     PxRegisterCloth(*physics);
00823     PxRegisterParticles(*physics);
00824 
00825     return physics;
00826 }
00827 
00835 PX_C_EXPORT PX_PHYSX_CORE_API physx::PxPhysics& PX_CALL_CONV PxGetPhysics();
00836 
00838 #endif


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