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), clientId(PX_DEFAULT_CLIENT) {}
00136
00138 explicit PX_INLINE PxQueryFilterData(const PxFilterData& fd, PxQueryFlags f) : data(fd), flags(f), clientId(PX_DEFAULT_CLIENT) {}
00139
00141 explicit PX_INLINE PxQueryFilterData(PxQueryFlags f) : flags(f), clientId(PX_DEFAULT_CLIENT) {}
00142
00143 PxFilterData data;
00144 PxQueryFlags flags;
00145 PX_DEPRECATED PxClientID clientId;
00146 };
00147
00170 class PxQueryFilterCallback
00171 {
00172 public:
00173
00183 virtual PxQueryHitType::Enum preFilter(
00184 const PxFilterData& filterData, const PxShape* shape, const PxRigidActor* actor, PxHitFlags& queryFlags) = 0;
00185
00193 virtual PxQueryHitType::Enum postFilter(const PxFilterData& filterData, const PxQueryHit& hit) = 0;
00194
00198 virtual ~PxQueryFilterCallback() {}
00199 };
00200
00234 typedef PX_DEPRECATED PxQueryHitType::Enum (*PxBatchQueryPreFilterShader)(
00235 PxFilterData queryFilterData, PxFilterData objectFilterData,
00236 const void* constantBlock, PxU32 constantBlockSize,
00237 PxHitFlags& hitFlags);
00238
00267 typedef PX_DEPRECATED PxQueryHitType::Enum (*PxBatchQueryPostFilterShader)(
00268 PxFilterData queryFilterData, PxFilterData objectFilterData,
00269 const void* constantBlock, PxU32 constantBlockSize,
00270 const PxQueryHit& hit);
00271
00272 #if !PX_DOXYGEN
00273 }
00274 #endif
00275
00277 #endif