aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/module/particles/include/ParticlesScene.h
diff options
context:
space:
mode:
Diffstat (limited to 'APEX_1.4/module/particles/include/ParticlesScene.h')
-rw-r--r--APEX_1.4/module/particles/include/ParticlesScene.h192
1 files changed, 192 insertions, 0 deletions
diff --git a/APEX_1.4/module/particles/include/ParticlesScene.h b/APEX_1.4/module/particles/include/ParticlesScene.h
new file mode 100644
index 00000000..0715e03d
--- /dev/null
+++ b/APEX_1.4/module/particles/include/ParticlesScene.h
@@ -0,0 +1,192 @@
+/*
+ * 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 __PARTICLES_SCENE_H__
+#define __PARTICLES_SCENE_H__
+
+#include "Apex.h"
+#include "PairFilter.h"
+#include "ModuleParticlesImpl.h"
+
+#include "ApexResource.h"
+#include "ApexContext.h"
+#include "ApexSDKHelpers.h"
+
+#include "RenderDebugInterface.h"
+#include "ApexSDKIntl.h"
+#include "ModuleIntl.h"
+
+#include "DebugRenderParams.h"
+#include "ParticlesDebugRenderParams.h"
+#include "PxTask.h"
+
+namespace nvidia
+{
+
+namespace apex
+{
+class SceneIntl;
+}
+namespace emitter
+{
+class EmitterActor;
+class EmitterAsset;
+}
+
+namespace particles
+{
+
+class ModuleParticlesImpl;
+
+#define EMITTER_FORGET_TIME 30
+
+class EmitterPool
+{
+public:
+ EmitterPool()
+ {
+ mEmitter = NULL;
+ mEmitterTime = 0;
+ }
+
+ EmitterPool(EmitterActor* emitterActor, float simTime);
+
+ ~EmitterPool()
+ {
+ }
+
+ bool process(float simTime);
+ void releaseEmitter();
+
+ EmitterActor* mEmitter;
+ float mEmitterTime;
+};
+
+typedef Array< EmitterPool > EmitterPoolVector;
+
+class ParticlesScene : public ModuleSceneIntl, public ApexContext, public ApexResourceInterface, public ApexResource
+{
+public:
+
+
+ ParticlesScene(ModuleParticlesImpl& module, SceneIntl& scene, RenderDebugInterface* renderDebug, ResourceList& list);
+ ~ParticlesScene();
+
+
+
+ /* ModuleSceneIntl */
+ void updateActors(float deltaTime);
+ void submitTasks(float elapsedTime, float substepSize, uint32_t numSubSteps);
+ virtual void updateFromSimulate(float dt);
+
+ virtual void visualize();
+ virtual void fetchResults();
+ virtual void fetchResultsPostRenderUnlock();
+
+ virtual void setModulePhysXScene(PxScene* s);
+ virtual PxScene* getModulePhysXScene() const
+ {
+ return mPhysXScene;
+ }
+
+ virtual Module* getModule()
+ {
+ return mModule;
+ }
+
+ 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;
+ }
+ virtual void release()
+ {
+ mModule->releaseModuleSceneIntl(*this);
+ }
+
+ virtual SceneStats* getStats()
+ {
+ return NULL;
+ }
+
+
+ SceneIntl* mApexScene;
+
+ ModuleParticlesImpl* getModuleParticles() const
+ {
+ return mModule;
+ }
+
+ void addToEmitterPool(EmitterActor* emitterActor);
+ EmitterActor* getEmitterFromPool(EmitterAsset* assert);
+
+ void resetEmitterPool();
+
+private:
+ void destroy();
+
+ ModuleParticlesImpl* mModule;
+
+ PxScene* mPhysXScene;
+ RenderDebugInterface* mRenderDebug;
+
+ DebugRenderParams* mDebugRenderParams;
+ ParticlesDebugRenderParams* mParticlesDebugRenderParams;
+
+ class TaskUpdate : public PxTask
+ {
+ public:
+ TaskUpdate(ParticlesScene& owner) : mOwner(owner) {}
+ const char* getName() const
+ {
+ return "ParticlesScene::Update";
+ }
+ void run();
+
+ protected:
+ ParticlesScene& mOwner;
+
+ private:
+ TaskUpdate& operator=(const TaskUpdate&);
+ };
+
+ TaskUpdate mUpdateTask;
+ friend class ModuleParticlesImpl;
+ friend class ParticlesActor;
+ friend class TaskUpdate;
+
+
+ float mCheckTime;
+ float mSimTime;
+ EmitterPoolVector mEmitterPool;
+};
+
+}
+} // end namespace nvidia
+
+#endif