diff options
Diffstat (limited to 'PhysX_3.4/Source/LowLevelParticles/include/PtContext.h')
| -rw-r--r-- | PhysX_3.4/Source/LowLevelParticles/include/PtContext.h | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/PhysX_3.4/Source/LowLevelParticles/include/PtContext.h b/PhysX_3.4/Source/LowLevelParticles/include/PtContext.h new file mode 100644 index 00000000..8983a559 --- /dev/null +++ b/PhysX_3.4/Source/LowLevelParticles/include/PtContext.h @@ -0,0 +1,179 @@ +// This code contains NVIDIA Confidential Information and is disclosed to you +// under a form of NVIDIA software license agreement provided separately to you. +// +// Notice +// NVIDIA Corporation and its licensors retain all intellectual property and +// proprietary rights in and to this software and 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. +// +// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES +// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO +// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, +// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. +// +// Information and code furnished is believed to be accurate and reliable. +// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such +// information or for any infringement of patents or other rights of third parties that may +// result from its use. No license is granted by implication or otherwise under any patent +// or patent rights of NVIDIA Corporation. Details are subject to change without notice. +// This code supersedes and replaces all information previously supplied. +// NVIDIA Corporation products are not authorized for use as critical +// components in life support devices or systems without express written approval of +// NVIDIA Corporation. +// +// Copyright (c) 2008-2016 NVIDIA Corporation. All rights reserved. +// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved. +// Copyright (c) 2001-2004 NovodeX AG. All rights reserved. + +#ifndef PT_CONTEXT_H +#define PT_CONTEXT_H + +#include "PxPhysXConfig.h" +#if PX_USE_PARTICLE_SYSTEM_API + +#include "PtParticleSystemSim.h" +#include "PtParticleShape.h" +#include "PtBodyTransformVault.h" + +namespace physx +{ + +class PxSceneGpu; +class PxBaseTask; +class PxLightCpuTask; +class PxTaskManager; + +namespace Cm +{ +class FlushPool; +} + +namespace Pt +{ + +class BodyTransformVault; + +/** +Per scene manager class for particle systems. All particle systems part of a context are stepped collectively. + +The class represents a common interface for CPU and GPU particles. Currently the Pt::ContextCpu implementation +also contains code to create and schedule GPU particle systems. Eventually all that logic should move either to a +Pt::ContextGPU class or PxSceneGpu should be changed to implement the Content interface directly. +*/ +class Context +{ + PX_NOCOPY(Context) + public: + /** + Deallocates all resources created for the particle context instance. + */ + virtual void destroy() = 0; + + /** + Add a particle system to the particle low level context. + Onwership of ParticleData is transfered to the low level particle system in case of the + CPU implementation. For the GPU implementation, the content is copied and the ParticleData released. + If GPU creation fails, NULL is returned. + */ + virtual ParticleSystemSim* addParticleSystem(class ParticleData* particleData, + const ParticleSystemParameter& parameter, bool useGpuSupport) = 0; + + /** + Removes a particle system from the particle low level context. If acquireParticleData is specified, the particle + state is returned. In case of the CPU implementation, ParticleData ownership is returned - in case of the GPU + implementation a new ParticleData instance is created and the particle state copied to it. + */ + virtual ParticleData* removeParticleSystem(ParticleSystemSim* system, bool acquireParticleData) = 0; + + /** + Issues shape update stages for a batch of particle systems. + Ownership of Pt::ParticleShapeUpdateInput::shapes passed to callee! + */ + virtual PxBaseTask& scheduleShapeGeneration(class ParticleSystemSim** particleSystems, + struct ParticleShapesUpdateInput* inputs, PxU32 batchSize, + PxBaseTask& continuation) = 0; + + /** + Issues dynamics (SPH) update on CPUs. + */ + virtual physx::PxBaseTask& scheduleDynamicsCpu(class ParticleSystemSim** particleSystems, PxU32 batchSize, + physx::PxBaseTask& continuation) = 0; + + /** + Schedules collision prep work. + */ + virtual physx::PxBaseTask& scheduleCollisionPrep(class ParticleSystemSim** particleSystems, + physx::PxLightCpuTask** inputPrepTasks, PxU32 batchSize, + physx::PxBaseTask& continuation) = 0; + + /** + Schedules collision update stages for a batch of particle systems on CPU. + Ownership of Pt::ParticleCollisionUpdateInput::contactManagerStream passed to callee! + */ + virtual physx::PxBaseTask& scheduleCollisionCpu(class ParticleSystemSim** particleSystems, PxU32 batchSize, + physx::PxBaseTask& continuation) = 0; + + /** + Schedule gpu pipeline. + */ + virtual physx::PxBaseTask& schedulePipelineGpu(ParticleSystemSim** particleSystems, PxU32 batchSize, + physx::PxBaseTask& continuation) = 0; + +#if PX_SUPPORT_GPU_PHYSX + /** + Lazily creates a GPU scene (context) + and returns it. + */ + virtual class PxSceneGpu* createOrGetSceneGpu() = 0; +#endif + +#if PX_SUPPORT_GPU_PHYSX + /** + Returns the GPU scene (context). + Non-virtual implementation. + */ + PX_FORCE_INLINE PxSceneGpu* getSceneGpuFast() + { + return mSceneGpu; + } +#endif + + /** + Returns Body hash data structure, which is used to store previous pose for RBs for particle collision. + */ + PX_FORCE_INLINE BodyTransformVault& getBodyTransformVaultFast() + { + return *mBodyTransformVault; + } + + protected: + Context() : mBodyTransformVault(NULL), mSceneGpu(NULL) + { + } + virtual ~Context() + { + } + + // members for 'fast', non virtual access + BodyTransformVault* mBodyTransformVault; // Hash table to store last frames world to body transforms. + PxSceneGpu* mSceneGpu; +}; + +/** +Creates a particle system context +*/ +Context* createParticleContext(physx::PxTaskManager* taskManager, Cm::FlushPool& taskPool); + +/** +Register particle functionality. +Not calling this should allow the code to be stripped at link time. +*/ +void registerParticles(); + +} // namespace Pt +} // namespace physx + +#endif // PX_USE_PARTICLE_SYSTEM_API +#endif // PT_CONTEXT_H |