From 3dfe2108cfab31ba3ee5527e217d0d8e99a51162 Mon Sep 17 00:00:00 2001 From: git perforce import user Date: Tue, 25 Oct 2016 12:29:14 -0600 Subject: Initial commit: PhysX 3.4.0 Update @ 21294896 APEX 1.4.0 Update @ 21275617 [CL 21300167] --- .../fieldsampler/include/FieldSamplerScene.h | 218 +++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 APEX_1.4/module/fieldsampler/include/FieldSamplerScene.h (limited to 'APEX_1.4/module/fieldsampler/include/FieldSamplerScene.h') diff --git a/APEX_1.4/module/fieldsampler/include/FieldSamplerScene.h b/APEX_1.4/module/fieldsampler/include/FieldSamplerScene.h new file mode 100644 index 00000000..1c63501f --- /dev/null +++ b/APEX_1.4/module/fieldsampler/include/FieldSamplerScene.h @@ -0,0 +1,218 @@ +/* + * 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_SCENE_H__ +#define __FIELD_SAMPLER_SCENE_H__ + +#include "Apex.h" + +#include "ModuleFieldSamplerImpl.h" +#include "FieldSamplerSceneIntl.h" +#include "FieldSamplerQueryIntl.h" +#include "ApexSDKIntl.h" +#include "ModuleIntl.h" +#include "ApexContext.h" +#include "ApexSDKHelpers.h" +#include "PsArray.h" + +#include "PxTask.h" + +#if APEX_CUDA_SUPPORT +#include "ApexCudaWrapper.h" +#include "ApexCuda.h" +#include "CudaModuleScene.h" + +#include "../cuda/include/common.h" + +#define SCENE_CUDA_OBJ(scene, name) static_cast(scene)->APEX_CUDA_OBJ_NAME(name) +#endif + + +namespace nvidia +{ +namespace apex +{ +class SceneIntl; +} +namespace fieldsampler +{ + +class ModuleFieldSamplerImpl; +class FieldSamplerPhysXMonitor; +class FieldSamplerManager; +class FieldSamplerQuery; + +class FieldSamplerScene : public ModuleSceneIntl, public ApexContext, public ApexResourceInterface, public ApexResource +{ +public: + FieldSamplerScene(ModuleFieldSamplerImpl& module, SceneIntl& scene, RenderDebugInterface* debugRender, ResourceList& list); + ~FieldSamplerScene(); + + /* ModuleSceneIntl */ + void visualize(); + + PxScene* getModulePhysXScene() const + { + return mPhysXScene; + } + void setModulePhysXScene(PxScene*); + PxScene* mPhysXScene; + + void submitTasks(float elapsedTime, float substepSize, uint32_t numSubSteps); + void setTaskDependencies(); + void fetchResults(); + + virtual Module* getModule() + { + return mModule; + } + + virtual SceneStats* getStats() + { + return 0; + } + + bool lockRenderResources() + { + renderLockAllActors(); // Lock options not implemented yet + return true; + } + + bool unlockRenderResources() + { + renderUnLockAllActors(); // Lock options not implemented yet + return true; + } + + /* ApexResourceInterface */ + uint32_t getListIndex() const + { + return m_listIndex; + } + void setListIndex(ResourceList& list, uint32_t index) + { + m_listIndex = index; + m_list = &list; + } + void release() + { + mModule->releaseModuleSceneIntl(*this); + } + SceneIntl& getApexScene() const + { + return *mApexScene; + } + + FieldSamplerManagerIntl* getManager(); + + uint32_t createForceSampleBatch(uint32_t maxCount, const physx::PxFilterData filterData); + void releaseForceSampleBatch(uint32_t batchId); + void submitForceSampleBatch( uint32_t batchId, PxVec4* forces, const uint32_t forcesStride, + const PxVec3* positions, const uint32_t positionsStride, + const PxVec3* velocities, const uint32_t velocitiesStride, + const float* mass, const uint32_t massStride, + const uint32_t* indices, const uint32_t numIndices); + + /* Toggle PhysX Monitor on/off */ + void enablePhysXMonitor(bool enable); + + void setPhysXFilterData(physx::PxFilterData filterData); + +protected: + void destroy(); + + virtual FieldSamplerManager* createManager() = 0; + + class TaskPhysXMonitorLoad : public PxTask + { + public: + TaskPhysXMonitorLoad() {} + const char* getName() const + { + return FSST_PHYSX_MONITOR_LOAD; + } + void run() {/* void task */}; + }; + TaskPhysXMonitorLoad mPhysXMonitorLoadTask; + class TaskPhysXMonitorFetch : public PxTask + { + public: + TaskPhysXMonitorFetch() {} + const char* getName() const + { + return FSST_PHYSX_MONITOR_FETCH; + } + void run() {/* void task */}; + }; + TaskPhysXMonitorFetch mPhysXMonitorFetchTask; + + ModuleFieldSamplerImpl* mModule; + SceneIntl* mApexScene; + RenderDebugInterface* mDebugRender; + FieldSamplerPhysXMonitor* mPhysXMonitor; + + FieldSamplerManager* mManager; + + uint32_t mForceSampleBatchBufferSize; + uint32_t mForceSampleBatchBufferPos; + Array mForceSampleBatchQuery; + Array mForceSampleBatchQueryData; + Array mForceSampleBatchPosition; + Array mForceSampleBatchVelocity; + Array mForceSampleBatchMass; + + friend class ModuleFieldSamplerImpl; + friend class FieldSamplerManager; +}; + +class FieldSamplerSceneCPU : public FieldSamplerScene +{ +public: + FieldSamplerSceneCPU(ModuleFieldSamplerImpl& module, SceneIntl& scene, RenderDebugInterface* debugRender, ResourceList& list); + ~FieldSamplerSceneCPU(); + +protected: + virtual FieldSamplerManager* createManager(); + +}; + +#if APEX_CUDA_SUPPORT +class FieldSamplerSceneGPU : public FieldSamplerScene, public CudaModuleScene +{ +public: + FieldSamplerSceneGPU(ModuleFieldSamplerImpl& module, SceneIntl& scene, RenderDebugInterface* debugRender, ResourceList& list); + ~FieldSamplerSceneGPU(); + + void* getHeadCudaObj() + { + return CudaModuleScene::getHeadCudaObj(); + } + +//CUDA module objects +#include "../cuda/include/fieldsampler.h" + + PxCudaContextManager* getCudaContext() const + { + return mCtxMgr; + } + +protected: + virtual FieldSamplerManager* createManager(); + + /* keep a convenience pointer to the cuda context manager */ + PxCudaContextManager* mCtxMgr; +}; +#endif + +} +} // end namespace nvidia::apex + +#endif -- cgit v1.2.3