aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/common/include/IofxManagerIntl.h
diff options
context:
space:
mode:
authorgit perforce import user <a@b>2016-10-25 12:29:14 -0600
committerSheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees>2016-10-25 18:56:37 -0500
commit3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch)
treefa6485c169e50d7415a651bf838f5bcd0fd3bfbd /APEX_1.4/common/include/IofxManagerIntl.h
downloadphysx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz
physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip
Initial commit:
PhysX 3.4.0 Update @ 21294896 APEX 1.4.0 Update @ 21275617 [CL 21300167]
Diffstat (limited to 'APEX_1.4/common/include/IofxManagerIntl.h')
-rw-r--r--APEX_1.4/common/include/IofxManagerIntl.h208
1 files changed, 208 insertions, 0 deletions
diff --git a/APEX_1.4/common/include/IofxManagerIntl.h b/APEX_1.4/common/include/IofxManagerIntl.h
new file mode 100644
index 00000000..4ea3967d
--- /dev/null
+++ b/APEX_1.4/common/include/IofxManagerIntl.h
@@ -0,0 +1,208 @@
+/*
+ * 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 IOFX_MANAGER_INTL_H
+#define IOFX_MANAGER_INTL_H
+
+#include "PsArray.h"
+#include "PxVec3.h"
+#include "PxVec4.h"
+#include "PxTaskManager.h"
+
+namespace physx
+{
+ class PxGpuCopyDescQueue;
+}
+
+namespace nvidia
+{
+namespace apex
+{
+class IofxAsset;
+class RenderVolume;
+
+template <class T>
+class ApexMirroredArray;
+
+
+class IofxManagerDescIntl
+{
+public:
+ IofxManagerDescIntl() :
+ iosAssetName(NULL),
+ iosOutputsOnDevice(false),
+ iosSupportsDensity(false),
+ iosSupportsCollision(false),
+ iosSupportsUserData(false),
+ maxObjectCount(0),
+ maxInputCount(0),
+ maxInStateCount(0)
+ {
+ }
+
+ const char* iosAssetName;
+ bool iosOutputsOnDevice;
+ bool iosSupportsDensity;
+ bool iosSupportsCollision;
+ bool iosSupportsUserData;
+ uint32_t maxObjectCount;
+ uint32_t maxInputCount;
+ uint32_t maxInStateCount;
+};
+
+/// The IOFX will update the volumeID each simulation step, the IOS must
+/// persist this output. IOS provides initial volumeID, based on emitter's
+/// preferred volume.
+struct IofxActorIDIntl
+{
+ uint32_t value;
+
+ PX_CUDA_CALLABLE PX_INLINE IofxActorIDIntl() {}
+ PX_CUDA_CALLABLE PX_INLINE explicit IofxActorIDIntl(uint32_t arg)
+ {
+ value = arg;
+ }
+
+ PX_CUDA_CALLABLE PX_INLINE void set(uint16_t volumeID, uint16_t actorClassID)
+ {
+ value = (uint32_t(volumeID) << 16) | uint32_t(actorClassID);
+ }
+
+ PX_CUDA_CALLABLE PX_INLINE uint16_t getVolumeID() const
+ {
+ return uint16_t(value >> 16);
+ }
+ PX_CUDA_CALLABLE PX_INLINE void setVolumeID(uint16_t volumeID)
+ {
+ value &= 0x0000FFFFu;
+ value |= (uint32_t(volumeID) << 16);
+ }
+
+ PX_CUDA_CALLABLE PX_INLINE uint16_t getActorClassID() const
+ {
+ return uint16_t(value & 0xFFFFu);
+ }
+ PX_CUDA_CALLABLE PX_INLINE void setActorClassID(uint16_t actorClassID)
+ {
+ value &= 0xFFFF0000u;
+ value |= uint32_t(actorClassID);
+ }
+
+ static const uint16_t NO_VOLUME = 0xFFFFu;
+ static const uint16_t IPX_ACTOR = 0xFFFFu;
+};
+
+
+/* IOFX Manager returned pointers for simulation data */
+class IosBufferDescIntl
+{
+public:
+ /* All arrays are indexed by input ID */
+ ApexMirroredArray<PxVec4>* pmaPositionMass;
+ ApexMirroredArray<PxVec4>* pmaVelocityLife;
+ ApexMirroredArray<PxVec4>* pmaCollisionNormalFlags;
+ ApexMirroredArray<float>* pmaDensity;
+ ApexMirroredArray<IofxActorIDIntl>* pmaActorIdentifiers;
+ ApexMirroredArray<uint32_t>* pmaInStateToInput;
+ ApexMirroredArray<uint32_t>* pmaOutStateToInput;
+
+ ApexMirroredArray<uint32_t>* pmaUserData;
+
+ //< Value in inStateToInput field indicates a dead particle, input to IOFX
+ static const uint32_t NOT_A_PARTICLE = 0xFFFFFFFFu;
+
+ //< Flag in inStateToInput field indicates a new particle, input to IOFX
+ static const uint32_t NEW_PARTICLE_FLAG = 0x80000000u;
+};
+
+// This is a representative of uint4 on host
+struct IofxSlice
+{
+ uint32_t x, y, z, w;
+};
+
+typedef void (*EventCallback)(void*);
+
+class IofxManagerCallbackIntl
+{
+public:
+ virtual void operator()(void* stream = NULL) = 0;
+};
+
+class IofxManagerClientIntl
+{
+public:
+ struct Params
+ {
+ float objectScale;
+
+ Params()
+ {
+ setDefaults();
+ }
+
+ void setDefaults()
+ {
+ objectScale = 1.0f;
+ }
+ };
+ virtual void getParams(IofxManagerClientIntl::Params& params) const = 0;
+ virtual void setParams(const IofxManagerClientIntl::Params& params) = 0;
+};
+
+
+class IofxManagerIntl
+{
+public:
+ //! An IOS Actor will call this once, at creation
+ virtual void createSimulationBuffers(IosBufferDescIntl& outDesc) = 0;
+
+ //! An IOS actor will call this once, when it creates its fluid simulation
+ virtual void setSimulationParameters(float radius, const PxVec3& up, float gravity, float restDensity) = 0;
+
+ //! An IOS Actor will call this method after each simulation step
+ virtual void updateEffectsData(float deltaTime, uint32_t numObjects, uint32_t maxInputID, uint32_t maxStateID, void* extraData = 0) = 0;
+
+ //! An IOS Actor will call this method at the start of each step IOFX will run
+ virtual PxTaskID getUpdateEffectsTaskID(PxTaskID) = 0;
+
+ virtual uint16_t getActorClassID(IofxManagerClientIntl* client, uint16_t meshID) = 0;
+
+ virtual IofxManagerClientIntl* createClient(nvidia::apex::IofxAsset* asset, const IofxManagerClientIntl::Params& params) = 0;
+ virtual void releaseClient(IofxManagerClientIntl* client) = 0;
+
+ virtual uint16_t getVolumeID(nvidia::apex::RenderVolume* vol) = 0;
+
+ //! Triggers the IOFX Manager to copy host buffers to the device
+ //! This is intended for use in an IOS post-update task, if they
+ //! need the output buffers on the device.
+ virtual void outputHostToDevice(PxGpuCopyDescQueue& copyQueue) = 0;
+
+ //! IofxManagerCallbackIntl will be called before Iofx computations
+ virtual void setOnStartCallback(IofxManagerCallbackIntl*) = 0;
+ //! IofxManagerCallbackIntl will be called after Iofx computations
+ virtual void setOnFinishCallback(IofxManagerCallbackIntl*) = 0;
+
+ //! Called when IOS is being deleted
+ virtual void release() = 0;
+
+ //get bounding box
+ virtual PxBounds3 getBounds() const = 0;
+
+protected:
+ virtual ~IofxManagerIntl() {}
+};
+
+
+}
+} // end namespace nvidia::apex
+
+#endif // IOFX_MANAGER_INTL_H