00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef MODULE_FIELD_SAMPLER_H
00031 #define MODULE_FIELD_SAMPLER_H
00032
00033 #include "Apex.h"
00034
00035 namespace nvidia
00036 {
00037 namespace apex
00038 {
00039
00040 PX_PUSH_PACK_DEFAULT
00041
00048 class FieldSamplerWeightedCollisionFilterCallback
00049 {
00050 public:
00057 virtual bool fieldSamplerWeightedCollisionFilter(const physx::PxFilterData &objectA,const physx::PxFilterData &objectB,float &multiplierValue) = 0;
00058 };
00059
00060
00064 class ModuleFieldSampler : public Module
00065 {
00066 protected:
00067 virtual ~ModuleFieldSampler() {}
00068
00069 public:
00070
00074 virtual bool setFieldSamplerWeightedCollisionFilterCallback(const Scene& apexScene,FieldSamplerWeightedCollisionFilterCallback *callback) = 0;
00075
00076
00077 #if PX_PHYSICS_VERSION_MAJOR == 3
00078
00081 virtual void enablePhysXMonitor(const Scene& apexScene, bool enable) = 0;
00088 virtual void setPhysXMonitorFilterData(const Scene& apexScene, physx::PxFilterData filterData) = 0;
00089 #endif
00090
00099 virtual uint32_t createForceSampleBatch(const Scene& apexScene, uint32_t maxCount, const physx::PxFilterData filterData) = 0;
00100
00107 virtual void releaseForceSampleBatch(const Scene& apexScene, uint32_t batchId) = 0;
00108
00125 virtual void submitForceSampleBatch( const Scene& apexScene, uint32_t batchId,
00126 PxVec4* forces, const uint32_t forcesStride,
00127 const PxVec3* positions, const uint32_t positionsStride,
00128 const PxVec3* velocities, const uint32_t velocitiesStride,
00129 const float* mass, const uint32_t massStride,
00130 const uint32_t* indices, const uint32_t numIndices) = 0;
00131
00132 };
00133
00134
00135
00136 PX_POP_PACK
00137
00138 }
00139 }
00140
00141 #endif // MODULE_FIELD_SAMPLER_H