aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/module/particles/src/ParticlesScene.cpp
diff options
context:
space:
mode:
authorsschirm <[email protected]>2016-12-23 14:20:36 +0100
committersschirm <[email protected]>2016-12-23 14:56:17 +0100
commitef6937e69e8ee3f409cf9d460d5ad300a65d5924 (patch)
tree710426e8daa605551ce3f34b581897011101c30f /APEX_1.4/module/particles/src/ParticlesScene.cpp
parentInitial commit: (diff)
downloadphysx-3.4-ef6937e69e8ee3f409cf9d460d5ad300a65d5924.tar.xz
physx-3.4-ef6937e69e8ee3f409cf9d460d5ad300a65d5924.zip
PhysX 3.4 / APEX 1.4 release candidate @21506124
Diffstat (limited to 'APEX_1.4/module/particles/src/ParticlesScene.cpp')
-rw-r--r--APEX_1.4/module/particles/src/ParticlesScene.cpp338
1 files changed, 0 insertions, 338 deletions
diff --git a/APEX_1.4/module/particles/src/ParticlesScene.cpp b/APEX_1.4/module/particles/src/ParticlesScene.cpp
deleted file mode 100644
index 4ca17275..00000000
--- a/APEX_1.4/module/particles/src/ParticlesScene.cpp
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * 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.
- */
-
-
-#include "ApexDefs.h"
-#include "ApexUsingNamespace.h"
-
-#include "Apex.h"
-#include "ParticlesScene.h"
-#include "SceneIntl.h"
-#include "ModulePerfScope.h"
-#include "ModuleParticlesImpl.h"
-#include "PxScene.h"
-#include "EffectPackageActorImpl.h"
-#include "ApexEmitterAssetParameters.h"
-#include "EmitterAsset.h"
-#include "EmitterActor.h"
-#include "PxProfiler.h"
-
-#include "ScopedPhysXLock.h"
-#include "Lock.h"
-
-#pragma warning(disable: 4355) // 'this' : used in base member initializer list
-
-namespace nvidia
-{
-
-namespace particles
-{
-
-ParticlesScene::ParticlesScene(ModuleParticlesImpl& module, SceneIntl& scene, RenderDebugInterface* renderDebug, ResourceList& list)
- : mRenderDebug(renderDebug)
- , mUpdateTask(*this)
- , mSimTime(0)
- , mCheckTime(0)
-{
- mModule = &module;
- mApexScene = &scene;
- mPhysXScene = NULL;
-
- list.add(*this); // Add self to module's list of ParticlesScenes
-
- /* Initialize reference to ParticlesDebugRenderParams */
- {
- READ_LOCK(*mApexScene);
- mDebugRenderParams = DYNAMIC_CAST(DebugRenderParams*)(mApexScene->getDebugRenderParams());
- }
- PX_ASSERT(mDebugRenderParams);
- NvParameterized::Handle handle(*mDebugRenderParams), memberHandle(*mDebugRenderParams);
- int size;
-
- if (mDebugRenderParams->getParameterHandle("moduleName", handle) == NvParameterized::ERROR_NONE)
- {
- handle.getArraySize(size, 0);
- handle.resizeArray(size + 1);
- if (handle.getChildHandle(size, memberHandle) == NvParameterized::ERROR_NONE)
- {
- memberHandle.initParamRef(ParticlesDebugRenderParams::staticClassName(), true);
- }
- }
-
- /* Load reference to ParticlesDebugRenderParams */
- NvParameterized::Interface* refPtr = NULL;
- memberHandle.getParamRef(refPtr);
- mParticlesDebugRenderParams = DYNAMIC_CAST(ParticlesDebugRenderParams*)(refPtr);
- PX_ASSERT(mParticlesDebugRenderParams);
-}
-
-ParticlesScene::~ParticlesScene()
-{
-}
-
-// Called by scene task graph between LOD and PhysX::simulate()
-void ParticlesScene::TaskUpdate::run()
-{
-#if 1
- setProfileStat((uint16_t) mOwner.mActorArray.size());
- float dt = mOwner.mApexScene->getElapsedTime();
- mOwner.updateActors(dt);
-
-#endif
-}
-
-void ParticlesScene::updateFromSimulate(float dt)
-{
- PX_UNUSED(dt);
-}
-
-// Called by updateTask between LOD and PhysX simulate. Any writes
-// to render data must be protected by acquiring the actor's render data lock
-void ParticlesScene::updateActors(float dt)
-{
- PX_PROFILE_ZONE("ParticlesScene::updateActors", GetInternalApexSDK()->getContextId());
-
- //_ASSERTE (dt <= 1.0f /60.0f);
- SCOPED_PHYSX_LOCK_WRITE(mApexScene);
- for (uint32_t i = 0 ; i < mActorArray.size() ; i++)
- {
- ParticlesBase* db = static_cast< ParticlesBase*>(mActorArray[i]);
- switch (db->getParticlesType())
- {
- case ParticlesBase::DST_EFFECT_PACKAGE_ACTOR:
- {
- EffectPackageActorImpl* actor = static_cast<EffectPackageActorImpl*>(db);
- actor->updateParticles(dt);
- }
- break;
- default:
- PX_ASSERT(0);
- }
- }
-
-}
-
-// submit the task that updates the dynamicsystem actors
-// called from ApexScene::simulate()
-void ParticlesScene::submitTasks(float elapsedTime, float /*substepSize*/, uint32_t /*numSubSteps*/)
-{
- PX_UNUSED(elapsedTime);
-#if 1
- mSimTime += elapsedTime;
- mCheckTime += elapsedTime;
- PxTaskManager* tm;
- {
- READ_LOCK(*mApexScene);
- tm = mApexScene->getTaskManager();
- }
- tm->submitUnnamedTask(mUpdateTask);
- mUpdateTask.finishBefore(tm->getNamedTask(AST_PHYSX_SIMULATE));
-#else
- updateActors(elapsedTime);
-#endif
-}
-
-void ParticlesScene::fetchResults()
-{
-
-}
-
-// Called by ApexScene::fetchResults() with all actors render data locked.
-void ParticlesScene::fetchResultsPostRenderUnlock()
-{
- PX_PROFILE_ZONE("ParticlesSceneFetchResults", GetInternalApexSDK()->getContextId());
-
- bool screenCulling = mModule->getEnableScreenCulling();
- bool znegative = mModule->getZnegative();
-
- for (uint32_t i = 0 ; i < mActorArray.size() ; i++)
- {
- ParticlesBase* db = static_cast< ParticlesBase*>(mActorArray[i]);
-
- switch (db->getParticlesType())
- {
- case ParticlesBase::DST_EFFECT_PACKAGE_ACTOR:
- {
- EffectPackageActorImpl* actor = static_cast< EffectPackageActorImpl*>(db);
- actor->updatePoseAndBounds(screenCulling, znegative);
- }
- break;
- default:
- PX_ASSERT(0);
- }
- }
-
- //
-
- if (!mEmitterPool.empty())
- {
- if (mCheckTime > 1) // only check once every second
- {
- mCheckTime = 0;
- EmitterPool* source = &mEmitterPool[0];
- EmitterPool* dest = source;
- uint32_t incount = mEmitterPool.size();
- uint32_t outcount = 0;
- for (uint32_t i = 0; i < incount; i++)
- {
- bool alive = source->process(mSimTime);
- if (!alive) // there must be at least one emitter sharing the same asset!
- {
- alive = true; // by default we cannot delete it unless there is at least once emitter in the pool sharing the same IOS
- EmitterPool* scan = &mEmitterPool[0];
- for (uint32_t i = 0; i < outcount; i++)
- {
- if (scan != source)
- {
- if (source->mEmitter->getEmitterAsset() == scan->mEmitter->getEmitterAsset())
- {
- alive = false;
- break;
- }
- }
- scan++;
- }
- }
- if (alive)
- {
- *dest = *source;
- dest++;
- outcount++;
- }
- else
- {
- source->releaseEmitter();
- }
- source++;
- }
- if (outcount != incount)
- {
- mEmitterPool.resize(outcount);
- }
- }
- }
- //
-}
-
-void ParticlesScene::visualize()
-{
-#ifndef WITHOUT_DEBUG_VISUALIZE
- if (!mParticlesDebugRenderParams->VISUALIZE_HEAT_SOURCE_ACTOR && !mParticlesDebugRenderParams->VISUALIZE_EFFECT_PACKAGE_ACTOR)
- {
- return;
- }
- const physx::PxMat44& savedPose = *RENDER_DEBUG_IFACE(mRenderDebug)->getPoseTyped();
- RENDER_DEBUG_IFACE(mRenderDebug)->setIdentityPose();
- RENDER_DEBUG_IFACE(mRenderDebug)->pushRenderState();
- for (uint32_t i = 0 ; i < mActorArray.size() ; i++)
- {
- ParticlesBase* db = static_cast< ParticlesBase*>(mActorArray[i]);
- switch (db->getParticlesType())
- {
- case ParticlesBase::DST_EFFECT_PACKAGE_ACTOR:
- if (mParticlesDebugRenderParams->VISUALIZE_EFFECT_PACKAGE_ACTOR)
- {
- EffectPackageActorImpl* hsa = static_cast< EffectPackageActorImpl*>(db);
- hsa->visualize(mRenderDebug, false);
- }
- break;
- default:
- PX_ASSERT(0);
- }
- }
- RENDER_DEBUG_IFACE(mRenderDebug)->setPose(savedPose);
- RENDER_DEBUG_IFACE(mRenderDebug)->popRenderState();
-#endif
-}
-
-void ParticlesScene::destroy()
-{
- removeAllActors();
- resetEmitterPool();
- mApexScene->moduleReleased(*this);
- delete this;
-}
-
-void ParticlesScene::setModulePhysXScene(PxScene* nxScene)
-{
- mPhysXScene = nxScene;
-}
-
-void ParticlesScene::resetEmitterPool()
-{
- for (uint32_t i = 0; i < mEmitterPool.size(); i++)
- {
- mEmitterPool[i].releaseEmitter();
- }
- mEmitterPool.clear();
-}
-
-void ParticlesScene::addToEmitterPool(EmitterActor* emitterActor)
-{
- EmitterPool ep(emitterActor, mSimTime);
- emitterActor->stopEmit();
- mEmitterPool.pushBack(ep);
-}
-
-EmitterActor* ParticlesScene::getEmitterFromPool(EmitterAsset* asset)
-{
- EmitterActor* ret = NULL;
-
- uint32_t ecount = mEmitterPool.size();
- if (ecount)
- {
- for (uint32_t i = 0; i < ecount; i++)
- {
- if (mEmitterPool[i].mEmitter->getEmitterAsset() == asset)
- {
- ret = mEmitterPool[i].mEmitter;
- for (uint32_t j = i + 1; j < ecount; j++)
- {
- mEmitterPool[j - 1] = mEmitterPool[j];
- }
- mEmitterPool.resize(ecount - 1);
- break;
- }
- }
- }
- return ret;
-}
-
-bool EmitterPool::process(float simTime)
-{
- bool ret = true;
- if (simTime > mEmitterTime)
- {
- mEmitterTime = simTime + EMITTER_FORGET_TIME;
- ret = false;
- }
- return ret;
-}
-
-void EmitterPool::releaseEmitter()
-{
- PX_ASSERT(mEmitter);
- if (mEmitter)
- {
- mEmitter->release();
- mEmitter = NULL;
- }
-}
-
-EmitterPool::EmitterPool(EmitterActor* emitterActor, float simTime)
-{
- mEmitter = emitterActor;
- mEmitterTime = simTime + EMITTER_FORGET_TIME;
-}
-
-}
-} // end namespace nvidia
-
-