#ifndef PX_PHYSICS_GEOMUTILS_NX_TRIANGLEMESH
#define PX_PHYSICS_GEOMUTILS_NX_TRIANGLEMESH
#include "foundation/PxVec3.h"
#include "foundation/PxBounds3.h"
#include "common/PxPhysXCommonConfig.h"
#include "common/PxBase.h"
#if !PX_DOXYGEN
namespace physx
{
#endif
#define PX_ENABLE_DYNAMIC_MESH_RTREE 1
struct PxMeshMidPhase
{
enum Enum
{
eBVH33 = 0, eBVH34 = 1,
eLAST
};
};
struct PxTriangleMeshFlag
{
enum Enum
{
e16_BIT_INDICES = (1<<1), eADJACENCY_INFO = (1<<2) };
};
typedef PxFlags<PxTriangleMeshFlag::Enum,PxU8> PxTriangleMeshFlags;
PX_FLAGS_OPERATORS(PxTriangleMeshFlag::Enum,PxU8)
class PxTriangleMesh : public PxBase
{
public:
virtual PxU32 getNbVertices() const = 0;
virtual const PxVec3* getVertices() const = 0;
#if PX_ENABLE_DYNAMIC_MESH_RTREE
virtual PxVec3* getVerticesForModification() = 0;
virtual PxBounds3 refitBVH() = 0;
#endif
virtual PxU32 getNbTriangles() const = 0;
virtual const void* getTriangles() const = 0;
virtual PxTriangleMeshFlags getTriangleMeshFlags() const = 0;
virtual const PxU32* getTrianglesRemap() const = 0;
virtual void release() = 0;
virtual PxMaterialTableIndex getTriangleMaterialIndex(PxTriangleID triangleIndex) const = 0;
virtual PxBounds3 getLocalBounds() const = 0;
virtual PxU32 getReferenceCount() const = 0;
virtual void acquireReference() = 0;
protected:
PX_INLINE PxTriangleMesh(PxType concreteType, PxBaseFlags baseFlags) : PxBase(concreteType, baseFlags) {}
PX_INLINE PxTriangleMesh(PxBaseFlags baseFlags) : PxBase(baseFlags) {}
virtual ~PxTriangleMesh() {}
virtual bool isKindOf(const char* name) const { return !::strcmp("PxTriangleMesh", name) || PxBase::isKindOf(name); }
};
class PxBVH33TriangleMesh : public PxTriangleMesh
{
public:
protected:
PX_INLINE PxBVH33TriangleMesh(PxType concreteType, PxBaseFlags baseFlags) : PxTriangleMesh(concreteType, baseFlags) {}
PX_INLINE PxBVH33TriangleMesh(PxBaseFlags baseFlags) : PxTriangleMesh(baseFlags) {}
virtual ~PxBVH33TriangleMesh() {}
virtual bool isKindOf(const char* name) const { return !::strcmp("PxBVH33TriangleMesh", name) || PxTriangleMesh::isKindOf(name); }
};
class PxBVH34TriangleMesh : public PxTriangleMesh
{
public:
protected:
PX_INLINE PxBVH34TriangleMesh(PxType concreteType, PxBaseFlags baseFlags) : PxTriangleMesh(concreteType, baseFlags) {}
PX_INLINE PxBVH34TriangleMesh(PxBaseFlags baseFlags) : PxTriangleMesh(baseFlags) {}
virtual ~PxBVH34TriangleMesh() {}
virtual bool isKindOf(const char* name) const { return !::strcmp("PxBVH34TriangleMesh", name) || PxTriangleMesh::isKindOf(name); }
};
#if !PX_DOXYGEN
} #endif
#endif