RavEngine
Loading...
Searching...
No Matches
physx::Bp::BroadPhaseBase Class Reference

Base broad phase class. Functions only relevant to MBP. More...

#include <BpBroadPhase.h>

Inheritance diagram for physx::Bp::BroadPhaseBase:
[legend]
Collaboration diagram for physx::Bp::BroadPhaseBase:
[legend]

Public Member Functions

virtual void getCaps (PxBroadPhaseCaps &caps) const
 Gets broad-phase caps.
 
virtual PxU32 getNbRegions () const PX_OVERRIDE
 Returns number of regions currently registered in the broad-phase.
 
virtual PxU32 getRegions (PxBroadPhaseRegionInfo *, PxU32, PxU32) const PX_OVERRIDE
 Gets broad-phase regions.
 
virtual PxU32 addRegion (const PxBroadPhaseRegion &, bool, const PxBounds3 *, const PxReal *) PX_OVERRIDE
 Adds a new broad-phase region.
 
virtual bool removeRegion (PxU32) PX_OVERRIDE
 Removes a broad-phase region.
 
virtual PxU32 getNbOutOfBoundsObjects () const PX_OVERRIDE
 
virtual const PxU32 * getOutOfBoundsObjects () const PX_OVERRIDE
 
- Public Member Functions inherited from physx::PxUserAllocated
PX_INLINE void * operator new (size_t, void *address)
 
PX_INLINE void operator delete (void *, void *)
 
template<typename Alloc >
PX_INLINE void * operator new (size_t size, Alloc alloc, const char *fileName, int line)
 
template<typename Alloc >
PX_INLINE void * operator new (size_t size, size_t, Alloc alloc, const char *fileName, int line)
 
template<typename Alloc >
PX_INLINE void * operator new[] (size_t size, Alloc alloc, const char *fileName, int line)
 
template<typename Alloc >
PX_INLINE void * operator new[] (size_t size, size_t, Alloc alloc, const char *fileName, int line)
 
template<typename Alloc >
PX_INLINE void operator delete (void *ptr, Alloc alloc, const char *fileName, int line)
 
template<typename Alloc >
PX_INLINE void operator delete[] (void *ptr, Alloc alloc, const char *fileName, int line)
 
PX_INLINE void operator delete (void *ptr)
 
PX_INLINE void operator delete[] (void *ptr)
 

Detailed Description

Base broad phase class. Functions only relevant to MBP.

Member Function Documentation

◆ addRegion()

virtual PxU32 physx::Bp::BroadPhaseBase::addRegion ( const PxBroadPhaseRegion &  region,
bool  populateRegion,
const PxBounds3 *  bounds,
const PxReal *  distances 
)
inlinevirtual

Adds a new broad-phase region.

The total number of regions is limited to PxBroadPhaseCaps::mMaxNbRegions. If that number is exceeded, the call is ignored.

The newly added region will be automatically populated with already existing objects that touch it, if the 'populateRegion' parameter is set to true. Otherwise the newly added region will be empty, and it will only be populated with objects when those objects are added to the simulation, or updated if they already exist.

Using 'populateRegion=true' has a cost, so it is best to avoid it if possible. In particular it is more efficient to create the empty regions first (with populateRegion=false) and then add the objects afterwards (rather than the opposite).

Objects automatically move from one region to another during their lifetime. The system keeps tracks of what regions a given object is in. It is legal for an object to be in an arbitrary number of regions. However if an object leaves all regions, or is created outside of all regions, several things happen:

  • collisions get disabled for this object
  • the object appears in the getOutOfBoundsObjects() array

If an out-of-bounds object, whose collisions are disabled, re-enters a valid broadphase region, then collisions are re-enabled for that object.

Parameters
region[in] User-provided region data
populateRegion[in] True to automatically populate the newly added region with existing objects touching it
bounds[in] User-managed array of bounds
distances[in] User-managed array of distances
Returns
Handle for newly created region, or 0xffffffff in case of failure.
See also
PxBroadPhaseRegion getOutOfBoundsObjects()

Implements physx::PxBroadPhaseRegions.

Reimplemented in physx::Bp::BroadPhaseMBP.

◆ getCaps()

virtual void physx::Bp::BroadPhaseBase::getCaps ( PxBroadPhaseCaps &  caps) const
inlinevirtual

Gets broad-phase caps.

Parameters
caps[out] Broad-phase caps

Reimplemented in physx::Bp::BroadPhaseMBP.

◆ getNbOutOfBoundsObjects()

virtual PxU32 physx::Bp::BroadPhaseBase::getNbOutOfBoundsObjects ( ) const
inlinevirtual

◆ getNbRegions()

virtual PxU32 physx::Bp::BroadPhaseBase::getNbRegions ( ) const
inlinevirtual

Returns number of regions currently registered in the broad-phase.

Returns
Number of regions

Implements physx::PxBroadPhaseRegions.

Reimplemented in physx::Bp::BroadPhaseMBP.

◆ getOutOfBoundsObjects()

virtual const PxU32 * physx::Bp::BroadPhaseBase::getOutOfBoundsObjects ( ) const
inlinevirtual

◆ getRegions()

virtual PxU32 physx::Bp::BroadPhaseBase::getRegions ( PxBroadPhaseRegionInfo *  userBuffer,
PxU32  bufferSize,
PxU32  startIndex 
) const
inlinevirtual

Gets broad-phase regions.

Parameters
userBuffer[out] Returned broad-phase regions
bufferSize[in] Size of provided userBuffer.
startIndex[in] Index of first desired region, in [0 ; getNbRegions()[
Returns
Number of written out regions.
See also
PxBroadPhaseRegionInfo

Implements physx::PxBroadPhaseRegions.

Reimplemented in physx::Bp::BroadPhaseMBP.

◆ removeRegion()

virtual bool physx::Bp::BroadPhaseBase::removeRegion ( PxU32  handle)
inlinevirtual

Removes a broad-phase region.

If the region still contains objects, and if those objects do not overlap any region any more, they are not automatically removed from the simulation. Instead, the PxBroadPhaseCallback::onObjectOutOfBounds notification is used for each object. Users are responsible for removing the objects from the simulation if this is the desired behavior.

If the handle is invalid, or if a valid handle is removed twice, an error message is sent to the error stream.

Parameters
handle[in] Region's handle, as returned by addRegion
Returns
True if success

Implements physx::PxBroadPhaseRegions.

Reimplemented in physx::Bp::BroadPhaseMBP.


The documentation for this class was generated from the following file: