diff options
Diffstat (limited to 'APEX_1.4/module/fieldsampler/include/FieldSamplerManager.h')
| -rw-r--r-- | APEX_1.4/module/fieldsampler/include/FieldSamplerManager.h | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/APEX_1.4/module/fieldsampler/include/FieldSamplerManager.h b/APEX_1.4/module/fieldsampler/include/FieldSamplerManager.h new file mode 100644 index 00000000..887a50c7 --- /dev/null +++ b/APEX_1.4/module/fieldsampler/include/FieldSamplerManager.h @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2008-2015, NVIDIA CORPORATION. All rights reserved. + * + * NVIDIA CORPORATION and its licensors retain all intellectual property + * and proprietary rights in and to this software, related documentation + * and any modifications thereto. Any use, reproduction, disclosure or + * distribution of this software and related documentation without an express + * license agreement from NVIDIA CORPORATION is strictly prohibited. + */ + + +#ifndef __FIELD_SAMPLER_MANAGER_H__ +#define __FIELD_SAMPLER_MANAGER_H__ + +#include "FieldSamplerManagerIntl.h" +#include "FieldSamplerScene.h" +#include "ApexGroupsFiltering.h" + +#if APEX_CUDA_SUPPORT +#define CUDA_OBJ(name) SCENE_CUDA_OBJ(mManager->getScene(), name) +#endif + +namespace nvidia +{ +namespace fieldsampler +{ + +PX_INLINE bool operator != (const PxFilterData& d1, const PxFilterData& d2) +{ + return d1.word0 != d2.word0 || d1.word1 != d2.word1 || d1.word2 != d2.word2 || d1.word3 != d2.word3; +} + +class FieldSamplerScene; + +class FieldSamplerQuery; +class FieldSamplerSceneWrapper; +class FieldSamplerWrapper; +class FieldBoundaryWrapper; + +class FieldSamplerManager : public FieldSamplerManagerIntl, public UserAllocated +{ +public: + FieldSamplerManager(FieldSamplerScene* scene); + virtual ~FieldSamplerManager() {} + + void submitTasks(); + void setTaskDependencies(); + void fetchResults(); + + /* FieldSamplerManager */ + FieldSamplerQueryIntl* createFieldSamplerQuery(const FieldSamplerQueryDescIntl&); + + void registerFieldSampler(FieldSamplerIntl* , const FieldSamplerDescIntl& , FieldSamplerSceneIntl*); + void unregisterFieldSampler(FieldSamplerIntl*); + + void registerFieldBoundary(FieldBoundaryIntl* , const FieldBoundaryDescIntl&); + void unregisterFieldBoundary(FieldBoundaryIntl*); + + void registerUnhandledParticleSystem(physx::PxActor*); + void unregisterUnhandledParticleSystem(physx::PxActor*); + bool isUnhandledParticleSystem(physx::PxActor*); + + FieldSamplerScene* getScene() const + { + return mScene; + } + SceneIntl& getApexScene() const + { + return *mScene->mApexScene; + } + + bool getFieldSamplerGroupsFiltering(const PxFilterData &o1,const PxFilterData &o2,float &weight) const; + void setFieldSamplerWeightedCollisionFilterCallback(FieldSamplerWeightedCollisionFilterCallback *callback) + { + mWeightedCallback = callback; + } + + virtual bool doFieldSamplerFiltering(const PxFilterData &o1, const PxFilterData &o2, float &weight) const + { + return getFieldSamplerGroupsFiltering(o1, o2, weight); + } + +protected: + virtual FieldSamplerQuery* allocateFieldSamplerQuery(const FieldSamplerQueryDescIntl&) = 0; + virtual FieldSamplerSceneWrapper* allocateFieldSamplerSceneWrapper(FieldSamplerSceneIntl*) = 0; + virtual FieldSamplerWrapper* allocateFieldSamplerWrapper(FieldSamplerIntl* , const FieldSamplerDescIntl& , FieldSamplerSceneWrapper*) = 0; + + static PX_INLINE void addFieldSamplerToQuery(FieldSamplerWrapper* fieldSamplerWrapper, FieldSamplerQuery* query); + void addAllFieldSamplersToQuery(FieldSamplerQuery*) const; + + FieldSamplerScene* mScene; + + ResourceList mFieldSamplerQueryList; + ResourceList mFieldSamplerSceneWrapperList; + ResourceList mFieldSamplerWrapperList; + ResourceList mFieldBoundaryWrapperList; + + nvidia::Array<physx::PxActor*> mUnhandledParticleSystems; + FieldSamplerWeightedCollisionFilterCallback *mWeightedCallback; + + bool mFieldSamplerGroupsFilteringChanged; + + friend class FieldSamplerSceneWrapperGPU; +}; + +class FieldSamplerManagerCPU : public FieldSamplerManager +{ +public: + FieldSamplerManagerCPU(FieldSamplerScene* scene) : FieldSamplerManager(scene) {} + +protected: + FieldSamplerQuery* allocateFieldSamplerQuery(const FieldSamplerQueryDescIntl&); + FieldSamplerSceneWrapper* allocateFieldSamplerSceneWrapper(FieldSamplerSceneIntl*); + FieldSamplerWrapper* allocateFieldSamplerWrapper(FieldSamplerIntl* , const FieldSamplerDescIntl& , FieldSamplerSceneWrapper*); +}; + +#if APEX_CUDA_SUPPORT +class FieldSamplerManagerGPU : public FieldSamplerManager +{ +public: + FieldSamplerManagerGPU(FieldSamplerScene* scene) : FieldSamplerManager(scene) {} + +protected: + FieldSamplerQuery* allocateFieldSamplerQuery(const FieldSamplerQueryDescIntl&); + FieldSamplerSceneWrapper* allocateFieldSamplerSceneWrapper(FieldSamplerSceneIntl*); + FieldSamplerWrapper* allocateFieldSamplerWrapper(FieldSamplerIntl* , const FieldSamplerDescIntl& , FieldSamplerSceneWrapper*); +}; +#endif // APEX_CUDA_SUPPORT + + +} // end namespace nvidia::apex +} +#endif // __FIELD_SAMPLER_MANAGER_H__ |