Revision control

++ // SPDX-FileCopyrightText: Copyright (c) 2008-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
++ // SPDX-License-Identifier: Apache-2.0
++
++
++ #ifndef DY_DEFORMABLE_SURFACE_H
++ #define DY_DEFORMABLE_SURFACE_H
++
++ #include "foundation/PxSimpleTypes.h"
++ #include "DyDeformableSurfaceCore.h"
++ #include "PxvGeometry.h"
++
++ namespace physx
++ {
++ namespace Sc
++ {
++ class DeformableSurfaceSim;
++ }
++
++ namespace Dy
++ {
++
++ typedef size_t DeformableSurfaceHandle;
++ struct DeformableSurfaceCore;
++
++ class DeformableSurface
++ {
++ PX_NOCOPY(DeformableSurface)
++
++ public:
++ DeformableSurface(Sc::DeformableSurfaceSim* sim, Dy::DeformableSurfaceCore& core) :
++ mSim(sim), mCore(core), mElementId(0xffffffff), mGpuRemapId(0xffffffff)
++ {}
++
++ ~DeformableSurface() {}
++
++ PX_FORCE_INLINE void setGpuRemapId(const PxU32 remapId)
++ {
++ mGpuRemapId = remapId;
++ PxTriangleMeshGeometryLL& geom = mShapeCore->mGeometry.get<PxTriangleMeshGeometryLL>();
++ geom.materialsLL.gpuRemapId = remapId;
++ }
++
++ PX_FORCE_INLINE PxTriangleMesh* getTriangleMesh()
++ {
++ PxTriangleMeshGeometryLL& geom = mShapeCore->mGeometry.get<PxTriangleMeshGeometryLL>();
++ return geom.triangleMesh;
++ }
++
++ PX_FORCE_INLINE PxU32 getGpuRemapId() { return mGpuRemapId; }
++
++ PX_FORCE_INLINE void setElementId(const PxU32 elementId) { mElementId = elementId; }
++ PX_FORCE_INLINE PxU32 getElementId() { return mElementId; }
++
++ PX_FORCE_INLINE PxsShapeCore& getShapeCore() { return *mShapeCore; }
++ PX_FORCE_INLINE void setShapeCore(PxsShapeCore* shapeCore) { mShapeCore = shapeCore; }
++
++ PX_FORCE_INLINE Sc::DeformableSurfaceSim* getSim() const { return mSim; }
++ PX_FORCE_INLINE const DeformableSurfaceCore& getCore() const { return mCore; }
++ PX_FORCE_INLINE DeformableSurfaceCore& getCore() { return mCore; }
++
++ PX_FORCE_INLINE PxU16 getIterationCounts() const { return mCore.solverIterationCounts; }
++
++ void addAttachmentHandle(PxU32 handle);
++ void removeAttachmentHandle(PxU32 handle);
++
++ PxArray<PxU32> mAttachmentHandles;
++ PxArray<PxU32> mSurfaceSurfaceAttachments;
++ private:
++
++ Sc::DeformableSurfaceSim* mSim;
++ DeformableSurfaceCore& mCore;
++ PxsShapeCore* mShapeCore;
++
++ PxU32 mElementId; //this is used for the bound array, contactDist
++ PxU32 mGpuRemapId;
++ };
++
++ PX_FORCE_INLINE DeformableSurface* getDeformableSurface(DeformableSurfaceHandle handle)
++ {
++ return reinterpret_cast<DeformableSurface*>(handle);
++ }
++
++ PX_FORCE_INLINE void DeformableSurface::addAttachmentHandle(PxU32 handle)
++ {
++ mAttachmentHandles.pushBack(handle);
++ }
++
++ PX_FORCE_INLINE void DeformableSurface::removeAttachmentHandle(PxU32 handle)
++ {
++ for (PxU32 i = 0; i < mAttachmentHandles.size(); ++i)
++ {
++ if (mAttachmentHandles[i] == handle)
++ {
++ mAttachmentHandles.replaceWithLast(i);
++ }
++ }
++ }
++
++ } // namespace Dy
++ } // namespace physx
++
++ #endif // DY_DEFORMABLE_SURFACE_H