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
00031 #ifndef PX_PHYSICS_NX_SCENE_QUERY_FILTERING
00032 #define PX_PHYSICS_NX_SCENE_QUERY_FILTERING
00033
00037 #include "PxPhysXConfig.h"
00038 #include "PxFiltering.h"
00039 #include "PxQueryReport.h"
00040 #include "PxClient.h"
00041
00042 #if !PX_DOXYGEN
00043 namespace physx
00044 {
00045 #endif
00046
00047 class PxShape;
00048 class PxRigidActor;
00049 struct PxQueryHit;
00050
00051
00057 struct PxQueryFlag
00058 {
00059 enum Enum
00060 {
00061 eSTATIC = (1<<0),
00062
00063 eDYNAMIC = (1<<1),
00064
00065 ePREFILTER = (1<<2),
00066
00067 ePOSTFILTER = (1<<3),
00068
00069 eANY_HIT = (1<<4),
00070
00071
00072 eNO_BLOCK = (1<<5),
00073
00074
00075 eRESERVED = (1<<15)
00076 };
00077 };
00078 PX_COMPILE_TIME_ASSERT(PxQueryFlag::eSTATIC==(1<<0));
00079 PX_COMPILE_TIME_ASSERT(PxQueryFlag::eDYNAMIC==(1<<1));
00080
00085 typedef PxFlags<PxQueryFlag::Enum,PxU16> PxQueryFlags;
00086 PX_FLAGS_OPERATORS(PxQueryFlag::Enum,PxU16)
00087
00088
00108 struct PxQueryHitType
00109 {
00110 enum Enum
00111 {
00112 eNONE = 0,
00113 eTOUCH = 1,
00114 eBLOCK = 2
00115 };
00116 };
00117
00132 struct PxQueryFilterData
00133 {
00135 explicit PX_INLINE PxQueryFilterData() : flags(PxQueryFlag::eDYNAMIC | PxQueryFlag::eSTATIC) {}
00136
00138 explicit PX_INLINE PxQueryFilterData(const PxFilterData& fd, PxQueryFlags f) : data(fd), flags(f) {}
00139
00141 explicit PX_INLINE PxQueryFilterData(PxQueryFlags f) : flags(f) {}
00142
00143 PxFilterData data;
00144 PxQueryFlags flags;
00145 };
00146
00169 class PxQueryFilterCallback
00170 {
00171 public:
00172
00182 virtual PxQueryHitType::Enum preFilter(
00183 const PxFilterData& filterData, const PxShape* shape, const PxRigidActor* actor, PxHitFlags& queryFlags) = 0;
00184
00192 virtual PxQueryHitType::Enum postFilter(const PxFilterData& filterData, const PxQueryHit& hit) = 0;
00193
00197 virtual ~PxQueryFilterCallback() {}
00198 };
00199
00233 typedef PX_DEPRECATED PxQueryHitType::Enum (*PxBatchQueryPreFilterShader)(
00234 PxFilterData queryFilterData, PxFilterData objectFilterData,
00235 const void* constantBlock, PxU32 constantBlockSize,
00236 PxHitFlags& hitFlags);
00237
00266 typedef PX_DEPRECATED PxQueryHitType::Enum (*PxBatchQueryPostFilterShader)(
00267 PxFilterData queryFilterData, PxFilterData objectFilterData,
00268 const void* constantBlock, PxU32 constantBlockSize,
00269 const PxQueryHit& hit);
00270
00271 #if !PX_DOXYGEN
00272 }
00273 #endif
00274
00276 #endif