feat(physics): wire physx sdk into build
This commit is contained in:
46
engine/third_party/physx/source/scenequery/include/SqFactory.h
vendored
Normal file
46
engine/third_party/physx/source/scenequery/include/SqFactory.h
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above copyright
|
||||
// notice, this list of conditions and the following disclaimer in the
|
||||
// documentation and/or other materials provided with the distribution.
|
||||
// * Neither the name of NVIDIA CORPORATION nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// Copyright (c) 2008-2025 NVIDIA Corporation. All rights reserved.
|
||||
// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
|
||||
// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
|
||||
|
||||
#ifndef SQ_FACTORY_H
|
||||
#define SQ_FACTORY_H
|
||||
|
||||
#include "foundation/PxSimpleTypes.h"
|
||||
#include "GuFactory.h"
|
||||
#include "SqTypedef.h"
|
||||
|
||||
namespace physx
|
||||
{
|
||||
namespace Sq
|
||||
{
|
||||
class CompoundPruner;
|
||||
|
||||
CompoundPruner* createCompoundPruner(PxU64 contextID);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
197
engine/third_party/physx/source/scenequery/include/SqManager.h
vendored
Normal file
197
engine/third_party/physx/source/scenequery/include/SqManager.h
vendored
Normal file
@@ -0,0 +1,197 @@
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above copyright
|
||||
// notice, this list of conditions and the following disclaimer in the
|
||||
// documentation and/or other materials provided with the distribution.
|
||||
// * Neither the name of NVIDIA CORPORATION nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// Copyright (c) 2008-2025 NVIDIA Corporation. All rights reserved.
|
||||
// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
|
||||
// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
|
||||
|
||||
#ifndef SQ_MANAGER_H
|
||||
#define SQ_MANAGER_H
|
||||
|
||||
// PT: SQ-API LEVEL 2 (Level 1 = SqPruner.h)
|
||||
// PT: this file is part of a "high-level" set of files within Sq. The SqPruner API doesn't rely on them.
|
||||
// PT: this should really be at Np level but moving it to Sq allows us to share it.
|
||||
|
||||
#include "common/PxPhysXCommonConfig.h"
|
||||
|
||||
#include "foundation/PxBitMap.h"
|
||||
#include "foundation/PxArray.h"
|
||||
#include "SqPruner.h"
|
||||
#include "geometry/PxGeometryHelpers.h"
|
||||
|
||||
namespace physx
|
||||
{
|
||||
namespace Sq
|
||||
{
|
||||
// PrunerManager-level adapter
|
||||
class Adapter
|
||||
{
|
||||
public:
|
||||
Adapter() {}
|
||||
virtual ~Adapter() {}
|
||||
|
||||
// Retrieves the PxGeometry associated with a given PrunerPayload. This will be called by
|
||||
// the PrunerManager class when computing bounds.
|
||||
virtual const PxGeometry& getGeometry(const Gu::PrunerPayload& payload) const = 0;
|
||||
};
|
||||
|
||||
// PT: extended pruner structure. We might want to move the additional data to the pruner itself later.
|
||||
struct PrunerExt : public PxUserAllocated
|
||||
{
|
||||
// private:
|
||||
PrunerExt();
|
||||
~PrunerExt();
|
||||
|
||||
void init(Gu::Pruner* pruner);
|
||||
void flushMemory();
|
||||
void preallocate(PxU32 nbShapes);
|
||||
|
||||
void addToDirtyList(Gu::PrunerHandle handle, bool dynamic, const PxTransform& transform);
|
||||
void removeFromDirtyList(Gu::PrunerHandle handle);
|
||||
bool processDirtyList(PxU32 index, const Adapter& adapter, float inflation);
|
||||
// void growDirtyList(Gu::PrunerHandle handle);
|
||||
|
||||
PX_FORCE_INLINE Gu::Pruner* pruner() { return mPruner; }
|
||||
PX_FORCE_INLINE const Gu::Pruner* pruner() const { return mPruner; }
|
||||
|
||||
Gu::Pruner* mPruner;
|
||||
PxBitMap mDirtyMap;
|
||||
PxArray<Gu::PrunerHandle> mDirtyList;
|
||||
bool mDirtyStatic; // true if dirty list contains a static
|
||||
|
||||
PX_NOCOPY(PrunerExt)
|
||||
|
||||
friend class PrunerManager;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#include "foundation/PxHashSet.h"
|
||||
namespace physx
|
||||
{
|
||||
namespace Sq
|
||||
{
|
||||
class CompoundPruner;
|
||||
typedef PxPair<PrunerCompoundId, Gu::PrunerHandle> CompoundPair;
|
||||
typedef PxCoalescedHashSet<CompoundPair > CompoundPrunerSet;
|
||||
// AB: extended compound pruner structure, buffers compound shape changes and flushes them.
|
||||
struct CompoundPrunerExt : public PxUserAllocated
|
||||
{
|
||||
// private:
|
||||
CompoundPrunerExt();
|
||||
~CompoundPrunerExt();
|
||||
|
||||
void flushMemory();
|
||||
void preallocate(PxU32 nbShapes);
|
||||
void flushShapes(const Adapter& adapter, float inflation);
|
||||
void addToDirtyList(PrunerCompoundId compoundId, Gu::PrunerHandle handle, const PxTransform& transform);
|
||||
void removeFromDirtyList(PrunerCompoundId compoundId, Gu::PrunerHandle handle);
|
||||
|
||||
PX_FORCE_INLINE const CompoundPruner* pruner() const { return mPruner; }
|
||||
PX_FORCE_INLINE CompoundPruner* pruner() { return mPruner; }
|
||||
|
||||
CompoundPruner* mPruner;
|
||||
CompoundPrunerSet mDirtyList;
|
||||
|
||||
PX_NOCOPY(CompoundPrunerExt)
|
||||
|
||||
friend class PrunerManager;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#include "foundation/PxMutex.h"
|
||||
#include "SqPrunerData.h"
|
||||
|
||||
namespace physx
|
||||
{
|
||||
class PxRenderOutput;
|
||||
class PxBVH;
|
||||
class PxSceneLimits; // PT: TODO: decouple from PxSceneLimits
|
||||
|
||||
namespace Sq
|
||||
{
|
||||
class PrunerManager : public PxUserAllocated
|
||||
{
|
||||
public:
|
||||
PrunerManager(PxU64 contextID, Gu::Pruner* staticPruner, Gu::Pruner* dynamicPruner,
|
||||
PxU32 dynamicTreeRebuildRateHint, float inflation,
|
||||
const PxSceneLimits& limits, const Adapter& adapter);
|
||||
~PrunerManager();
|
||||
|
||||
PrunerData addPrunerShape(const Gu::PrunerPayload& payload, bool dynamic, PrunerCompoundId compoundId, const PxBounds3& bounds, const PxTransform& transform, bool hasPruningStructure=false);
|
||||
void addCompoundShape(const PxBVH& bvh, PrunerCompoundId compoundId, const PxTransform& compoundTransform, PrunerData* prunerData, const Gu::PrunerPayload* payloads, const PxTransform* transforms, bool isDynamic);
|
||||
void markForUpdate(PrunerCompoundId compoundId, PrunerData s, const PxTransform& transform);
|
||||
void removePrunerShape(PrunerCompoundId compoundId, PrunerData shapeData, Gu::PrunerPayloadRemovalCallback* removalCallback);
|
||||
|
||||
PX_FORCE_INLINE const Gu::Pruner* getPruner(PruningIndex::Enum index) const { return mPrunerExt[index].mPruner; }
|
||||
PX_FORCE_INLINE Gu::Pruner* getPruner(PruningIndex::Enum index) { return mPrunerExt[index].mPruner; }
|
||||
PX_FORCE_INLINE const CompoundPruner* getCompoundPruner() const { return mCompoundPrunerExt.mPruner; }
|
||||
PX_FORCE_INLINE PxU64 getContextId() const { return mContextID; }
|
||||
|
||||
void preallocate(PxU32 prunerIndex, PxU32 nbShapes);
|
||||
|
||||
void setDynamicTreeRebuildRateHint(PxU32 dynTreeRebuildRateHint);
|
||||
PX_FORCE_INLINE PxU32 getDynamicTreeRebuildRateHint() const { return mRebuildRateHint; }
|
||||
|
||||
void flushUpdates();
|
||||
void forceRebuildDynamicTree(PxU32 prunerIndex);
|
||||
|
||||
void updateCompoundActor(PrunerCompoundId compoundId, const PxTransform& compoundTransform);
|
||||
void removeCompoundActor(PrunerCompoundId compoundId, Gu::PrunerPayloadRemovalCallback* removalCallback);
|
||||
|
||||
void* prepareSceneQueriesUpdate(PruningIndex::Enum index);
|
||||
void sceneQueryBuildStep(void* handle);
|
||||
|
||||
void sync(const Gu::PrunerHandle* handles, const PxU32* boundsIndices, const PxBounds3* bounds, const PxTransform32* transforms, PxU32 count, const PxBitMap& ignoredIndices);
|
||||
void afterSync(bool buildStep, bool commit);
|
||||
void shiftOrigin(const PxVec3& shift);
|
||||
void visualize(PxU32 prunerIndex, PxRenderOutput& out) const;
|
||||
|
||||
void flushMemory();
|
||||
PX_FORCE_INLINE PxU32 getStaticTimestamp() const { return mStaticTimestamp; }
|
||||
PX_FORCE_INLINE const Adapter& getAdapter() const { return mAdapter; }
|
||||
private:
|
||||
const Adapter& mAdapter;
|
||||
PrunerExt mPrunerExt[PruningIndex::eCOUNT];
|
||||
CompoundPrunerExt mCompoundPrunerExt;
|
||||
|
||||
const PxU64 mContextID;
|
||||
PxU32 mStaticTimestamp;
|
||||
PxU32 mRebuildRateHint;
|
||||
const float mInflation; // SQ_PRUNER_EPSILON
|
||||
|
||||
PxMutex mSQLock; // to make sure only one query updates the dirty pruner structure if multiple queries run in parallel
|
||||
|
||||
volatile bool mPrunerNeedsUpdating;
|
||||
|
||||
void flushShapes();
|
||||
PX_FORCE_INLINE void invalidateStaticTimestamp() { mStaticTimestamp++; }
|
||||
|
||||
PX_NOCOPY(PrunerManager)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
188
engine/third_party/physx/source/scenequery/include/SqPruner.h
vendored
Normal file
188
engine/third_party/physx/source/scenequery/include/SqPruner.h
vendored
Normal file
@@ -0,0 +1,188 @@
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above copyright
|
||||
// notice, this list of conditions and the following disclaimer in the
|
||||
// documentation and/or other materials provided with the distribution.
|
||||
// * Neither the name of NVIDIA CORPORATION nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// Copyright (c) 2008-2025 NVIDIA Corporation. All rights reserved.
|
||||
// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
|
||||
// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
|
||||
|
||||
#ifndef SQ_PRUNER_H
|
||||
#define SQ_PRUNER_H
|
||||
|
||||
#include "foundation/PxBounds3.h"
|
||||
#include "foundation/PxUserAllocated.h"
|
||||
#include "foundation/PxFlags.h"
|
||||
#include "GuPruner.h"
|
||||
#include "SqTypedef.h"
|
||||
|
||||
namespace physx
|
||||
{
|
||||
namespace Gu
|
||||
{
|
||||
class BVH;
|
||||
}
|
||||
namespace Sq
|
||||
{
|
||||
|
||||
/**
|
||||
\brief Compound-pruner-specific flags for scene queries.
|
||||
*/
|
||||
struct PxCompoundPrunerQueryFlag
|
||||
{
|
||||
enum Enum
|
||||
{
|
||||
eSTATIC = (1<<0), //!< Traverse static compounds
|
||||
eDYNAMIC = (1<<1), //!< Traverse dynamic compounds
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
\brief Flags typedef for the set of bits defined in PxCompoundPrunerQueryFlag.
|
||||
*/
|
||||
typedef PxFlags<PxCompoundPrunerQueryFlag::Enum,PxU32> PxCompoundPrunerQueryFlags;
|
||||
PX_FLAGS_OPERATORS(PxCompoundPrunerQueryFlag::Enum,PxU32)
|
||||
|
||||
struct CompoundPrunerRaycastCallback
|
||||
{
|
||||
CompoundPrunerRaycastCallback() {}
|
||||
virtual ~CompoundPrunerRaycastCallback() {}
|
||||
|
||||
virtual bool invoke(PxReal& distance, PxU32 primIndex, const Gu::PrunerPayload* payloads, const PxTransform* transforms, const PxTransform* compoundPose) = 0;
|
||||
};
|
||||
|
||||
struct CompoundPrunerOverlapCallback
|
||||
{
|
||||
CompoundPrunerOverlapCallback() {}
|
||||
virtual ~CompoundPrunerOverlapCallback() {}
|
||||
|
||||
virtual bool invoke(PxU32 primIndex, const Gu::PrunerPayload* payloads, const PxTransform* transforms, const PxTransform* compoundPose) = 0;
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/**
|
||||
* Pruner holding compound objects
|
||||
*/
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
class CompoundPruner : public Gu::BasePruner
|
||||
{
|
||||
public:
|
||||
virtual ~CompoundPruner() {}
|
||||
|
||||
/**
|
||||
\brief Adds compound to the pruner.
|
||||
\param results [out] an array for resulting handles
|
||||
\param bvh [in] BVH
|
||||
\param compoundId [in] compound id
|
||||
\param transform [in] compound transform
|
||||
\param data [in] an array of object data
|
||||
|
||||
\return true if success, false if internal allocation failed. The first failing add results in a INVALID_PRUNERHANDLE.
|
||||
|
||||
Handles are usable as indices. Each handle is either be a recycled handle returned by the client via removeObjects(),
|
||||
or a fresh handle that is either zero, or one greater than the last fresh handle returned.
|
||||
*/
|
||||
virtual bool addCompound(Gu::PrunerHandle* results, const Gu::BVH& bvh, PrunerCompoundId compoundId, const PxTransform& transform, bool isDynamic, const Gu::PrunerPayload* data, const PxTransform* transforms) = 0;
|
||||
|
||||
/**
|
||||
Removes compound from the pruner.
|
||||
\param compoundId [in] compound to remove
|
||||
*/
|
||||
virtual bool removeCompound(PrunerCompoundId compoundId, Gu::PrunerPayloadRemovalCallback* removalCallback) = 0;
|
||||
|
||||
/**
|
||||
Updates compound object
|
||||
\param compoundId [in] compound to update
|
||||
\param transform [in] compound transformation
|
||||
*/
|
||||
virtual bool updateCompound(PrunerCompoundId compoundId, const PxTransform& transform) = 0;
|
||||
|
||||
/**
|
||||
Updates object after manually updating their bounds via "getPayload" calls.
|
||||
\param compoundId [in] compound that the object belongs to
|
||||
\param handle [in] the object to update
|
||||
*/
|
||||
virtual void updateObjectAfterManualBoundsUpdates(PrunerCompoundId compoundId, const Gu::PrunerHandle handle) = 0;
|
||||
|
||||
/**
|
||||
Removes object from compound pruner.
|
||||
\param compoundId [in] compound that the object belongs to
|
||||
\param handle [in] the object to remove
|
||||
*/
|
||||
virtual void removeObject(PrunerCompoundId compoundId, const Gu::PrunerHandle handle, Gu::PrunerPayloadRemovalCallback* removalCallback) = 0;
|
||||
|
||||
/**
|
||||
\brief Adds object to the pruner.
|
||||
\param compoundId [in] compound that the object belongs to
|
||||
\param result [out] an array for resulting handles
|
||||
\param bounds [in] an array of bounds. These bounds are used as-is so they should be pre-inflated if inflation is needed.
|
||||
\param userData [in] an array of object data
|
||||
|
||||
\return true if success, false if internal allocation failed. The first failing add results in a INVALID_PRUNERHANDLE.
|
||||
*/
|
||||
virtual bool addObject(PrunerCompoundId compoundId, Gu::PrunerHandle& result, const PxBounds3& bounds, const Gu::PrunerPayload userData, const PxTransform& transform) = 0;
|
||||
|
||||
/**
|
||||
* Query functions
|
||||
*
|
||||
* Note: return value may disappear if PrunerCallback contains the necessary information
|
||||
* currently it is still used for the dynamic pruner internally (to decide if added objects must be queried)
|
||||
*/
|
||||
virtual bool raycast(const PxVec3& origin, const PxVec3& unitDir, PxReal& inOutDistance, CompoundPrunerRaycastCallback&, PxCompoundPrunerQueryFlags flags) const = 0;
|
||||
virtual bool overlap(const Gu::ShapeData& queryVolume, CompoundPrunerOverlapCallback&, PxCompoundPrunerQueryFlags flags) const = 0;
|
||||
virtual bool sweep(const Gu::ShapeData& queryVolume, const PxVec3& unitDir, PxReal& inOutDistance, CompoundPrunerRaycastCallback&, PxCompoundPrunerQueryFlags flags) const = 0;
|
||||
|
||||
/**
|
||||
\brief Retrieves the object's payload and data associated with the handle.
|
||||
|
||||
This function returns the payload associated with a given handle. Additionally it can return the
|
||||
destination addresses for the object's bounds & transform. The user can then write the new bounds
|
||||
and transform there, before eventually calling updateObjects().
|
||||
|
||||
\param[in] handle Object handle (initially returned by addObjects())
|
||||
\param[in] compoundId The compound id
|
||||
\param[out] data Optional location where to store the internal data associated with the payload.
|
||||
|
||||
\return The payload associated with the given handle.
|
||||
*/
|
||||
virtual const Gu::PrunerPayload& getPayloadData(Gu::PrunerHandle handle, PrunerCompoundId compoundId, Gu::PrunerPayloadData* data) const = 0;
|
||||
|
||||
/**
|
||||
\brief Preallocate space
|
||||
|
||||
\param[in] nbEntries The number of entries to preallocate space for
|
||||
*/
|
||||
virtual void preallocate(PxU32 nbEntries) = 0;
|
||||
|
||||
// PT: beware, shape transform
|
||||
virtual bool setTransform(Gu::PrunerHandle handle, PrunerCompoundId compoundId, const PxTransform& transform) = 0;
|
||||
|
||||
// PT: beware, actor transform
|
||||
virtual const PxTransform& getTransform(PrunerCompoundId compoundId) const = 0;
|
||||
|
||||
virtual void visualizeEx(PxRenderOutput& out, PxU32 color, bool drawStatic, bool drawDynamic) const = 0;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
60
engine/third_party/physx/source/scenequery/include/SqPrunerData.h
vendored
Normal file
60
engine/third_party/physx/source/scenequery/include/SqPrunerData.h
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above copyright
|
||||
// notice, this list of conditions and the following disclaimer in the
|
||||
// documentation and/or other materials provided with the distribution.
|
||||
// * Neither the name of NVIDIA CORPORATION nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// Copyright (c) 2008-2025 NVIDIA Corporation. All rights reserved.
|
||||
// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
|
||||
// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
|
||||
|
||||
#ifndef SQ_PRUNER_DATA_H
|
||||
#define SQ_PRUNER_DATA_H
|
||||
|
||||
|
||||
#include "SqTypedef.h"
|
||||
|
||||
// PT: SQ-API LEVEL 2 (Level 1 = SqPruner.h)
|
||||
// PT: this file is part of a "high-level" set of files within Sq. The SqPruner API doesn't rely on them.
|
||||
// PT: this should really be at Np level but moving it to Sq allows us to share it.
|
||||
|
||||
namespace physx
|
||||
{
|
||||
namespace Sq
|
||||
{
|
||||
struct PruningIndex
|
||||
{
|
||||
enum Enum
|
||||
{
|
||||
eSTATIC = 0, // PT: must match PX_SCENE_PRUNER_STATIC
|
||||
eDYNAMIC = 1, // PT: must match PX_SCENE_PRUNER_DYNAMIC
|
||||
|
||||
eCOUNT = 2
|
||||
};
|
||||
};
|
||||
|
||||
PX_FORCE_INLINE PrunerData createPrunerData(PxU32 index, Gu::PrunerHandle h) { return PrunerData((h << 1) | index); }
|
||||
PX_FORCE_INLINE PxU32 getPrunerIndex(PrunerData data) { return PxU32(data & 1); }
|
||||
PX_FORCE_INLINE Gu::PrunerHandle getPrunerHandle(PrunerData data) { return Gu::PrunerHandle(data >> 1); }
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
143
engine/third_party/physx/source/scenequery/include/SqQuery.h
vendored
Normal file
143
engine/third_party/physx/source/scenequery/include/SqQuery.h
vendored
Normal file
@@ -0,0 +1,143 @@
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above copyright
|
||||
// notice, this list of conditions and the following disclaimer in the
|
||||
// documentation and/or other materials provided with the distribution.
|
||||
// * Neither the name of NVIDIA CORPORATION nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// Copyright (c) 2008-2025 NVIDIA Corporation. All rights reserved.
|
||||
// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
|
||||
// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
|
||||
|
||||
#ifndef SQ_QUERY_H
|
||||
#define SQ_QUERY_H
|
||||
|
||||
// PT: SQ-API LEVEL 3 (Level 1 = SqPruner.h, Level 2 = SqManager/SqPrunerData)
|
||||
// PT: this file is part of a "high-level" set of files within Sq. The SqPruner API doesn't rely on them.
|
||||
// PT: this should really be at Np level but moving it to Sq allows us to share it.
|
||||
|
||||
#include "foundation/PxSimpleTypes.h"
|
||||
#include "geometry/PxGeometryQueryFlags.h"
|
||||
|
||||
#include "SqManager.h"
|
||||
#include "PxQueryReport.h"
|
||||
#include "GuCachedFuncs.h"
|
||||
|
||||
namespace physx
|
||||
{
|
||||
class PxGeometry;
|
||||
struct PxQueryFilterData;
|
||||
struct PxFilterData;
|
||||
class PxQueryFilterCallback;
|
||||
|
||||
namespace Sq
|
||||
{
|
||||
struct MultiQueryInput;
|
||||
|
||||
class PVDCapture
|
||||
{
|
||||
public:
|
||||
PVDCapture() {}
|
||||
virtual ~PVDCapture() {}
|
||||
|
||||
virtual bool transmitSceneQueries() = 0;
|
||||
|
||||
virtual void raycast(const PxVec3& origin, const PxVec3& unitDir, PxReal distance, const PxRaycastHit* hit, PxU32 hitsNum, const PxQueryFilterData& filterData, bool multipleHits) = 0;
|
||||
virtual void sweep(const PxGeometry& geometry, const PxTransform& pose, const PxVec3& unitDir, PxReal distance, const PxSweepHit* hit, PxU32 hitsNum, const PxQueryFilterData& filterData, bool multipleHits) = 0;
|
||||
virtual void overlap(const PxGeometry& geometry, const PxTransform& pose, const PxOverlapHit* hit, PxU32 hitsNum, const PxQueryFilterData& filterData) = 0;
|
||||
};
|
||||
|
||||
// SceneQueries-level adapter. Augments the PrunerManager-level adapter with functions needed to perform queries.
|
||||
class QueryAdapter : public Adapter
|
||||
{
|
||||
public:
|
||||
QueryAdapter() {}
|
||||
virtual ~QueryAdapter() {}
|
||||
|
||||
// PT: TODO: decouple from PxQueryCache?
|
||||
virtual Gu::PrunerHandle findPrunerHandle(const PxQueryCache& cache, PrunerCompoundId& compoundId, PxU32& prunerIndex) const = 0;
|
||||
|
||||
// PT: TODO: return reference? but this version is at least consistent with getActorShape
|
||||
virtual void getFilterData(const Gu::PrunerPayload& payload, PxFilterData& filterData) const = 0;
|
||||
virtual void getActorShape(const Gu::PrunerPayload& payload, PxActorShape& actorShape) const = 0;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
class SceneQueries
|
||||
{
|
||||
PX_NOCOPY(SceneQueries)
|
||||
public:
|
||||
SceneQueries(Sq::PVDCapture* pvd, PxU64 contextID, Gu::Pruner* staticPruner, Gu::Pruner* dynamicPruner,
|
||||
PxU32 dynamicTreeRebuildRateHint, float inflation,
|
||||
const PxSceneLimits& limits, const Sq::QueryAdapter& adapter);
|
||||
~SceneQueries();
|
||||
|
||||
PX_FORCE_INLINE Sq::PrunerManager& getPrunerManagerFast() { return mSQManager; }
|
||||
PX_FORCE_INLINE const Sq::PrunerManager& getPrunerManagerFast() const { return mSQManager; }
|
||||
|
||||
template<typename QueryHit>
|
||||
bool multiQuery(
|
||||
const Sq::MultiQueryInput& in,
|
||||
PxHitCallback<QueryHit>& hits, PxHitFlags hitFlags, const PxQueryCache* cache,
|
||||
const PxQueryFilterData& filterData, PxQueryFilterCallback* filterCall) const;
|
||||
|
||||
bool _raycast(
|
||||
const PxVec3& origin, const PxVec3& unitDir, const PxReal distance, // Ray data
|
||||
PxRaycastCallback& hitCall, PxHitFlags hitFlags,
|
||||
const PxQueryFilterData& filterData, PxQueryFilterCallback* filterCall,
|
||||
const PxQueryCache* cache, PxGeometryQueryFlags flags) const;
|
||||
|
||||
bool _sweep(
|
||||
const PxGeometry& geometry, const PxTransform& pose, // GeomObject data
|
||||
const PxVec3& unitDir, const PxReal distance, // Ray data
|
||||
PxSweepCallback& hitCall, PxHitFlags hitFlags,
|
||||
const PxQueryFilterData& filterData, PxQueryFilterCallback* filterCall,
|
||||
const PxQueryCache* cache, const PxReal inflation, PxGeometryQueryFlags flags) const;
|
||||
|
||||
bool _overlap(
|
||||
const PxGeometry& geometry, const PxTransform& transform, // GeomObject data
|
||||
PxOverlapCallback& hitCall,
|
||||
const PxQueryFilterData& filterData, PxQueryFilterCallback* filterCall,
|
||||
const PxQueryCache* cache, PxGeometryQueryFlags flags) const;
|
||||
|
||||
PX_FORCE_INLINE PxU64 getContextId() const { return mSQManager.getContextId(); }
|
||||
Sq::PrunerManager mSQManager;
|
||||
public:
|
||||
Gu::CachedFuncs mCachedFuncs;
|
||||
|
||||
Sq::PVDCapture* mPVD;
|
||||
};
|
||||
|
||||
#if PX_SUPPORT_EXTERN_TEMPLATE
|
||||
//explicit template instantiation declaration
|
||||
extern template
|
||||
bool SceneQueries::multiQuery<PxRaycastHit>(const Sq::MultiQueryInput&, PxHitCallback<PxRaycastHit>&, PxHitFlags, const PxQueryCache*, const PxQueryFilterData&, PxQueryFilterCallback*) const;
|
||||
|
||||
extern template
|
||||
bool SceneQueries::multiQuery<PxOverlapHit>(const Sq::MultiQueryInput&, PxHitCallback<PxOverlapHit>&, PxHitFlags, const PxQueryCache*, const PxQueryFilterData&, PxQueryFilterCallback*) const;
|
||||
|
||||
extern template
|
||||
bool SceneQueries::multiQuery<PxSweepHit>(const Sq::MultiQueryInput&, PxHitCallback<PxSweepHit>&, PxHitFlags, const PxQueryCache*, const PxQueryFilterData&, PxQueryFilterCallback*) const;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
47
engine/third_party/physx/source/scenequery/include/SqTypedef.h
vendored
Normal file
47
engine/third_party/physx/source/scenequery/include/SqTypedef.h
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above copyright
|
||||
// notice, this list of conditions and the following disclaimer in the
|
||||
// documentation and/or other materials provided with the distribution.
|
||||
// * Neither the name of NVIDIA CORPORATION nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// Copyright (c) 2008-2025 NVIDIA Corporation. All rights reserved.
|
||||
// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
|
||||
// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
|
||||
|
||||
#ifndef SQ_TYPEDEF_H
|
||||
#define SQ_TYPEDEF_H
|
||||
|
||||
#include "foundation/PxSimpleTypes.h"
|
||||
#include "GuPrunerTypedef.h"
|
||||
|
||||
namespace physx
|
||||
{
|
||||
namespace Sq
|
||||
{
|
||||
typedef PxU32 PrunerCompoundId;
|
||||
static const PrunerCompoundId INVALID_COMPOUND_ID = 0xffffffff;
|
||||
|
||||
typedef PxU32 PrunerData;
|
||||
#define SQ_INVALID_PRUNER_DATA 0xffffffff
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user