aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/module/fieldsampler/src
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/fieldsampler/src
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/fieldsampler/src')
-rw-r--r--APEX_1.4/module/fieldsampler/src/FieldBoundaryWrapper.cpp45
-rw-r--r--APEX_1.4/module/fieldsampler/src/FieldSamplerManager.cpp329
-rw-r--r--APEX_1.4/module/fieldsampler/src/FieldSamplerPhysXMonitor.cpp354
-rw-r--r--APEX_1.4/module/fieldsampler/src/FieldSamplerQuery.cpp876
-rw-r--r--APEX_1.4/module/fieldsampler/src/FieldSamplerScene.cpp304
-rw-r--r--APEX_1.4/module/fieldsampler/src/FieldSamplerSceneWrapper.cpp143
-rw-r--r--APEX_1.4/module/fieldsampler/src/FieldSamplerWrapper.cpp177
-rw-r--r--APEX_1.4/module/fieldsampler/src/ModuleFieldSamplerImpl.cpp281
-rw-r--r--APEX_1.4/module/fieldsampler/src/autogen/FieldSamplerModuleParameters.cpp318
-rw-r--r--APEX_1.4/module/fieldsampler/src/autogen/FieldSamplerPhysXMonitorParams.cpp358
10 files changed, 0 insertions, 3185 deletions
diff --git a/APEX_1.4/module/fieldsampler/src/FieldBoundaryWrapper.cpp b/APEX_1.4/module/fieldsampler/src/FieldBoundaryWrapper.cpp
deleted file mode 100644
index ebeedc80..00000000
--- a/APEX_1.4/module/fieldsampler/src/FieldBoundaryWrapper.cpp
+++ /dev/null
@@ -1,45 +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 "Apex.h"
-#include "FieldBoundaryWrapper.h"
-#include "FieldSamplerManager.h"
-
-
-namespace nvidia
-{
-namespace fieldsampler
-{
-
-FieldBoundaryWrapper::FieldBoundaryWrapper(ResourceList& list, FieldSamplerManager* manager, FieldBoundaryIntl* fieldBoundary, const FieldBoundaryDescIntl& fieldBoundaryDesc)
- : mManager(manager)
- , mFieldBoundary(fieldBoundary)
- , mFieldBoundaryDesc(fieldBoundaryDesc)
- , mFieldShapesChanged(false)
-{
- list.add(*this);
-
-}
-
-void FieldBoundaryWrapper::release()
-{
- delete this;
-}
-
-void FieldBoundaryWrapper::update()
-{
- mFieldShapesChanged = mFieldBoundary->updateFieldBoundary(mFieldShapes);
-}
-
-}
-} // end namespace nvidia::apex
-
diff --git a/APEX_1.4/module/fieldsampler/src/FieldSamplerManager.cpp b/APEX_1.4/module/fieldsampler/src/FieldSamplerManager.cpp
deleted file mode 100644
index a7c83f88..00000000
--- a/APEX_1.4/module/fieldsampler/src/FieldSamplerManager.cpp
+++ /dev/null
@@ -1,329 +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 "Apex.h"
-
-#include "FieldSamplerManager.h"
-
-#include "FieldSamplerQuery.h"
-#include "FieldSamplerSceneWrapper.h"
-#include "FieldSamplerWrapper.h"
-#include "FieldBoundaryWrapper.h"
-
-#include "SceneIntl.h"
-
-namespace nvidia
-{
-namespace fieldsampler
-{
-
-FieldSamplerManager::FieldSamplerManager(FieldSamplerScene* scene)
- : mScene(scene)
- , mFieldSamplerGroupsFilteringChanged(true)
-{
- mWeightedCallback = NULL;
-}
-
-
-PX_INLINE void FieldSamplerManager::addFieldSamplerToQuery(FieldSamplerWrapper* fieldSamplerWrapper, FieldSamplerQuery* query)
-{
- if (query->addFieldSampler(fieldSamplerWrapper))
- {
- fieldSamplerWrapper->mQueryRefCount += 1;
- }
-}
-
-void FieldSamplerManager::addAllFieldSamplersToQuery(FieldSamplerQuery* query) const
-{
- for (uint32_t i = 0; i < mFieldSamplerWrapperList.getSize(); ++i)
- {
- addFieldSamplerToQuery(static_cast<FieldSamplerWrapper*>(mFieldSamplerWrapperList.getResource(i)), query);
- }
-}
-
-void FieldSamplerManager::submitTasks()
-{
- if (mFieldSamplerGroupsFilteringChanged)
- {
- mFieldSamplerGroupsFilteringChanged = false;
-
- //clear queryRefCounts
- for (uint32_t i = 0; i < mFieldSamplerWrapperList.getSize(); ++i)
- {
- FieldSamplerWrapper* fieldSamplerWrapper = static_cast<FieldSamplerWrapper*>(mFieldSamplerWrapperList.getResource(i));
- fieldSamplerWrapper->mQueryRefCount = 0;
- }
-
- //rebuild all connection based on changed collision checking
- for (uint32_t i = 0; i < mFieldSamplerQueryList.getSize(); ++i)
- {
- FieldSamplerQuery* query = DYNAMIC_CAST(FieldSamplerQuery*)(mFieldSamplerQueryList.getResource(i));
- query->clearAllFieldSamplers();
- addAllFieldSamplersToQuery(query);
- }
- }
-
- for (uint32_t i = 0; i < mFieldSamplerQueryList.getSize(); ++i)
- {
- FieldSamplerQuery* query = DYNAMIC_CAST(FieldSamplerQuery*)(mFieldSamplerQueryList.getResource(i));
- query->submitTasks();
- }
-}
-
-void FieldSamplerManager::setTaskDependencies()
-{
- for (uint32_t i = 0; i < mFieldSamplerQueryList.getSize(); ++i)
- {
- FieldSamplerQuery* query = DYNAMIC_CAST(FieldSamplerQuery*)(mFieldSamplerQueryList.getResource(i));
- query->setTaskDependencies();
- }
-
- //update
- for (uint32_t i = 0; i < mFieldBoundaryWrapperList.getSize(); ++i)
- {
- FieldBoundaryWrapper* wrapper = DYNAMIC_CAST(FieldBoundaryWrapper*)(mFieldBoundaryWrapperList.getResource(i));
- wrapper->update();
- }
- for (uint32_t i = 0; i < mFieldSamplerWrapperList.getSize(); ++i)
- {
- FieldSamplerWrapper* wrapper = DYNAMIC_CAST(FieldSamplerWrapper*)(mFieldSamplerWrapperList.getResource(i));
- wrapper->update();
- }
- for (uint32_t i = 0; i < mFieldSamplerSceneWrapperList.getSize(); ++i)
- {
- FieldSamplerSceneWrapper* wrapper = DYNAMIC_CAST(FieldSamplerSceneWrapper*)(mFieldSamplerSceneWrapperList.getResource(i));
- wrapper->update();
- }
- for (uint32_t i = 0; i < mFieldSamplerQueryList.getSize(); ++i)
- {
- FieldSamplerQuery* query = DYNAMIC_CAST(FieldSamplerQuery*)(mFieldSamplerQueryList.getResource(i));
- query->update();
- }
-
- //postUpdate
- for (uint32_t i = 0; i < mFieldSamplerSceneWrapperList.getSize(); ++i)
- {
- FieldSamplerSceneWrapper* wrapper = DYNAMIC_CAST(FieldSamplerSceneWrapper*)(mFieldSamplerSceneWrapperList.getResource(i));
- wrapper->postUpdate();
- }
-}
-
-void FieldSamplerManager::fetchResults()
-{
- for (uint32_t i = 0; i < mFieldSamplerQueryList.getSize(); ++i)
- {
- FieldSamplerQuery* query = DYNAMIC_CAST(FieldSamplerQuery*)(mFieldSamplerQueryList.getResource(i));
- query->fetchResults();
- }
-}
-
-
-FieldSamplerQueryIntl* FieldSamplerManager::createFieldSamplerQuery(const FieldSamplerQueryDescIntl& desc)
-{
- FieldSamplerQuery* query = allocateFieldSamplerQuery(desc);
- if (query)
- {
- addAllFieldSamplersToQuery(query);
- }
- return query;
-}
-
-void FieldSamplerManager::registerFieldSampler(FieldSamplerIntl* fieldSampler, const FieldSamplerDescIntl& fieldSamplerDesc, FieldSamplerSceneIntl* fieldSamplerScene)
-{
- FieldSamplerSceneWrapper* fieldSamplerSceneWrapper = NULL;
- //find FieldSamplerSceneWrapper
- for (uint32_t i = 0; i < mFieldSamplerSceneWrapperList.getSize(); ++i)
- {
- FieldSamplerSceneWrapper* wrapper = DYNAMIC_CAST(FieldSamplerSceneWrapper*)(mFieldSamplerSceneWrapperList.getResource(i));
- if (wrapper->getInternalFieldSamplerScene() == fieldSamplerScene)
- {
- fieldSamplerSceneWrapper = wrapper;
- break;
- }
- }
- if (fieldSamplerSceneWrapper == NULL)
- {
- fieldSamplerSceneWrapper = allocateFieldSamplerSceneWrapper(fieldSamplerScene);
- }
- PX_ASSERT(fieldSamplerSceneWrapper != NULL);
-
- FieldSamplerWrapper* fieldSamplerWrapper = allocateFieldSamplerWrapper(fieldSampler, fieldSamplerDesc, fieldSamplerSceneWrapper);
- PX_ASSERT(fieldSamplerWrapper != NULL);
-
- // add all mFieldBoundaryWrapperList
- for (uint32_t i = 0; i < mFieldBoundaryWrapperList.getSize(); ++i)
- {
- FieldBoundaryWrapper* wrapper = DYNAMIC_CAST(FieldBoundaryWrapper*)(mFieldBoundaryWrapperList.getResource(i));
- fieldSamplerWrapper->addFieldBoundary(wrapper);
- }
-
- for (uint32_t i = 0; i < mFieldSamplerQueryList.getSize(); ++i)
- {
- FieldSamplerQuery* query = DYNAMIC_CAST(FieldSamplerQuery*)(mFieldSamplerQueryList.getResource(i));
- addFieldSamplerToQuery(fieldSamplerWrapper, query);
- }
-}
-
-void FieldSamplerManager::unregisterFieldSampler(FieldSamplerIntl* fieldSampler)
-{
- FieldSamplerWrapper* fieldSamplerWrapper = NULL;
- //find FieldSamplerWrapper
- for (uint32_t i = 0; i < mFieldSamplerWrapperList.getSize(); ++i)
- {
- FieldSamplerWrapper* wrapper = static_cast<FieldSamplerWrapper*>(mFieldSamplerWrapperList.getResource(i));
- if (wrapper->getInternalFieldSampler() == fieldSampler)
- {
- fieldSamplerWrapper = wrapper;
- break;
- }
- }
- if (fieldSamplerWrapper != NULL)
- {
- for (uint32_t i = 0; i < mFieldSamplerQueryList.getSize(); ++i)
- {
- FieldSamplerQuery* query = DYNAMIC_CAST(FieldSamplerQuery*)(mFieldSamplerQueryList.getResource(i));
- query->removeFieldSampler(fieldSamplerWrapper);
- }
- fieldSamplerWrapper->release();
- }
-}
-
-void FieldSamplerManager::registerFieldBoundary(FieldBoundaryIntl* fieldBoundary, const FieldBoundaryDescIntl& fieldBoundaryDesc)
-{
- FieldBoundaryWrapper* fieldBoundaryWrapper = PX_NEW(FieldBoundaryWrapper)(mFieldBoundaryWrapperList, this, fieldBoundary, fieldBoundaryDesc);
- if (fieldBoundaryWrapper)
- {
- for (uint32_t i = 0; i < mFieldSamplerWrapperList.getSize(); ++i)
- {
- static_cast<FieldSamplerWrapper*>(mFieldSamplerWrapperList.getResource(i))->addFieldBoundary(fieldBoundaryWrapper);
- }
- }
-}
-void FieldSamplerManager::unregisterFieldBoundary(FieldBoundaryIntl* fieldBoundary)
-{
- FieldBoundaryWrapper* fieldBoundaryWrapper = 0;
- for (uint32_t i = 0; i < mFieldBoundaryWrapperList.getSize(); ++i)
- {
- FieldBoundaryWrapper* wrapper = static_cast<FieldBoundaryWrapper*>(mFieldBoundaryWrapperList.getResource(i));
- if (wrapper->getInternalFieldBoundary() == fieldBoundary)
- {
- fieldBoundaryWrapper = wrapper;
- break;
- }
- }
- if (fieldBoundaryWrapper != 0)
- {
- for (uint32_t i = 0; i < mFieldSamplerWrapperList.getSize(); ++i)
- {
- static_cast<FieldSamplerWrapper*>(mFieldSamplerWrapperList.getResource(i))->removeFieldBoundary(fieldBoundaryWrapper);
- }
- fieldBoundaryWrapper->release();
- }
-}
-
-void FieldSamplerManager::registerUnhandledParticleSystem(physx::PxActor* actor)
-{
- if (!isUnhandledParticleSystem(actor))
- {
- mUnhandledParticleSystems.pushBack(actor);
- }
-}
-
-void FieldSamplerManager::unregisterUnhandledParticleSystem(physx::PxActor* actor)
-{
- mUnhandledParticleSystems.findAndReplaceWithLast(actor);
-}
-
-bool FieldSamplerManager::isUnhandledParticleSystem(physx::PxActor* actor)
-{
- for (uint32_t i = 0; i < mUnhandledParticleSystems.size(); i++)
- if (mUnhandledParticleSystems[i] == actor)
- {
- return true;
- }
- return false;
-}
-
-bool FieldSamplerManager::getFieldSamplerGroupsFiltering(const PxFilterData &o1,const PxFilterData &o2,float &weight) const
-{
- bool ret = true;
-
- weight = 1.0f;
- if ( mScene )
- {
- if ( mWeightedCallback )
- {
- ret = mWeightedCallback->fieldSamplerWeightedCollisionFilter(o1,o2,weight);
- }
- else
- {
- physx::PxScene *scene = mScene->getModulePhysXScene();
- scene->lockRead(__FILE__,__LINE__);
- physx::PxSimulationFilterShader shader = scene->getFilterShader();
- scene->unlockRead();
- if ( shader )
- {
- physx::PxFilterObjectAttributes atr0 = 0;
- physx::PxFilterObjectAttributes atr1 = 0;
- physx::PxPairFlags pairFlags;
- physx::PxFilterFlags result = (*shader)(atr0,o1,atr1,o2,pairFlags,NULL,0);
- if ( result & (physx::PxFilterFlag::eKILL | physx::PxFilterFlag::eSUPPRESS) )
- {
- ret = false;
- }
- }
- }
- }
- return ret;
-}
-
-
-
-
-/******************************** CPU Version ********************************/
-
-FieldSamplerQuery* FieldSamplerManagerCPU::allocateFieldSamplerQuery(const FieldSamplerQueryDescIntl& desc)
-{
- return PX_NEW(FieldSamplerQueryCPU)(desc, mFieldSamplerQueryList, this);
-}
-FieldSamplerSceneWrapper* FieldSamplerManagerCPU::allocateFieldSamplerSceneWrapper(FieldSamplerSceneIntl* fieldSamplerScene)
-{
- return PX_NEW(FieldSamplerSceneWrapperCPU)(mFieldSamplerSceneWrapperList, this, fieldSamplerScene);
-}
-FieldSamplerWrapper* FieldSamplerManagerCPU::allocateFieldSamplerWrapper(FieldSamplerIntl* fieldSampler, const FieldSamplerDescIntl& fieldSamplerDesc, FieldSamplerSceneWrapper* fieldSamplerSceneWrapper)
-{
- return PX_NEW(FieldSamplerWrapperCPU)(mFieldSamplerWrapperList, this, fieldSampler, fieldSamplerDesc, fieldSamplerSceneWrapper);
-}
-
-/******************************** GPU Version ********************************/
-
-#if APEX_CUDA_SUPPORT
-
-FieldSamplerQuery* FieldSamplerManagerGPU::allocateFieldSamplerQuery(const FieldSamplerQueryDescIntl& desc)
-{
- return PX_NEW(FieldSamplerQueryGPU)(desc, mFieldSamplerQueryList, this);
-}
-FieldSamplerSceneWrapper* FieldSamplerManagerGPU::allocateFieldSamplerSceneWrapper(FieldSamplerSceneIntl* fieldSamplerScene)
-{
- return PX_NEW(FieldSamplerSceneWrapperGPU)(mFieldSamplerSceneWrapperList, this, fieldSamplerScene);
-}
-FieldSamplerWrapper* FieldSamplerManagerGPU::allocateFieldSamplerWrapper(FieldSamplerIntl* fieldSampler, const FieldSamplerDescIntl& fieldSamplerDesc, FieldSamplerSceneWrapper* fieldSamplerSceneWrapper)
-{
- return PX_NEW(FieldSamplerWrapperGPU)(mFieldSamplerWrapperList, this, fieldSampler, fieldSamplerDesc, fieldSamplerSceneWrapper);
-}
-
-#endif // APEX_CUDA_SUPPORT
-
-}
-} // end namespace nvidia::apex
-
-
diff --git a/APEX_1.4/module/fieldsampler/src/FieldSamplerPhysXMonitor.cpp b/APEX_1.4/module/fieldsampler/src/FieldSamplerPhysXMonitor.cpp
deleted file mode 100644
index e75c8700..00000000
--- a/APEX_1.4/module/fieldsampler/src/FieldSamplerPhysXMonitor.cpp
+++ /dev/null
@@ -1,354 +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"
-
-#if PX_PHYSICS_VERSION_MAJOR == 3
-
-#include "ScopedPhysXLock.h"
-
-#include "PsSort.h"
-#include "FieldSamplerPhysXMonitor.h"
-#include "FieldSamplerScene.h"
-#include "FieldSamplerManager.h"
-#include "FieldSamplerQueryIntl.h"
-
-#include "extensions/PxShapeExt.h"
-
-namespace nvidia
-{
-namespace fieldsampler
-{
-
- using namespace physx;
-
-#pragma warning(disable: 4355) // 'this' : used in base member initializer list
-
-FieldSamplerPhysXMonitor::FieldSamplerPhysXMonitor(FieldSamplerScene& scene)
- : mFieldSamplerScene(&scene)
- , mNumPS(0)
- , mNumRB(0)
- , mEnable(false)
- , mTaskRunAfterActorUpdate(*this)
-{
- mFilterData.setToDefault();
-
- mScene = mFieldSamplerScene->getModulePhysXScene();
- mParams = static_cast<FieldSamplerPhysXMonitorParams*>(GetInternalApexSDK()->getParameterizedTraits()->createNvParameterized(FieldSamplerPhysXMonitorParams::staticClassName()));
- mFieldSamplerManager = DYNAMIC_CAST(FieldSamplerManager*)(mFieldSamplerScene->getManager());
-
- mRBIndex.reserve(mParams->maxRBCount);
- mParticleSystems.resize(mParams->maxPSCount);
-
- mPSOutField.resize(mParams->maxParticleCount);
- mOutVelocities.resize(mParams->maxParticleCount);
- mOutIndices.resize(mParams->maxParticleCount);
-
- mRBOutField.resize(mParams->maxRBCount);
-
- mRBActors.resize(mParams->maxRBCount);
-}
-
-
-FieldSamplerPhysXMonitor::~FieldSamplerPhysXMonitor()
-{
- for (uint32_t i = 0; i < mPSFieldSamplerQuery.size(); i++)
- {
- if (mPSFieldSamplerQuery[i])
- {
- mPSFieldSamplerQuery[i]->release();
- }
- }
- for (uint32_t i = 0; i < mRBFieldSamplerQuery.size(); i++)
- {
- if (mRBFieldSamplerQuery[i])
- {
- mRBFieldSamplerQuery[i]->release();
- }
- }
- if(mParams)
- {
- mParams->destroy();
- }
-}
-
-
-void FieldSamplerPhysXMonitor::setPhysXScene(PxScene* scene)
-{
- mScene = scene;
-}
-
-
-void FieldSamplerPhysXMonitor::getParticles(uint32_t taskId)
-{
- SCOPED_PHYSX_LOCK_READ(&mFieldSamplerScene->getApexScene());
- float deltaTime = mFieldSamplerScene->getApexScene().getPhysXSimulateTime();
- mPCount = 0;
- mNumPS = mScene->getActors(physx::PxActorTypeFlag::ePARTICLE_SYSTEM, &mParticleSystems[0], mParams->maxPSCount);
- for(uint32_t i = 0; i < mNumPS; i++)
- if (!mFieldSamplerManager->isUnhandledParticleSystem(mParticleSystems[i]) && mParticleSystems[i]->is<PxParticleBase>())
- {
- if (mPSFieldSamplerQuery.size() == i)
- {
- FieldSamplerQueryDescIntl queryDesc;
- queryDesc.maxCount = mParams->maxParticleCount;
- queryDesc.samplerFilterData = mFilterData;
- mPSFieldSamplerQuery.pushBack( mFieldSamplerManager->createFieldSamplerQuery(queryDesc) );
- mPSFieldSamplerTaskID.pushBack(0);
- mParticleReadData.pushBack(0);
- mPSMass.pushBack(0.f);
- }
-
- PxParticleSystem* particleSystem = DYNAMIC_CAST(PxParticleSystem*)((mParticleSystems[i]));
- mParticleReadData[i] = particleSystem->lockParticleReadData();
- uint32_t numParticles;
- if (mParticleReadData[i])
- {
- numParticles = mParticleReadData[i]->validParticleRange;
- if(mPCount + numParticles >= mParams->maxParticleCount) break;
-
- FieldSamplerQueryDataIntl queryData;
- queryData.timeStep = deltaTime;
- queryData.count = numParticles;
- queryData.isDataOnDevice = false;
-
- //hack for PhysX particle stride calculation
- physx::PxStrideIterator<const PxVec3> positionIt(mParticleReadData[i]->positionBuffer);
-#ifdef WIN64
- queryData.positionStrideBytes = (uint32_t)(-(int64_t)&*positionIt + (int64_t)&*(++positionIt));
-#else
- queryData.positionStrideBytes = (uint32_t)(-(int32_t)&*positionIt + (int32_t)&*(++positionIt));
-#endif
- queryData.velocityStrideBytes = queryData.positionStrideBytes;
- queryData.massStrideBytes = 0;
- queryData.pmaInPosition = (float*)&*(mParticleReadData[i]->positionBuffer);
- queryData.pmaInVelocity = (float*)&*(mParticleReadData[i]->velocityBuffer);
- queryData.pmaInIndices = 0;
- mPSMass[i] = particleSystem->getParticleMass();
- queryData.pmaInMass = &mPSMass[i];
- queryData.pmaOutField = &mPSOutField[mPCount];
- mPSFieldSamplerTaskID[i] = mPSFieldSamplerQuery[i]->submitFieldSamplerQuery(queryData, taskId);
-
- mPCount += numParticles;
- }
- }
-}
-
-
-void FieldSamplerPhysXMonitor::updateParticles()
-{
- uint32_t pCount = 0;
- SCOPED_PHYSX_LOCK_WRITE(mFieldSamplerScene->getApexScene().getPhysXScene());
- for(uint32_t i = 0; i < mNumPS; i++)
- if (!mFieldSamplerManager->isUnhandledParticleSystem(mParticleSystems[i]))
- {
- PxParticleSystem* particleSystem = DYNAMIC_CAST(PxParticleSystem*)((mParticleSystems[i]));
- uint32_t numParticles = PxMin(mParticleReadData[i]->validParticleRange, mParams->maxParticleCount);
-
- uint32_t numUpdates = 0;
-
- if (numParticles > 0)
- {
- for (uint32_t w = 0; w <= (mParticleReadData[i]->validParticleRange-1) >> 5; w++)
- {
- for (uint32_t b = mParticleReadData[i]->validParticleBitmap[w]; b; b &= b-1)
- {
- uint32_t index = (w << 5 | shdfnd::lowestSetBit(b));
-
- PxVec3 diffVel = mPSOutField[pCount + index].getXYZ();
- if (!diffVel.isZero())
- {
- const PxVec3& sourceVelocity = mParticleReadData[i]->velocityBuffer[index];
- mOutVelocities[numUpdates] = sourceVelocity + diffVel;
- mOutIndices[numUpdates] = index;
- numUpdates++;
- }
- }
- }
- }
- pCount += numParticles;
- // return ownership of the buffers back to the SDK
- mParticleReadData[i]->unlock();
-
- if(pCount <= mParams->maxParticleCount && numUpdates > 0)
- {
- physx::PxStrideIterator<uint32_t> indices(&mOutIndices[0]);
- physx::PxStrideIterator<PxVec3> outVelocities(&mOutVelocities[0]);
- particleSystem->setVelocities(numUpdates, indices, outVelocities);
- }
- }
-}
-
-
-void FieldSamplerPhysXMonitor::getRigidBodies(uint32_t taskId)
-{
- SCOPED_PHYSX_LOCK_READ(&mFieldSamplerScene->getApexScene());
- float deltaTime = mFieldSamplerScene->getApexScene().getPhysXSimulateTime();
-
- FieldSamplerQueryDataIntl queryData;
- queryData.timeStep = deltaTime;
- queryData.pmaInIndices = 0;
-
- uint32_t rbCount = mScene->getActors(physx::PxActorTypeFlag::eRIGID_DYNAMIC, &mRBActors[0], mParams->maxRBCount);
- Array<PxShape*> shapes;
- mNumRB = 0;
- mRBIndex.clear();
- float weight = 1.f;
-
- for (uint32_t i = 0; i < rbCount; i++)
- {
- physx::PxRigidDynamic* rb = (physx::PxRigidDynamic*)mRBActors[i];
- if (rb->getRigidBodyFlags() == PxRigidBodyFlag::eKINEMATIC)
- {
- continue;
- }
- const PxVec3& cmPos = rb->getGlobalPose().p;
- const PxVec3& velocity = rb->getLinearVelocity();
- const PxVec3& rotation = rb->getAngularVelocity();
- float mass = rb->getMass();
-
- const uint32_t numShapes = rb->getNbShapes();
- shapes.resize(numShapes);
- if (numShapes == 0)
- {
- continue;
- }
- rb->getShapes(&shapes[0], numShapes);
- for (uint32_t j = 0; j < numShapes && mNumRB < mParams->maxRBCount; j++)
- {
- PxFilterData filterData = shapes[j]->getQueryFilterData();
- if (mFieldSamplerManager->getFieldSamplerGroupsFiltering(mFilterData, filterData, weight))
- {
- PxFilterData* current = mRBFilterData.find(filterData);
- if (current == mRBFilterData.end())
- {
- mRBFilterData.pushBack(filterData);
- current = &mRBFilterData.back();
- FieldSamplerQueryDescIntl queryDesc;
- queryDesc.maxCount = mParams->maxParticleCount;
- queryDesc.samplerFilterData = filterData;
- mRBFieldSamplerQuery.pushBack( mFieldSamplerManager->createFieldSamplerQuery(queryDesc) );
- }
-
- ShapeData* sd = PX_NEW(ShapeData)();
- sd->fdIndex = (uint32_t)(current - &mRBFilterData[0]);
- sd->rbIndex = i;
- sd->mass = mass / numShapes;
- sd->pos = PxShapeExt::getWorldBounds(*shapes[j], *rb).getCenter();
- sd->vel = velocity + rotation.cross(sd->pos - cmPos);
- mRBIndex.pushBack(sd);
- ++mNumRB;
- }
- }
- }
-
- if (mNumRB == 0)
- {
- return;
- }
-
-
- sort(&mRBIndex[0], mNumRB, ShapeData::sortPredicate);
-
- mRBInPosition.resize(mNumRB);
- mRBInVelocity.resize(mNumRB);
-
- uint32_t current(mRBIndex[0]->fdIndex);
- uint32_t currentCount = 0;
- uint32_t fdCount = 0;
- for (uint32_t i = 0; i <= mNumRB; i++)
- {
- if (i == mNumRB || current != mRBIndex[i]->fdIndex)
- {
- queryData.count = currentCount;
- queryData.isDataOnDevice = false;
- queryData.massStrideBytes = sizeof(PxVec4);
- queryData.positionStrideBytes = sizeof(PxVec4);
- queryData.velocityStrideBytes = queryData.positionStrideBytes;
-
- queryData.pmaInPosition = (float*)(&mRBInPosition[fdCount]);
- queryData.pmaInVelocity = (float*)(&mRBInVelocity[fdCount]);
- queryData.pmaInMass = &(mRBInPosition[fdCount].w);
- queryData.pmaOutField = &mRBOutField[fdCount];
-
- mRBFieldSamplerQuery[current]->submitFieldSamplerQuery(queryData, taskId);
-
- fdCount += currentCount;
- if (i != mNumRB)
- {
- current = mRBIndex[i]->fdIndex;
- currentCount = 1;
- }
- }
- else
- {
- currentCount++;
- }
- if (i < mNumRB)
- {
- mRBInPosition[i] = PxVec4 (mRBIndex[i]->pos, mRBIndex[i]->mass);
- mRBInVelocity[i] = PxVec4 (mRBIndex[i]->vel, 0.f);
- }
- }
-}
-
-void FieldSamplerPhysXMonitor::updateRigidBodies()
-{
- SCOPED_PHYSX_LOCK_WRITE(&mFieldSamplerScene->getApexScene());
-
- for(uint32_t i = 0; i < mNumRB; i++)
- {
- physx::PxRigidDynamic* rb = (physx::PxRigidDynamic*)mRBActors[mRBIndex[i]->rbIndex];
- const PxVec3 velocity = mRBOutField[i].getXYZ();
- const PxVec3 rotation = mRBOutField[i].getXYZ().cross(mRBInPosition[i].getXYZ() - rb->getGlobalPose().p);
- if (!velocity.isZero() || !rotation.isZero())
- {
- rb->setLinearVelocity(rb->getLinearVelocity() + velocity);
- rb->setAngularVelocity(rb->getAngularVelocity() + rotation);
- }
-
- PX_DELETE(mRBIndex[i]);
- }
-}
-
-
-void FieldSamplerPhysXMonitor::update()
-{
- PxTaskManager* tm = mFieldSamplerScene->getApexScene().getTaskManager();
- uint32_t taskId = tm->getNamedTask(FSST_PHYSX_MONITOR_LOAD);
- if(mScene)
- {
- getParticles(taskId);
-
- getRigidBodies(taskId);
-
- //getCloth(task);
- }
- if(mNumPS > 0 || mNumRB > 0)
- {
- tm->submitNamedTask(&mTaskRunAfterActorUpdate, FSST_PHYSX_MONITOR_UPDATE);
- mTaskRunAfterActorUpdate.startAfter(tm->getNamedTask(FSST_PHYSX_MONITOR_FETCH));
- mTaskRunAfterActorUpdate.finishBefore(tm->getNamedTask(AST_PHYSX_SIMULATE));
- }
-}
-
-void FieldSamplerPhysXMonitor::updatePhysX()
-{
- updateParticles();
- updateRigidBodies();
-}
-
-
-}
-} // end namespace nvidia::apex
-
-#endif
-
diff --git a/APEX_1.4/module/fieldsampler/src/FieldSamplerQuery.cpp b/APEX_1.4/module/fieldsampler/src/FieldSamplerQuery.cpp
deleted file mode 100644
index bada10fc..00000000
--- a/APEX_1.4/module/fieldsampler/src/FieldSamplerQuery.cpp
+++ /dev/null
@@ -1,876 +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 "Apex.h"
-#include "FieldSamplerQuery.h"
-#include "FieldSamplerManager.h"
-#include "FieldSamplerWrapper.h"
-#include "FieldSamplerSceneWrapper.h"
-#include "FieldBoundaryWrapper.h"
-
-#include "SceneIntl.h"
-
-#if APEX_CUDA_SUPPORT
-#include "PxGpuTask.h"
-#endif
-
-#include "FieldSamplerCommon.h"
-
-
-namespace nvidia
-{
-namespace fieldsampler
-{
-
-
-FieldSamplerQuery::FieldSamplerQuery(const FieldSamplerQueryDescIntl& desc, ResourceList& list, FieldSamplerManager* manager)
- : mManager(manager)
- , mQueryDesc(desc)
- , mAccumVelocity(manager->getApexScene(), PX_ALLOC_INFO("mAccumVelocity", PARTICLES))
- , mOnStartCallback(NULL)
- , mOnFinishCallback(NULL)
-{
- list.add(*this);
-}
-
-void FieldSamplerQuery::release()
-{
- if (mInRelease)
- {
- return;
- }
- mInRelease = true;
- destroy();
-}
-
-void FieldSamplerQuery::destroy()
-{
- delete this;
-}
-
-
-FieldSamplerQuery::SceneInfo* FieldSamplerQuery::findSceneInfo(FieldSamplerSceneWrapper* sceneWrapper) const
-{
- for (uint32_t i = 0; i < mSceneList.getSize(); ++i)
- {
- SceneInfo* sceneInfo = DYNAMIC_CAST(SceneInfo*)(mSceneList.getResource(i));
- if (sceneInfo->getSceneWrapper() == sceneWrapper)
- {
- return sceneInfo;
- }
- }
- return NULL;
-}
-
-
-bool FieldSamplerQuery::addFieldSampler(FieldSamplerWrapper* fieldSamplerWrapper)
-{
- const FieldSamplerDescIntl& fieldSamplerDesc = fieldSamplerWrapper->getInternalFieldSamplerDesc();
- float multiplier = 1.0f;
- bool result = mManager->getFieldSamplerGroupsFiltering(mQueryDesc.samplerFilterData, fieldSamplerDesc.samplerFilterData, multiplier);
- if (result)
- {
- FieldSamplerSceneWrapper* sceneWrapper = fieldSamplerWrapper->getFieldSamplerSceneWrapper();
- SceneInfo* sceneInfo = findSceneInfo(sceneWrapper);
- if (sceneInfo == NULL)
- {
- sceneInfo = createSceneInfo(sceneWrapper);
- }
- sceneInfo->addFieldSampler(fieldSamplerWrapper, multiplier);
- }
- return result;
-}
-
-bool FieldSamplerQuery::removeFieldSampler(FieldSamplerWrapper* fieldSamplerWrapper)
-{
- FieldSamplerSceneWrapper* sceneWrapper = fieldSamplerWrapper->getFieldSamplerSceneWrapper();
- SceneInfo* sceneInfo = findSceneInfo(sceneWrapper);
- return (sceneInfo != NULL) ? sceneInfo->removeFieldSampler(fieldSamplerWrapper) : false;
-}
-
-void FieldSamplerQuery::clearAllFieldSamplers()
-{
- for (uint32_t i = 0; i < mSceneList.getSize(); ++i)
- {
- SceneInfo* sceneInfo = DYNAMIC_CAST(SceneInfo*)(mSceneList.getResource(i));
- sceneInfo->clearAllFieldSamplers();
- }
-}
-
-void FieldSamplerQuery::submitFieldSamplerQuery(const FieldSamplerQueryDataIntl& data, PxTask* task, PxTask* readyTask)
-{
- PX_UNUSED(readyTask);
- for (uint32_t i = 0; i < mSceneList.getSize(); ++i)
- {
- SceneInfo* sceneInfo = DYNAMIC_CAST(SceneInfo*)(mSceneList.getResource(i));
- FieldSamplerSceneIntl* niFieldSamplerScene = sceneInfo->getSceneWrapper()->getInternalFieldSamplerScene();
- const PxTask* fieldSamplerReadyTask = niFieldSamplerScene->onSubmitFieldSamplerQuery(data, readyTask);
- if (fieldSamplerReadyTask != 0)
- {
- task->startAfter(fieldSamplerReadyTask->getTaskID());
- }
- }
-}
-
-void FieldSamplerQuery::update()
-{
- mPrimarySceneList.clear();
- mSecondarySceneList.clear();
-
- for (uint32_t i = 0; i < mSceneList.getSize(); ++i)
- {
- SceneInfo* sceneInfo = DYNAMIC_CAST(SceneInfo*)(mSceneList.getResource(i));
- sceneInfo->update();
-
- if (sceneInfo->getEnabledFieldSamplerCount() > 0 && (sceneInfo->getSceneWrapper()->getInternalFieldSamplerScene() != mQueryDesc.ownerFieldSamplerScene))
- {
- ((sceneInfo->getSceneWrapper()->getInternalFieldSamplerSceneDesc().isPrimary) ? mPrimarySceneList : mSecondarySceneList).pushBack(sceneInfo);
- }
- }
-}
-
-bool FieldSamplerQuery::SceneInfo::update()
-{
- mEnabledFieldSamplerCount = 0;
- for (uint32_t i = 0; i < mFieldSamplerArray.size(); ++i)
- {
- if (mFieldSamplerArray[i].mFieldSamplerWrapper->isEnabled())
- {
- ++mEnabledFieldSamplerCount;
- }
- if (mFieldSamplerArray[i].mFieldSamplerWrapper->isEnabledChanged())
- {
- mFieldSamplerArrayChanged = true;
- }
- }
-
- if (mFieldSamplerArrayChanged)
- {
- mFieldSamplerArrayChanged = false;
- return true;
- }
- return false;
-}
-/******************************** CPU Version ********************************/
-class TaskExecute : public PxTask, public UserAllocated
-{
-public:
- TaskExecute(FieldSamplerQueryCPU* query) : mQuery(query) {}
-
- const char* getName() const
- {
- return "FieldSamplerQueryCPU::TaskExecute";
- }
- void run()
- {
- mQuery->execute();
- }
-
-protected:
- FieldSamplerQueryCPU* mQuery;
-};
-
-FieldSamplerQueryCPU::FieldSamplerQueryCPU(const FieldSamplerQueryDescIntl& desc, ResourceList& list, FieldSamplerManager* manager)
- : FieldSamplerQuery(desc, list, manager)
-{
- mTaskExecute = PX_NEW(TaskExecute)(this);
-
- mExecuteCount = 256;
-}
-
-FieldSamplerQueryCPU::~FieldSamplerQueryCPU()
-{
- delete mTaskExecute;
-}
-
-PxTaskID FieldSamplerQueryCPU::submitFieldSamplerQuery(const FieldSamplerQueryDataIntl& data, PxTaskID taskID)
-{
- PX_ASSERT(data.isDataOnDevice == false);
- PX_ASSERT(data.count <= mQueryDesc.maxCount);
- if (data.count == 0)
- {
- return taskID;
- }
- mQueryData = data;
-
- mResultField.resize(mExecuteCount);
- mWeights.resize(mExecuteCount);
- mAccumVelocity.reserve(mQueryDesc.maxCount);
-
- PxTaskManager* tm = mManager->getApexScene().getTaskManager();
- tm->submitUnnamedTask(*mTaskExecute);
-
- FieldSamplerQuery::submitFieldSamplerQuery(data, mTaskExecute, NULL);
-
- mTaskExecute->finishBefore(taskID);
- return mTaskExecute->getTaskID();
-}
-
-void FieldSamplerQueryCPU::execute()
-{
- if (mOnStartCallback)
- {
- (*mOnStartCallback)(NULL);
- }
-
- FieldSamplerIntl::ExecuteData executeData;
-
- executeData.position = mQueryData.pmaInPosition;
- executeData.velocity = mQueryData.pmaInVelocity;
- executeData.mass = mQueryData.pmaInMass;// + massOffset;
- executeData.resultField = mResultField.begin();
- executeData.positionStride = mQueryData.positionStrideBytes;
- executeData.velocityStride = mQueryData.velocityStrideBytes;
- executeData.massStride = mQueryData.massStrideBytes;
- executeData.indicesMask = 0;
-
- uint32_t beginIndex;
- uint32_t* indices = &beginIndex;
- if (mQueryData.pmaInIndices)
- {
- indices = mQueryData.pmaInIndices;
- executeData.indicesMask = ~executeData.indicesMask;
- }
-
- for (uint32_t executeOffset = 0; executeOffset < mQueryData.count; executeOffset += mExecuteCount)
- {
- const uint32_t positionStride = mQueryData.positionStrideBytes / 4;
- const uint32_t velocityStride = mQueryData.velocityStrideBytes / 4;
- const uint32_t massStride = mQueryData.massStrideBytes / 4;
- //const uint32_t offset = executeOffset * stride;
- //const uint32_t massOffset = executeOffset * massStride;
-
- beginIndex = executeOffset;
- executeData.count = PxMin(mExecuteCount, mQueryData.count - executeOffset);
- executeData.indices = indices + (executeOffset & executeData.indicesMask);
-
- PxVec4* accumField = (PxVec4*)(mQueryData.pmaOutField);
- PxVec4* accumVelocity = mAccumVelocity.getPtr() + executeOffset;
- //clear accum
- for (uint32_t i = 0; i < executeData.count; ++i)
- {
- uint32_t j = executeData.indices[i & executeData.indicesMask] + (i & ~executeData.indicesMask);
- accumField[j] = PxVec4(0.0f);
- accumVelocity[i] = PxVec4(0.0f);
- }
- for (uint32_t sceneIdx = 0; sceneIdx < mPrimarySceneList.size(); ++sceneIdx)
- {
- executeScene(mPrimarySceneList[sceneIdx], executeData, accumField, accumVelocity, positionStride, velocityStride, massStride);
- }
-
- //setup weights for secondary scenes
- for (uint32_t i = 0; i < executeData.count; ++i)
- {
- uint32_t j = executeData.indices[i & executeData.indicesMask] + (i & ~executeData.indicesMask);
- accumField[j].w = accumVelocity[i].w;
- accumVelocity[i].w = 0.0f;
- }
- for (uint32_t sceneIdx = 0; sceneIdx < mSecondarySceneList.size(); ++sceneIdx)
- {
- executeScene(mSecondarySceneList[sceneIdx], executeData, accumField, accumVelocity, positionStride, velocityStride, massStride);
- }
-
- //compose accum field
- for (uint32_t i = 0; i < executeData.count; ++i)
- {
- uint32_t j = executeData.indices[i & executeData.indicesMask] + (i & ~executeData.indicesMask);
- float blend = accumField[j].w;
- float velW = accumVelocity[i].w;
- float weight = blend + velW * (1 - blend);
- if (weight >= VELOCITY_WEIGHT_THRESHOLD)
- {
- PxVec3 result = accumField[j].getXYZ();
- const PxVec3& velocity = *(PxVec3*)(executeData.velocity + j * velocityStride);
- result += (accumVelocity[i].getXYZ() - weight * velocity);
- accumField[j] = PxVec4(result, 0);
- }
- }
- }
-
- if (mOnFinishCallback)
- {
- (*mOnFinishCallback)(NULL);
- }
-}
-
-void FieldSamplerQueryCPU::executeScene(const SceneInfo* sceneInfo,
- const FieldSamplerIntl::ExecuteData& executeData,
- PxVec4* accumField,
- PxVec4* accumVelocity,
- uint32_t positionStride,
- uint32_t velocityStride,
- uint32_t massStride)
-{
- FieldSamplerExecuteArgs execArgs;
- execArgs.elapsedTime = mQueryData.timeStep;
- execArgs.totalElapsedMS = mManager->getApexScene().getTotalElapsedMS();
-
- const nvidia::Array<FieldSamplerInfo>& fieldSamplerArray = sceneInfo->getFieldSamplerArray();
- for (uint32_t fieldSamplerIdx = 0; fieldSamplerIdx < fieldSamplerArray.size(); ++fieldSamplerIdx)
- {
- const FieldSamplerWrapperCPU* fieldSampler = DYNAMIC_CAST(FieldSamplerWrapperCPU*)(fieldSamplerArray[fieldSamplerIdx].mFieldSamplerWrapper);
- if (fieldSampler->isEnabled())
- {
- const float multiplier = fieldSamplerArray[fieldSamplerIdx].mMultiplier;
- PX_UNUSED(multiplier);
-
- const FieldSamplerDescIntl& desc = fieldSampler->getInternalFieldSamplerDesc();
- if (desc.cpuSimulationSupport)
- {
- const FieldShapeDescIntl& shapeDesc = fieldSampler->getInternalFieldSamplerShape();
- PX_ASSERT(shapeDesc.weight >= 0.0f && shapeDesc.weight <= 1.0f);
-
- for (uint32_t i = 0; i < executeData.count; ++i)
- {
- mWeights[i] = 0;
- }
-
- uint32_t boundaryCount = fieldSampler->getFieldBoundaryCount();
- for (uint32_t boundaryIndex = 0; boundaryIndex < boundaryCount; ++boundaryIndex)
- {
- FieldBoundaryWrapper* fieldBoundaryWrapper = fieldSampler->getFieldBoundaryWrapper(boundaryIndex);
-
- const nvidia::Array<FieldShapeDescIntl>& fieldShapes = fieldBoundaryWrapper->getFieldShapes();
- for (uint32_t shapeIndex = 0; shapeIndex < fieldShapes.size(); ++shapeIndex)
- {
- const FieldShapeDescIntl& boundaryShapeDesc = fieldShapes[shapeIndex];
- PX_ASSERT(boundaryShapeDesc.weight >= 0.0f && boundaryShapeDesc.weight <= 1.0f);
-
- for (uint32_t i = 0; i < executeData.count; ++i)
- {
- uint32_t j = executeData.indices[i & executeData.indicesMask] + (i & ~executeData.indicesMask);
- PxVec3* pos = (PxVec3*)(executeData.position + j * positionStride);
- const float excludeWeight = evalFade(evalDistInShape(boundaryShapeDesc, *pos), 0.0f) * boundaryShapeDesc.weight;
- mWeights[i] = PxMax(mWeights[i], excludeWeight);
- }
- }
- }
-
- for (uint32_t i = 0; i < executeData.count; ++i)
- {
- uint32_t j = executeData.indices[i & executeData.indicesMask] + (i & ~executeData.indicesMask);
- PxVec3* pos = (PxVec3*)(executeData.position + j * positionStride);
- const float includeWeight = evalFade(evalDistInShape(shapeDesc, *pos), desc.boundaryFadePercentage) * shapeDesc.weight;
- const float excludeWeight = mWeights[i];
- mWeights[i] = includeWeight * (1.0f - excludeWeight);
-#if FIELD_SAMPLER_MULTIPLIER == FIELD_SAMPLER_MULTIPLIER_WEIGHT
- mWeights[i] *= multiplier;
-#endif
- }
-
- //execute field
- fieldSampler->getInternalFieldSampler()->executeFieldSampler(executeData);
-
-#if FIELD_SAMPLER_MULTIPLIER == FIELD_SAMPLER_MULTIPLIER_VALUE
- const float multiplier = fieldSamplerArray[fieldSamplerIdx].mMultiplier;
- for (uint32_t i = 0; i < executeData.count; ++i)
- {
- executeData.resultField[i] *= multiplier;
- }
-#endif
-
- //accum field
- switch (desc.type)
- {
- case FieldSamplerTypeIntl::FORCE:
- for (uint32_t i = 0; i < executeData.count; ++i)
- {
- uint32_t j = executeData.indices[i & executeData.indicesMask] + (i & ~executeData.indicesMask);
- execArgs.position = *(PxVec3*)(executeData.position + j * positionStride);
- execArgs.velocity = *(PxVec3*)(executeData.velocity + j * velocityStride);
- execArgs.mass = *(executeData.mass + massStride * j);
-
- accumFORCE(execArgs, executeData.resultField[i], mWeights[i], accumField[j], accumVelocity[i]);
- }
- break;
- case FieldSamplerTypeIntl::ACCELERATION:
- for (uint32_t i = 0; i < executeData.count; ++i)
- {
- uint32_t j = executeData.indices[i & executeData.indicesMask] + (i & ~executeData.indicesMask);
- execArgs.position = *(PxVec3*)(executeData.position + j * positionStride);
- execArgs.velocity = *(PxVec3*)(executeData.velocity + j * velocityStride);
- execArgs.mass = *(executeData.mass + massStride * j);
-
- accumACCELERATION(execArgs, executeData.resultField[i], mWeights[i], accumField[j], accumVelocity[i]);
- }
- break;
- case FieldSamplerTypeIntl::VELOCITY_DRAG:
- for (uint32_t i = 0; i < executeData.count; ++i)
- {
- uint32_t j = executeData.indices[i & executeData.indicesMask] + (i & ~executeData.indicesMask);
- execArgs.position = *(PxVec3*)(executeData.position + j * positionStride);
- execArgs.velocity = *(PxVec3*)(executeData.velocity + j * velocityStride);
- execArgs.mass = *(executeData.mass + massStride * j);
-
- accumVELOCITY_DRAG(execArgs, desc.dragCoeff, executeData.resultField[i], mWeights[i], accumField[j], accumVelocity[i]);
- }
- break;
- case FieldSamplerTypeIntl::VELOCITY_DIRECT:
- for (uint32_t i = 0; i < executeData.count; ++i)
- {
- uint32_t j = executeData.indices[i & executeData.indicesMask] + (i & ~executeData.indicesMask);
- execArgs.position = *(PxVec3*)(executeData.position + j * positionStride);
- execArgs.velocity = *(PxVec3*)(executeData.velocity + j * velocityStride);
- execArgs.mass = *(executeData.mass + massStride * j);
-
- accumVELOCITY_DIRECT(execArgs, executeData.resultField[i], mWeights[i], accumField[j], accumVelocity[i]);
- }
- break;
- };
- }
- }
- }
-
-}
-
-
-/******************************** GPU Version ********************************/
-#if APEX_CUDA_SUPPORT
-
-class FieldSamplerQueryLaunchTask : public PxGpuTask, public UserAllocated
-{
-public:
- FieldSamplerQueryLaunchTask(FieldSamplerQueryGPU* query) : mQuery(query) {}
- const char* getName() const
- {
- return "FieldSamplerQueryLaunchTask";
- }
- void run()
- {
- PX_ALWAYS_ASSERT();
- }
- bool launchInstance(CUstream stream, int kernelIndex)
- {
- return mQuery->launch(stream, kernelIndex);
- }
- PxGpuTaskHint::Enum getTaskHint() const
- {
- return PxGpuTaskHint::Kernel;
- }
-
-protected:
- FieldSamplerQueryGPU* mQuery;
-};
-
-class FieldSamplerQueryPrepareTask : public PxTask, public UserAllocated
-{
-public:
- FieldSamplerQueryPrepareTask(FieldSamplerQueryGPU* query) : mQuery(query) {}
-
- const char* getName() const
- {
- return "FieldSamplerQueryPrepareTask";
- }
- void run()
- {
- mQuery->prepare();
- }
-
-protected:
- FieldSamplerQueryGPU* mQuery;
-};
-
-class FieldSamplerQueryCopyTask : public PxGpuTask, public UserAllocated
-{
-public:
- FieldSamplerQueryCopyTask(FieldSamplerQueryGPU* query) : mQuery(query) {}
- const char* getName() const
- {
- return "FieldSamplerQueryCopyTask";
- }
- void run()
- {
- PX_ALWAYS_ASSERT();
- }
- bool launchInstance(CUstream stream, int kernelIndex)
- {
- return mQuery->copy(stream, kernelIndex);
- }
- PxGpuTaskHint::Enum getTaskHint() const
- {
- return PxGpuTaskHint::Kernel;
- }
-
-protected:
- FieldSamplerQueryGPU* mQuery;
-};
-
-class FieldSamplerQueryFetchTask : public PxTask, public UserAllocated
-{
-public:
- FieldSamplerQueryFetchTask(FieldSamplerQueryGPU* query) : mQuery(query) {}
-
- const char* getName() const
- {
- return "FieldSamplerQueryFetchTask";
- }
- void run()
- {
- mQuery->fetch();
- }
-
-protected:
- FieldSamplerQueryGPU* mQuery;
-};
-
-
-FieldSamplerQueryGPU::FieldSamplerQueryGPU(const FieldSamplerQueryDescIntl& desc, ResourceList& list, FieldSamplerManager* manager)
- : FieldSamplerQueryCPU(desc, list, manager)
- , mPositionMass(manager->getApexScene(), PX_ALLOC_INFO("mPositionMass", PARTICLES))
- , mVelocity(manager->getApexScene(), PX_ALLOC_INFO("mVelocity", PARTICLES))
- , mAccumField(manager->getApexScene(), PX_ALLOC_INFO("mAccumField", PARTICLES))
- , mCopyQueue(*manager->getApexScene().getTaskManager()->getGpuDispatcher())
-{
- mTaskLaunch = PX_NEW(FieldSamplerQueryLaunchTask)(this);
- mTaskPrepare = PX_NEW(FieldSamplerQueryPrepareTask)(this);
- mTaskCopy = PX_NEW(FieldSamplerQueryCopyTask)(this);
- mTaskFetch = PX_NEW(FieldSamplerQueryFetchTask)(this);
-}
-
-FieldSamplerQueryGPU::~FieldSamplerQueryGPU()
-{
- PX_DELETE(mTaskFetch);
- PX_DELETE(mTaskCopy);
- PX_DELETE(mTaskPrepare);
- PX_DELETE(mTaskLaunch);
-}
-
-PxTaskID FieldSamplerQueryGPU::submitFieldSamplerQuery(const FieldSamplerQueryDataIntl& data, PxTaskID taskID)
-{
- PX_ASSERT(data.count <= mQueryDesc.maxCount);
- if (data.count == 0)
- {
- return taskID;
- }
- mQueryData = data;
-
- if (!data.isDataOnDevice)
- {
- bool isWorkOnCPU = true;
- // try to find FieldSampler which has no CPU implemntation (Turbulence for example)
- for (uint32_t sceneIdx = 0; (sceneIdx < mPrimarySceneList.size() + mSecondarySceneList.size()) && isWorkOnCPU; ++sceneIdx)
- {
- const nvidia::Array<FieldSamplerInfo>& fsArray = sceneIdx < mPrimarySceneList.size()
- ? mPrimarySceneList[sceneIdx]->getFieldSamplerArray()
- : mSecondarySceneList[sceneIdx-mPrimarySceneList.size()]->getFieldSamplerArray();
- for (uint32_t fsIdx = 0; fsIdx < fsArray.size() && isWorkOnCPU; fsIdx++)
- {
- if (fsArray[fsIdx].mFieldSamplerWrapper->isEnabled())
- {
- isWorkOnCPU = fsArray[fsIdx].mFieldSamplerWrapper->getInternalFieldSamplerDesc().cpuSimulationSupport;
- }
- }
- }
-
- // if all FSs can work on CPU we will execute FieldSamplerQuery on CPU
- if (isWorkOnCPU)
- {
- return FieldSamplerQueryCPU::submitFieldSamplerQuery(data, taskID);
- }
-
- mPositionMass.reserve(mQueryDesc.maxCount, ApexMirroredPlace::CPU_GPU);
- mVelocity.reserve(mQueryDesc.maxCount, ApexMirroredPlace::CPU_GPU);
- mAccumField.reserve(mQueryDesc.maxCount, ApexMirroredPlace::CPU_GPU);
- }
- mAccumVelocity.reserve(mQueryDesc.maxCount, ApexMirroredPlace::CPU_GPU);
-
- // if data on device or some FS can't work on CPU we will launch FieldSamplerQuery on GPU
- PxTaskManager* tm = mManager->getApexScene().getTaskManager();
- tm->submitUnnamedTask(*mTaskLaunch, PxTaskType::TT_GPU);
-
- if (data.isDataOnDevice)
- {
- FieldSamplerQuery::submitFieldSamplerQuery(data, mTaskLaunch, NULL);
-
- mTaskLaunch->finishBefore(taskID);
- return mTaskLaunch->getTaskID();
- }
- else
- {
- FieldSamplerQueryDataIntl data4Device;
- data4Device.timeStep = data.timeStep;
- data4Device.count = data.count;
- data4Device.isDataOnDevice = true;
- data4Device.positionStrideBytes = sizeof(PxVec4);
- data4Device.velocityStrideBytes = sizeof(PxVec4);
- data4Device.massStrideBytes = sizeof(PxVec4);
- data4Device.pmaInPosition = (float*)mPositionMass.getGpuPtr();
- data4Device.pmaInVelocity = (float*)mVelocity.getGpuPtr();
- data4Device.pmaInMass = &mPositionMass.getGpuPtr()->w;
- data4Device.pmaOutField = mAccumField.getGpuPtr();
- data4Device.pmaInIndices = 0;
-
- FieldSamplerQuery::submitFieldSamplerQuery(data4Device, mTaskLaunch, mTaskCopy);
-
- tm->submitUnnamedTask(*mTaskPrepare);
- tm->submitUnnamedTask(*mTaskCopy, PxTaskType::TT_GPU);
- tm->submitUnnamedTask(*mTaskFetch);
-
- mTaskPrepare->finishBefore(mTaskCopy->getTaskID());
- mTaskCopy->finishBefore(mTaskLaunch->getTaskID());
- mTaskLaunch->finishBefore(mTaskFetch->getTaskID());
- mTaskFetch->finishBefore(taskID);
- return mTaskPrepare->getTaskID();
- }
-}
-
-void FieldSamplerQueryGPU::prepare()
-{
- const uint32_t positionStride = mQueryData.positionStrideBytes / sizeof(float);
- const uint32_t velocityStride = mQueryData.velocityStrideBytes / sizeof(float);
- const uint32_t massStride = mQueryData.massStrideBytes / sizeof(float);
- for (uint32_t idx = 0; idx < mQueryData.count; idx++)
- {
- mPositionMass[idx] = PxVec4(*(PxVec3*)(mQueryData.pmaInPosition + idx * positionStride), *(mQueryData.pmaInMass + idx * massStride));
- mVelocity[idx] = PxVec4(*(PxVec3*)(mQueryData.pmaInVelocity + idx * velocityStride), 0.f);
- }
-}
-
-void FieldSamplerQueryGPU::fetch()
-{
- for (uint32_t idx = 0; idx < mQueryData.count; idx++)
- {
- mQueryData.pmaOutField[idx] = mAccumField[idx];
- }
-}
-
-bool FieldSamplerQueryGPU::copy(CUstream stream, int kernelIndex)
-{
- if (kernelIndex == 0)
- {
- mCopyQueue.reset(stream, 4);
- mPositionMass.copyHostToDeviceQ(mCopyQueue, mQueryData.count);
- mVelocity.copyHostToDeviceQ(mCopyQueue, mQueryData.count);
- mCopyQueue.flushEnqueued();
- }
- return false;
-}
-
-bool FieldSamplerQueryGPU::launch(CUstream stream, int kernelIndex)
-{
- FieldSamplerPointsKernelArgs args;
- args.elapsedTime = mQueryData.timeStep;
- args.totalElapsedMS = mManager->getApexScene().getTotalElapsedMS();
- if (mQueryData.isDataOnDevice)
- {
- args.positionMass = (float4*)mQueryData.pmaInPosition;
- args.velocity = (float4*)mQueryData.pmaInVelocity;
- args.accumField = (float4*)mQueryData.pmaOutField;
- }
- else
- {
- args.positionMass = (float4*)mPositionMass.getGpuPtr();
- args.velocity = (float4*)mVelocity.getGpuPtr();
- args.accumField = (float4*)mAccumField.getGpuPtr();
- }
- args.accumVelocity = (float4*)mAccumVelocity.getGpuPtr();
-
- FieldSamplerPointsKernelLaunchDataIntl launchData;
- launchData.stream = stream;
- launchData.kernelType = FieldSamplerKernelType::POINTS;
- launchData.kernelArgs = &args;
- launchData.threadCount = mQueryData.count;
- launchData.memRefSize = mQueryData.count;
-
- if (kernelIndex == 0 && mOnStartCallback)
- {
- (*mOnStartCallback)(stream);
- }
-
- if (kernelIndex == 0)
- {
- CUDA_OBJ(clearKernel)(stream, mQueryData.count,
- createApexCudaMemRef(args.accumField, launchData.memRefSize, ApexCudaMemFlags::OUT),
- createApexCudaMemRef(args.accumVelocity, launchData.memRefSize, ApexCudaMemFlags::OUT));
- return true;
- }
- --kernelIndex;
-
- const uint32_t bothSceneCount = mPrimarySceneList.size() + mSecondarySceneList.size();
- if (kernelIndex < (int) bothSceneCount)
- {
- SceneInfo* sceneInfo = (kernelIndex < (int) mPrimarySceneList.size())
- ? mPrimarySceneList[(uint32_t)kernelIndex]
- : mSecondarySceneList[(uint32_t)kernelIndex - mPrimarySceneList.size()];
- SceneInfoGPU* sceneInfoGPU = DYNAMIC_CAST(SceneInfoGPU*)(sceneInfo);
-
- launchData.kernelMode = FieldSamplerKernelMode::DEFAULT;
- if (kernelIndex == (int) mPrimarySceneList.size() - 1)
- {
- launchData.kernelMode = FieldSamplerKernelMode::FINISH_PRIMARY;
- }
- if ((kernelIndex == (int) bothSceneCount - 1))
- {
- launchData.kernelMode = FieldSamplerKernelMode::FINISH_SECONDARY;
- }
-
- FieldSamplerSceneWrapperGPU* sceneWrapper = DYNAMIC_CAST(FieldSamplerSceneWrapperGPU*)(sceneInfo->getSceneWrapper());
-
- launchData.queryParamsHandle = sceneInfoGPU->getQueryParamsHandle();
- launchData.paramsExArrayHandle = sceneInfoGPU->getParamsHandle();
- launchData.fieldSamplerArray = &sceneInfo->getFieldSamplerArray();
- launchData.activeFieldSamplerCount = sceneInfo->getEnabledFieldSamplerCount();
-
- sceneWrapper->getInternalFieldSamplerScene()->launchFieldSamplerCudaKernel(launchData);
- return true;
- }
- kernelIndex -= bothSceneCount;
-
- if (kernelIndex == 0)
- {
- CUDA_OBJ(composeKernel)(stream, mQueryData.count,
- createApexCudaMemRef(args.accumField, launchData.memRefSize, ApexCudaMemFlags::IN_OUT),
- createApexCudaMemRef((const float4*)args.accumVelocity, launchData.memRefSize, ApexCudaMemFlags::IN),
- createApexCudaMemRef(args.velocity, launchData.memRefSize, ApexCudaMemFlags::IN),
- args.elapsedTime);
- return true;
- }
- --kernelIndex;
-
- if (!mQueryData.isDataOnDevice)
- {
- mAccumField.copyDeviceToHostQ(mCopyQueue, mQueryData.count);
- mCopyQueue.flushEnqueued();
-
- PxTaskManager* tm = mManager->getApexScene().getTaskManager();
- tm->getGpuDispatcher()->addCompletionPrereq(*mTaskFetch);
- }
-
- if (mOnFinishCallback)
- {
- (*mOnFinishCallback)(stream);
- }
- return false;
-}
-
-FieldSamplerQueryGPU::SceneInfoGPU::SceneInfoGPU(ResourceList& list, FieldSamplerQuery* query, FieldSamplerSceneWrapper* sceneWrapper)
- : SceneInfo(list, query, sceneWrapper)
- , mConstMemGroup(DYNAMIC_CAST(FieldSamplerSceneWrapperGPU*)(sceneWrapper)->getConstStorage())
-{
- APEX_CUDA_CONST_MEM_GROUP_SCOPE(mConstMemGroup);
-
- mQueryParamsHandle.alloc(_storage_);
-}
-
-bool FieldSamplerQueryGPU::SceneInfoGPU::update()
-{
- if (FieldSamplerQuery::SceneInfo::update())
- {
- APEX_CUDA_CONST_MEM_GROUP_SCOPE(mConstMemGroup);
-
- FieldSamplerParamsExArray paramsExArray;
- mParamsExArrayHandle.allocOrFetch(_storage_, paramsExArray);
- if (paramsExArray.resize(_storage_, mEnabledFieldSamplerCount))
- {
- for (uint32_t i = 0, enabledIdx = 0; i < mFieldSamplerArray.size(); ++i)
- {
- FieldSamplerWrapperGPU* fieldSamplerWrapper = DYNAMIC_CAST(FieldSamplerWrapperGPU*)(mFieldSamplerArray[i].mFieldSamplerWrapper);
- if (fieldSamplerWrapper->isEnabled())
- {
- FieldSamplerParamsEx fsParamsEx;
- fsParamsEx.paramsHandle = fieldSamplerWrapper->getParamsHandle();
- fsParamsEx.multiplier = mFieldSamplerArray[i].mMultiplier;
- PX_ASSERT(enabledIdx < mEnabledFieldSamplerCount);
- paramsExArray.updateElem(_storage_, fsParamsEx, enabledIdx++);
- }
- }
- mParamsExArrayHandle.update(_storage_, paramsExArray);
- }
- return true;
- }
- return false;
-}
-
-PxVec3 FieldSamplerQueryGPU::executeFieldSamplerQueryOnGrid(const FieldSamplerQueryGridDataIntl& data)
-{
- FieldSamplerGridKernelArgs args;
-
- args.numX = data.numX;
- args.numY = data.numY;
- args.numZ = data.numZ;
-
- args.gridToWorld = data.gridToWorld;
-
- args.mass = data.mass;
- args.elapsedTime = data.timeStep;
- args.cellSize = data.cellSize;
- args.totalElapsedMS = mManager->getApexScene().getTotalElapsedMS();
-
- FieldSamplerGridKernelLaunchDataIntl launchData;
- launchData.stream = data.stream;
- launchData.kernelType = FieldSamplerKernelType::GRID;
- launchData.kernelArgs = &args;
- launchData.threadCountX = data.numX;
- launchData.threadCountY = data.numY;
- launchData.threadCountZ = data.numZ;
- launchData.accumArray = data.resultVelocity;
-
-
- {
- APEX_CUDA_SURFACE_SCOPE_BIND(surfRefGridAccum, *launchData.accumArray, ApexCudaMemFlags::OUT);
-
- CUDA_OBJ(clearGridKernel)(data.stream, launchData.threadCountX, launchData.threadCountY, launchData.threadCountZ,
- args.numX, args.numY, args.numZ);
- }
-
- PxVec3 velocity(0.0f);
- for (uint32_t i = 0; i < mSecondarySceneList.size(); ++i)
- {
- SceneInfoGPU* sceneInfo = DYNAMIC_CAST(SceneInfoGPU*)(mSecondarySceneList[i]);
- FieldSamplerSceneWrapperGPU* sceneWrapper = DYNAMIC_CAST(FieldSamplerSceneWrapperGPU*)(sceneInfo->getSceneWrapper());
-
- launchData.activeFieldSamplerCount = 0;
-
- const nvidia::Array<FieldSamplerInfo>& fieldSamplerArray = sceneInfo->getFieldSamplerArray();
- for (uint32_t fieldSamplerIdx = 0; fieldSamplerIdx < fieldSamplerArray.size(); ++fieldSamplerIdx)
- {
- const FieldSamplerWrapperGPU* wrapper = static_cast<const FieldSamplerWrapperGPU* >( fieldSamplerArray[fieldSamplerIdx].mFieldSamplerWrapper );
- if (wrapper->isEnabled())
- {
- switch (wrapper->getInternalFieldSamplerDesc().gridSupportType)
- {
- case FieldSamplerGridSupportTypeIntl::SINGLE_VELOCITY:
- {
- const FieldSamplerIntl* fieldSampler = wrapper->getInternalFieldSampler();
- velocity += fieldSampler->queryFieldSamplerVelocity();
- }
- break;
- case FieldSamplerGridSupportTypeIntl::VELOCITY_PER_CELL:
- {
- launchData.activeFieldSamplerCount += 1;
- }
- break;
- default:
- break;
- }
- }
- }
-
- if (launchData.activeFieldSamplerCount > 0)
- {
- launchData.queryParamsHandle = sceneInfo->getQueryParamsHandle();
- launchData.paramsExArrayHandle = sceneInfo->getParamsHandle();
- launchData.fieldSamplerArray = &sceneInfo->getFieldSamplerArray();
- launchData.kernelMode = FieldSamplerKernelMode::DEFAULT;
-
- sceneWrapper->getInternalFieldSamplerScene()->launchFieldSamplerCudaKernel(launchData);
- }
- }
- return velocity;
-}
-
-
-#endif
-
-}
-} // end namespace nvidia::apex
-
diff --git a/APEX_1.4/module/fieldsampler/src/FieldSamplerScene.cpp b/APEX_1.4/module/fieldsampler/src/FieldSamplerScene.cpp
deleted file mode 100644
index 58c74ed7..00000000
--- a/APEX_1.4/module/fieldsampler/src/FieldSamplerScene.cpp
+++ /dev/null
@@ -1,304 +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 "Apex.h"
-
-#include "FieldSamplerScene.h"
-#include "FieldSamplerManager.h"
-#include "FieldSamplerQuery.h"
-#include "FieldSamplerPhysXMonitor.h"
-#include "SceneIntl.h"
-#include "RenderDebugInterface.h"
-#include "ModulePerfScope.h"
-
-#if APEX_CUDA_SUPPORT
-#include "PxGpuTask.h"
-#include "ApexCudaSource.h"
-#endif
-
-#include "Lock.h"
-
-namespace nvidia
-{
-namespace fieldsampler
-{
-
-FieldSamplerScene::FieldSamplerScene(ModuleFieldSamplerImpl& module, SceneIntl& scene, RenderDebugInterface* debugRender, ResourceList& list)
- : mModule(&module)
- , mApexScene(&scene)
- , mDebugRender(debugRender)
- , mManager(NULL)
- , mPhysXScene(NULL)
- , mForceSampleBatchBufferPos(0)
- , mForceSampleBatchBufferSize(0)
-{
- list.add(*this); // Add self to module's list of FieldSamplerScenes
-}
-
-FieldSamplerScene::~FieldSamplerScene()
-{
-}
-
-void FieldSamplerScene::visualize()
-{
-#ifndef WITHOUT_DEBUG_VISUALIZE
-#endif
-}
-
-void FieldSamplerScene::destroy()
-{
-#if PX_PHYSICS_VERSION_MAJOR == 3
- PX_DELETE(mPhysXMonitor);
-#endif
- PX_DELETE(mManager);
-
- removeAllActors();
- mApexScene->moduleReleased(*this);
- delete this;
-}
-
-FieldSamplerManagerIntl* FieldSamplerScene::getManager()
-{
- if (mManager == NULL)
- {
- mManager = createManager();
- PX_ASSERT(mManager != NULL);
- }
- return mManager;
-}
-
-
-
-void FieldSamplerScene::setModulePhysXScene(PxScene* s)
-{
- if (s)
- {
- mPhysXMonitor->setPhysXScene(s);
- }
- mPhysXScene = s;
-}
-
-
-void FieldSamplerScene::submitTasks(float /*elapsedTime*/, float /*substepSize*/, uint32_t /*numSubSteps*/)
-{
-#if PX_PHYSICS_VERSION_MAJOR == 3
- PxTaskManager* tm;
- {
- READ_LOCK(*mApexScene);
- tm = mApexScene->getTaskManager();
- }
- tm->submitNamedTask(&mPhysXMonitorFetchTask, FSST_PHYSX_MONITOR_FETCH);
- tm->submitNamedTask(&mPhysXMonitorLoadTask, FSST_PHYSX_MONITOR_LOAD);
-#endif
- if (mManager != NULL)
- {
- mManager->submitTasks();
- }
-}
-
-void FieldSamplerScene::setTaskDependencies()
-{
-#if PX_PHYSICS_VERSION_MAJOR == 3
- for (uint32_t i = 0; i < mForceSampleBatchQuery.size(); i++)
- {
- if (mForceSampleBatchQuery[i] && mForceSampleBatchQueryData[i].count > 0)
- {
- static_cast<FieldSamplerQueryIntl*>(mForceSampleBatchQuery[i])->submitFieldSamplerQuery(mForceSampleBatchQueryData[i], mApexScene->getTaskManager()->getNamedTask(FSST_PHYSX_MONITOR_LOAD));
- mForceSampleBatchQueryData[i].count = 0;
- }
- mForceSampleBatchBufferPos = 0;
- }
- if (mPhysXMonitor->isEnable())
- {
- mPhysXMonitor->update();
- }
-#endif
- if (mManager != NULL)
- {
- mManager->setTaskDependencies();
- }
-
-#if PX_PHYSICS_VERSION_MAJOR == 3
- // Just in case one of the scene conditions doesn't set a bounding dependency, let's not let these dangle
- PxTaskManager* tm;
- {
- READ_LOCK(*mApexScene);
- tm = mApexScene->getTaskManager();
- }
- mPhysXMonitorFetchTask.finishBefore(tm->getNamedTask(AST_PHYSX_FETCH_RESULTS));
- mPhysXMonitorLoadTask.finishBefore(tm->getNamedTask(AST_PHYSX_FETCH_RESULTS));
-#endif
-}
-
-void FieldSamplerScene::fetchResults()
-{
- if (mManager != NULL)
- {
- mManager->fetchResults();
- }
-}
-
-#if PX_PHYSICS_VERSION_MAJOR == 3
-void FieldSamplerScene::enablePhysXMonitor(bool enable)
-{
- PX_UNUSED(enable);
- mPhysXMonitor->enablePhysXMonitor(enable);
-}
-
-void FieldSamplerScene::setPhysXFilterData(physx::PxFilterData filterData)
-{
- mPhysXMonitor->setPhysXFilterData(filterData);
-}
-
-
-uint32_t FieldSamplerScene::createForceSampleBatch(uint32_t maxCount, const physx::PxFilterData filterData)
-{
- mForceSampleBatchBufferSize += maxCount;
- mForceSampleBatchPosition.resize(mForceSampleBatchBufferSize);
- mForceSampleBatchVelocity.resize(mForceSampleBatchBufferSize);
- mForceSampleBatchMass.resize(mForceSampleBatchBufferSize);
-
- FieldSamplerQueryDescIntl desc;
- desc.maxCount = maxCount;
- desc.samplerFilterData = filterData;
- //SceneInfo* sceneInfo = DYNAMIC_CAST(SceneInfo*)(mSceneList.getResource(i));
- //InternalFieldSamplerScene* niFieldSamplerScene = sceneInfo->getSceneWrapper()->getInternalFieldSamplerScene();
- //desc.ownerFieldSamplerScene = this;
-
-
- uint32_t id = 0;
- while (id < mForceSampleBatchQuery.size() && mForceSampleBatchQuery[id])
- {
- id++;
- }
- if (id == mForceSampleBatchQuery.size())
- {
- mForceSampleBatchQuery.pushBack(0);
- FieldSamplerQueryDataIntl data;
- data.count = 0;
- mForceSampleBatchQueryData.pushBack(data);
- }
- mForceSampleBatchQuery[id] = static_cast<FieldSamplerQuery*>(mManager->createFieldSamplerQuery(desc));
- return id;
-}
-
-
-void FieldSamplerScene::releaseForceSampleBatch(uint32_t batchId)
-{
- if (batchId < mForceSampleBatchQuery.size() && mForceSampleBatchQuery[batchId])
- {
- mForceSampleBatchBufferSize -= mForceSampleBatchQuery[batchId]->getQueryDesc().maxCount;
- mForceSampleBatchPosition.resize(mForceSampleBatchBufferSize);
- mForceSampleBatchVelocity.resize(mForceSampleBatchBufferSize);
- mForceSampleBatchMass.resize(mForceSampleBatchBufferSize);
-
- mForceSampleBatchQuery[batchId]->release();
- mForceSampleBatchQuery[batchId] = 0;
- }
-}
-
-
-void FieldSamplerScene::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)
-{
- PX_UNUSED(forcesStride);
- PX_ASSERT(forcesStride == sizeof(PxVec4));
- PX_ASSERT(indices);
- if (batchId >= mForceSampleBatchQuery.size() || mForceSampleBatchQuery[batchId] == 0) return;
-
- uint32_t maxIndices = indices[numIndices - 1] + 1; //supposed that indices are sorted
- for (uint32_t i = 0; i < maxIndices; i++)
- {
- mForceSampleBatchPosition[mForceSampleBatchBufferPos + i] = *(PxVec4*)((uint8_t*)positions + i * positionsStride);
- mForceSampleBatchVelocity[mForceSampleBatchBufferPos + i] = *(PxVec4*)((uint8_t*)velocities + i * velocitiesStride);
- mForceSampleBatchMass[mForceSampleBatchBufferPos + i] = *(float*)((uint8_t*)mass + i * massStride);
- }
-
- FieldSamplerQueryDataIntl& data = mForceSampleBatchQueryData[batchId];
- data.count = numIndices;
- data.isDataOnDevice = false;
- data.positionStrideBytes = sizeof(PxVec4);
- data.velocityStrideBytes = sizeof(PxVec4);
- data.massStrideBytes = massStride ? sizeof(float) : 0;
- data.pmaInMass = (float*)&mForceSampleBatchMass[mForceSampleBatchBufferPos];
- data.pmaInPosition = (float*)&mForceSampleBatchPosition[mForceSampleBatchBufferPos];
- data.pmaInVelocity = (float*)&mForceSampleBatchVelocity[mForceSampleBatchBufferPos];
- data.pmaInIndices = (uint32_t*)indices;
- data.pmaOutField = forces;
- data.timeStep = getApexScene().getPhysXSimulateTime();
-
- mForceSampleBatchBufferPos += maxIndices;
-}
-
-#endif
-
-/******************************** CPU Version ********************************/
-
-
-FieldSamplerSceneCPU::FieldSamplerSceneCPU(ModuleFieldSamplerImpl& module, SceneIntl& scene, RenderDebugInterface* debugRender, ResourceList& list) :
- FieldSamplerScene(module, scene, debugRender, list)
-{
-#if PX_PHYSICS_VERSION_MAJOR == 3
- mPhysXMonitor = PX_NEW(FieldSamplerPhysXMonitor)(*this);
-#endif
-}
-
-FieldSamplerSceneCPU::~FieldSamplerSceneCPU()
-{
-}
-
-FieldSamplerManager* FieldSamplerSceneCPU::createManager()
-{
- return PX_NEW(FieldSamplerManagerCPU)(this);
-}
-
-/******************************** GPU Version ********************************/
-
-#if APEX_CUDA_SUPPORT
-
-FieldSamplerSceneGPU::FieldSamplerSceneGPU(ModuleFieldSamplerImpl& module, SceneIntl& scene, RenderDebugInterface* debugRender, ResourceList& list)
- : FieldSamplerScene(module, scene, debugRender, list)
- , CudaModuleScene(scene, *mModule, APEX_CUDA_TO_STR(APEX_CUDA_MODULE_PREFIX))
-{
-#if PX_PHYSICS_VERSION_MAJOR == 3
- mPhysXMonitor = PX_NEW(FieldSamplerPhysXMonitor)(*this);
-#endif
- {
- PxGpuDispatcher* gd = mApexScene->getTaskManager()->getGpuDispatcher();
- PX_ASSERT(gd != NULL);
- mCtxMgr = gd->getCudaContextManager();
- PxScopedCudaLock _lock_(*mCtxMgr);
-
-//CUDA module objects
-#include "../cuda/include/fieldsampler.h"
- }
-}
-
-FieldSamplerSceneGPU::~FieldSamplerSceneGPU()
-{
- CudaModuleScene::destroy(*mApexScene);
-}
-
-FieldSamplerManager* FieldSamplerSceneGPU::createManager()
-{
- return PX_NEW(FieldSamplerManagerGPU)(this);
-}
-
-#endif
-
-}
-} // end namespace nvidia::apex
-
-
diff --git a/APEX_1.4/module/fieldsampler/src/FieldSamplerSceneWrapper.cpp b/APEX_1.4/module/fieldsampler/src/FieldSamplerSceneWrapper.cpp
deleted file mode 100644
index 405462e7..00000000
--- a/APEX_1.4/module/fieldsampler/src/FieldSamplerSceneWrapper.cpp
+++ /dev/null
@@ -1,143 +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 "Apex.h"
-#include "FieldSamplerSceneWrapper.h"
-#include "FieldSamplerManager.h"
-#include "FieldBoundaryWrapper.h"
-#include "FieldSamplerWrapper.h"
-
-
-namespace nvidia
-{
-namespace fieldsampler
-{
-
-FieldSamplerSceneWrapper::FieldSamplerSceneWrapper(ResourceList& list, FieldSamplerManager* manager, FieldSamplerSceneIntl* fieldSamplerScene)
- : mManager(manager)
- , mFieldSamplerScene(fieldSamplerScene)
- , mFieldBoundaryListChanged(false)
-{
- mFieldSamplerScene->getFieldSamplerSceneDesc(mFieldSamplerSceneDesc);
-
- list.add(*this);
-}
-
-void FieldSamplerSceneWrapper::release()
-{
- delete this;
-}
-
-FieldSamplerSceneWrapper::FieldBoundaryInfo* FieldSamplerSceneWrapper::addFieldBoundary(FieldBoundaryWrapper* fieldBoundaryWrapper)
-{
- FieldBoundaryInfo* fieldBoundaryInfo = NULL;
- for (uint32_t i = 0; i < mFieldBoundaryList.getSize(); ++i)
- {
- FieldBoundaryInfo* info = DYNAMIC_CAST(FieldBoundaryInfo*)(mFieldBoundaryList.getResource(i));
- if (info->getFieldBoundaryWrapper() == fieldBoundaryWrapper)
- {
- fieldBoundaryInfo = info;
- break;
- }
- }
- if (fieldBoundaryInfo == NULL)
- {
- fieldBoundaryInfo = createFieldBoundaryInfo(fieldBoundaryWrapper);
- mFieldBoundaryListChanged = true;
- }
- fieldBoundaryInfo->addRef();
- return fieldBoundaryInfo;
-}
-
-void FieldSamplerSceneWrapper::removeFieldBoundary(FieldBoundaryInfo* fieldBoundaryInfo)
-{
- if (fieldBoundaryInfo->releaseRef())
- {
- mFieldBoundaryListChanged = true;
- }
-}
-
-void FieldSamplerSceneWrapper::update()
-{
- for (uint32_t i = 0; i < mFieldBoundaryList.getSize(); ++i)
- {
- FieldBoundaryInfo* info = DYNAMIC_CAST(FieldBoundaryInfo*)(mFieldBoundaryList.getResource(i));
- info->update();
- }
-}
-
-/******************************** CPU Version ********************************/
-FieldSamplerSceneWrapperCPU::FieldSamplerSceneWrapperCPU(ResourceList& list, FieldSamplerManager* manager, FieldSamplerSceneIntl* fieldSamplerScene)
- : FieldSamplerSceneWrapper(list, manager, fieldSamplerScene)
-{
-}
-
-/******************************** GPU Version ********************************/
-#if APEX_CUDA_SUPPORT
-
-FieldSamplerSceneWrapperGPU::FieldSamplerSceneWrapperGPU(ResourceList& list, FieldSamplerManager* manager, FieldSamplerSceneIntl* fieldSamplerScene)
- : FieldSamplerSceneWrapper(list, manager, fieldSamplerScene)
- , mConstStorage(*fieldSamplerScene->getFieldSamplerCudaConstStorage())
-{
-}
-
-void FieldSamplerSceneWrapperGPU::postUpdate()
-{
- PxCudaContextManager* ctx = DYNAMIC_CAST(FieldSamplerSceneGPU*)(mManager->getScene())->getCudaContext();
- PxScopedCudaLock _lock_(*ctx);
-
- getConstStorage().copyToDevice(ctx, 0);
-}
-
-
-FieldSamplerSceneWrapperGPU::FieldBoundaryInfoGPU::FieldBoundaryInfoGPU(ResourceList& list, FieldBoundaryWrapper* fieldBoundaryWrapper, ApexCudaConstStorage& constStorage)
- : FieldBoundaryInfo(list, fieldBoundaryWrapper)
- , mConstMemGroup(constStorage)
-{
- APEX_CUDA_CONST_MEM_GROUP_SCOPE(mConstMemGroup);
- mFieldShapeGroupParamsHandle.alloc(_storage_);
-}
-
-void FieldSamplerSceneWrapperGPU::FieldBoundaryInfoGPU::update()
-{
- if (mFieldBoundaryWrapper->getFieldShapesChanged())
- {
- APEX_CUDA_CONST_MEM_GROUP_SCOPE(mConstMemGroup);
-
- FieldShapeGroupParams shapeGroupParams;
- mFieldShapeGroupParamsHandle.fetch(_storage_, shapeGroupParams);
-
- const nvidia::Array<FieldShapeDescIntl>& shapes = mFieldBoundaryWrapper->getFieldShapes();
- uint32_t shapeCount = shapes.size();
- shapeGroupParams.shapeArray.resize(_storage_, shapeCount);
- for (uint32_t i = 0; i < shapeCount; ++i)
- {
- FieldShapeParams elem;
- elem.type = shapes[i].type;
- elem.dimensions = shapes[i].dimensions;
- elem.worldToShape = shapes[i].worldToShape;
- PX_ASSERT(shapes[i].weight >= 0.0f && shapes[i].weight <= 1.0f);
- elem.weight = PxClamp(shapes[i].weight, 0.0f, 1.0f);
- elem.fade = 0;
-
- shapeGroupParams.shapeArray.updateElem(_storage_, elem, i);
- }
-
- mFieldShapeGroupParamsHandle.update(_storage_, shapeGroupParams);
- }
-}
-
-#endif // APEX_CUDA_SUPPORT
-
-}
-} // end namespace nvidia::apex
-
diff --git a/APEX_1.4/module/fieldsampler/src/FieldSamplerWrapper.cpp b/APEX_1.4/module/fieldsampler/src/FieldSamplerWrapper.cpp
deleted file mode 100644
index 94d18a76..00000000
--- a/APEX_1.4/module/fieldsampler/src/FieldSamplerWrapper.cpp
+++ /dev/null
@@ -1,177 +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 "Apex.h"
-#include "FieldSamplerWrapper.h"
-#include "FieldBoundaryWrapper.h"
-#include "FieldSamplerManager.h"
-#include "FieldSamplerSceneWrapper.h"
-
-
-namespace nvidia
-{
-namespace fieldsampler
-{
-
-
-FieldSamplerWrapper::FieldSamplerWrapper(ResourceList& list, FieldSamplerManager* manager, FieldSamplerIntl* fieldSampler, const FieldSamplerDescIntl& fieldSamplerDesc, FieldSamplerSceneWrapper* fieldSamplerSceneWrapper)
- : mManager(manager)
- , mFieldSampler(fieldSampler)
- , mFieldSamplerDesc(fieldSamplerDesc)
- , mFieldSamplerShapeChanged(false)
- , mSceneWrapper(fieldSamplerSceneWrapper)
- , mQueryRefCount(0)
- , mFieldBoundaryInfoArrayChanged(true)
- , mIsEnabled(false)
- , mIsEnabledLast(false)
-{
- list.add(*this);
-
- //set default shape weight to 1
- mFieldSamplerShape.weight = 1;
-}
-
-void FieldSamplerWrapper::release()
-{
- for (uint32_t i = 0; i < mFieldBoundaryInfoArray.size(); ++i)
- {
- FieldSamplerSceneWrapper::FieldBoundaryInfo* fieldBoundaryInfo = mFieldBoundaryInfoArray[i];
- mSceneWrapper->removeFieldBoundary(fieldBoundaryInfo);
- }
-
- delete this;
-}
-
-bool FieldSamplerWrapper::addFieldBoundary(FieldBoundaryWrapper* fieldBoundaryWrapper)
-{
- const FieldBoundaryDescIntl& fieldBoundaryDesc = fieldBoundaryWrapper->getInternalFieldBoundaryDesc();
-
- float weight;
- if (mManager->getFieldSamplerGroupsFiltering(fieldBoundaryDesc.boundaryFilterData, mFieldSamplerDesc.boundaryFilterData,weight))
- {
- FieldSamplerSceneWrapper::FieldBoundaryInfo* fieldBoundaryInfo =
- mSceneWrapper->addFieldBoundary(fieldBoundaryWrapper);
-
- mFieldBoundaryInfoArray.pushBack(fieldBoundaryInfo);
- mFieldBoundaryInfoArrayChanged = true;
- return true;
- }
- return false;
-}
-
-bool FieldSamplerWrapper::removeFieldBoundary(FieldBoundaryWrapper* fieldBoundaryWrapper)
-{
- for (uint32_t i = 0; i < mFieldBoundaryInfoArray.size(); ++i)
- {
- FieldSamplerSceneWrapper::FieldBoundaryInfo* fieldBoundaryInfo = mFieldBoundaryInfoArray[i];
- if (fieldBoundaryInfo->getFieldBoundaryWrapper() == fieldBoundaryWrapper)
- {
- mSceneWrapper->removeFieldBoundary(fieldBoundaryInfo);
-
- mFieldBoundaryInfoArray.replaceWithLast(i);
- mFieldBoundaryInfoArrayChanged = true;
- return true;
- }
- }
- return false;
-}
-
-void FieldSamplerWrapper::update()
-{
- mIsEnabledLast = mIsEnabled;
- mFieldSamplerShapeChanged = mFieldSampler->updateFieldSampler(mFieldSamplerShape, mIsEnabled);
- if (!mIsEnabledLast && mIsEnabled)
- {
- mFieldSamplerShapeChanged = true;
- }
- else if (!mIsEnabled)
- {
- mFieldSamplerShapeChanged = false;
- }
-}
-
-/******************************** CPU Version ********************************/
-
-FieldSamplerWrapperCPU::FieldSamplerWrapperCPU(ResourceList& list, FieldSamplerManager* manager, FieldSamplerIntl* fieldSampler, const FieldSamplerDescIntl& fieldSamplerDesc, FieldSamplerSceneWrapper* fieldSamplerSceneWrapper)
- : FieldSamplerWrapper(list, manager, fieldSampler, fieldSamplerDesc, fieldSamplerSceneWrapper)
-{
-}
-
-/******************************** GPU Version ********************************/
-#if APEX_CUDA_SUPPORT
-
-FieldSamplerWrapperGPU::FieldSamplerWrapperGPU(ResourceList& list, FieldSamplerManager* manager, FieldSamplerIntl* fieldSampler, const FieldSamplerDescIntl& fieldSamplerDesc, FieldSamplerSceneWrapper* fieldSamplerSceneWrapper)
- : FieldSamplerWrapperCPU(list, manager, fieldSampler, fieldSamplerDesc, fieldSamplerSceneWrapper)
- , mConstMemGroup(DYNAMIC_CAST(FieldSamplerSceneWrapperGPU*)(fieldSamplerSceneWrapper)->getConstStorage())
-{
-}
-
-void FieldSamplerWrapperGPU::update()
-{
- FieldSamplerWrapper::update();
- if (mFieldSamplerShapeChanged || mFieldBoundaryInfoArrayChanged)
- {
- APEX_CUDA_CONST_MEM_GROUP_SCOPE(mConstMemGroup);
-
- FieldSamplerParams params;
- if (mFieldSamplerParamsHandle.allocOrFetch(_storage_, params))
- {
- //only on alloc
- params.type = mFieldSamplerDesc.type;
- params.gridSupportType = mFieldSamplerDesc.gridSupportType;
- params.dragCoeff = mFieldSamplerDesc.dragCoeff;
-
- params.includeShape.fade = PxClamp(mFieldSamplerDesc.boundaryFadePercentage, 0.0f, 1.0f);
- }
-
- if (mFieldSamplerShapeChanged)
- {
- FieldSamplerIntl::CudaExecuteInfo executeInfo;
- mFieldSampler->getFieldSamplerCudaExecuteInfo(executeInfo);
-
- params.executeType = executeInfo.executeType;
- params.executeParamsHandle = executeInfo.executeParamsHandle;
-
- params.includeShape.type = mFieldSamplerShape.type;
- params.includeShape.dimensions = mFieldSamplerShape.dimensions;
- params.includeShape.worldToShape = mFieldSamplerShape.worldToShape;
- PX_ASSERT(mFieldSamplerShape.weight >= 0.0f && mFieldSamplerShape.weight <= 1.0f);
- params.includeShape.weight = PxClamp(mFieldSamplerShape.weight, 0.0f, 1.0f);
- }
-
- if (mFieldBoundaryInfoArrayChanged)
- {
- uint32_t shapeGroupCount = mFieldBoundaryInfoArray.size();
- if (params.excludeShapeGroupHandleArray.resize(_storage_, shapeGroupCount))
- {
- for (uint32_t shapeGroupIndex = 0; shapeGroupIndex < shapeGroupCount; ++shapeGroupIndex)
- {
- FieldSamplerSceneWrapperGPU::FieldBoundaryInfoGPU* fieldBoundaryInfo =
- static_cast<FieldSamplerSceneWrapperGPU::FieldBoundaryInfoGPU*>(mFieldBoundaryInfoArray[shapeGroupIndex]);
-
- InplaceHandle<FieldShapeGroupParams> elem = fieldBoundaryInfo->getShapeGroupParamsHandle();
- params.excludeShapeGroupHandleArray.updateElem(_storage_, elem, shapeGroupIndex);
- }
- }
-
- mFieldBoundaryInfoArrayChanged = false;
- }
-
- mFieldSamplerParamsHandle.update(_storage_, params);
- }
-}
-
-#endif
-
-}
-} // end namespace nvidia::apex
-
diff --git a/APEX_1.4/module/fieldsampler/src/ModuleFieldSamplerImpl.cpp b/APEX_1.4/module/fieldsampler/src/ModuleFieldSamplerImpl.cpp
deleted file mode 100644
index 7634c180..00000000
--- a/APEX_1.4/module/fieldsampler/src/ModuleFieldSamplerImpl.cpp
+++ /dev/null
@@ -1,281 +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 "Apex.h"
-#include "ModuleFieldSamplerImpl.h"
-#include "ModuleFieldSamplerRegistration.h"
-#include "FieldSamplerScene.h"
-#include "FieldSamplerManager.h"
-#include "SceneIntl.h"
-#include "PsMemoryBuffer.h"
-#include "ModulePerfScope.h"
-using namespace fieldsampler;
-
-#include "ApexSDKIntl.h"
-#include "ApexUsingNamespace.h"
-
-#include "Lock.h"
-
-#include "ReadCheck.h"
-#include "WriteCheck.h"
-
-namespace nvidia
-{
-namespace apex
-{
-
-#if defined(_USRDLL)
-
-/* Modules don't have to link against the framework, they keep their own */
-ApexSDKIntl* gApexSdk = 0;
-ApexSDK* GetApexSDK()
-{
- return gApexSdk;
-}
-ApexSDKIntl* GetInternalApexSDK()
-{
- return gApexSdk;
-}
-
-APEX_API Module* CALL_CONV createModule(
- ApexSDKIntl* inSdk,
- ModuleIntl** niRef,
- uint32_t APEXsdkVersion,
- uint32_t PhysXsdkVersion,
- ApexCreateError* errorCode)
-{
- if (APEXsdkVersion != APEX_SDK_VERSION)
- {
- if (errorCode)
- {
- *errorCode = APEX_CE_WRONG_VERSION;
- }
- return NULL;
- }
-
- if (PhysXsdkVersion != PX_PHYSICS_VERSION)
- {
- if (errorCode)
- {
- *errorCode = APEX_CE_WRONG_VERSION;
- }
- return NULL;
- }
-
- gApexSdk = inSdk;
- ModuleFieldSamplerImpl* impl = PX_NEW(ModuleFieldSampler)(inSdk);
- *niRef = (ModuleIntl*) impl;
- return (Module*) impl;
-}
-
-#else
-/* Statically linking entry function */
-void instantiateModuleFieldSampler()
-{
- ApexSDKIntl* sdk = GetInternalApexSDK();
- nvidia::fieldsampler::ModuleFieldSamplerImpl* impl = PX_NEW(fieldsampler::ModuleFieldSamplerImpl)(sdk);
- sdk->registerExternalModule((Module*) impl, (ModuleIntl*) impl);
-}
-#endif // `defined(_USRDLL)
-}
-
-namespace fieldsampler
-{
-/* === ModuleFieldSamplerImpl Implementation === */
-ModuleFieldSamplerImpl::ModuleFieldSamplerImpl(ApexSDKIntl* sdk)
-{
- mName = "FieldSampler";
- mSdk = sdk;
- mApiProxy = this;
- mModuleParams = NULL;
-
- /* Register the NvParameterized factories */
- NvParameterized::Traits* traits = mSdk->getParameterizedTraits();
- ModuleFieldSamplerRegistration::invokeRegistration(traits);
-}
-
-ModuleFieldSamplerImpl::~ModuleFieldSamplerImpl()
-{
-}
-
-void ModuleFieldSamplerImpl::destroy()
-{
- NvParameterized::Traits* traits = mSdk->getParameterizedTraits();
-
- if (mModuleParams)
- {
- mModuleParams->destroy();
- mModuleParams = NULL;
- }
-
- ModuleBase::destroy();
-
- if (traits)
- {
- /* Remove the NvParameterized factories */
- ModuleFieldSamplerRegistration::invokeUnregistration(traits);
- }
-
- delete this;
-}
-
-void ModuleFieldSamplerImpl::init(NvParameterized::Interface&)
-{
-}
-
-NvParameterized::Interface* ModuleFieldSamplerImpl::getDefaultModuleDesc()
-{
- NvParameterized::Traits* traits = mSdk->getParameterizedTraits();
-
- if (!mModuleParams)
- {
- mModuleParams = DYNAMIC_CAST(FieldSamplerModuleParameters*)
- (traits->createNvParameterized("FieldSamplerModuleParameters"));
- PX_ASSERT(mModuleParams);
- }
- else
- {
- mModuleParams->initDefaults();
- }
-
- return mModuleParams;
-}
-
-FieldSamplerManagerIntl* ModuleFieldSamplerImpl::getInternalFieldSamplerManager(const Scene& apexScene)
-{
- FieldSamplerScene* scene = ModuleFieldSamplerImpl::getFieldSamplerScene(apexScene);
- return scene->getManager();
-}
-
-
-AuthObjTypeID ModuleFieldSamplerImpl::getModuleID() const
-{
- return 0;
-}
-
-
-/* == Example Scene methods == */
-ModuleSceneIntl* ModuleFieldSamplerImpl::createInternalModuleScene(SceneIntl& scene, RenderDebugInterface* debugRender)
-{
-#if APEX_CUDA_SUPPORT
- READ_LOCK(scene);
- if (scene.getTaskManager()->getGpuDispatcher() && scene.isUsingCuda())
- {
- return PX_NEW(FieldSamplerSceneGPU)(*this, scene, debugRender, mFieldSamplerScenes);
- }
- else
-#endif
- return PX_NEW(FieldSamplerSceneCPU)(*this, scene, debugRender, mFieldSamplerScenes);
-}
-
-void ModuleFieldSamplerImpl::releaseModuleSceneIntl(ModuleSceneIntl& scene)
-{
- FieldSamplerScene* es = DYNAMIC_CAST(FieldSamplerScene*)(&scene);
- es->destroy();
-}
-
-nvidia::fieldsampler::FieldSamplerScene* ModuleFieldSamplerImpl::getFieldSamplerScene(const Scene& apexScene) const
-{
- for (uint32_t i = 0 ; i < mFieldSamplerScenes.getSize() ; i++)
- {
- FieldSamplerScene* es = DYNAMIC_CAST(FieldSamplerScene*)(mFieldSamplerScenes.getResource(i));
- if (es->mApexScene == &apexScene)
- {
- return es;
- }
- }
-
- PX_ASSERT(!"Unable to locate an appropriate FieldSamplerScene");
- return NULL;
-}
-
-RenderableIterator* ModuleFieldSamplerImpl::createRenderableIterator(const Scene& apexScene)
-{
- FieldSamplerScene* es = getFieldSamplerScene(apexScene);
- if (es)
- {
- return es->createRenderableIterator();
- }
-
- return NULL;
-}
-
-
-
-bool ModuleFieldSamplerImpl::setFieldSamplerWeightedCollisionFilterCallback(const Scene& apexScene,FieldSamplerWeightedCollisionFilterCallback *callback)
-{
- WRITE_ZONE();
- FieldSamplerScene* scene = getFieldSamplerScene(apexScene);
- if (scene != NULL)
- {
- DYNAMIC_CAST(FieldSamplerManager*)(scene->getManager())->setFieldSamplerWeightedCollisionFilterCallback(callback);
- return true;
- }
- return false;
-
-}
-
-#if PX_PHYSICS_VERSION_MAJOR == 3
-void ModuleFieldSamplerImpl::enablePhysXMonitor(const Scene& apexScene, bool enable)
-{
- WRITE_ZONE();
- getFieldSamplerScene(apexScene)->enablePhysXMonitor(enable);
-}
-
-void ModuleFieldSamplerImpl::setPhysXMonitorFilterData(const Scene& apexScene, physx::PxFilterData filterData)
-{
- WRITE_ZONE();
- getFieldSamplerScene(apexScene)->setPhysXFilterData(filterData);
-}
-#endif
-
-uint32_t ModuleFieldSamplerImpl::createForceSampleBatch(const Scene& apexScene, uint32_t maxCount, const physx::PxFilterData filterData)
-{
- WRITE_ZONE();
- FieldSamplerScene* fsScene = getFieldSamplerScene(apexScene);
- if (fsScene)
- {
- return fsScene->createForceSampleBatch(maxCount, filterData);
- }
- return (uint32_t)~0;
-}
-
-
-void ModuleFieldSamplerImpl::releaseForceSampleBatch(const Scene& apexScene, uint32_t batchId)
-{
- WRITE_ZONE();
- FieldSamplerScene* fsScene = getFieldSamplerScene(apexScene);
- if (fsScene)
- {
- fsScene->releaseForceSampleBatch(batchId);
- }
-}
-
-
-void ModuleFieldSamplerImpl::submitForceSampleBatch(const Scene& apexScene, 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)
-{
- WRITE_ZONE();
- FieldSamplerScene* fsScene = getFieldSamplerScene(apexScene);
- if (fsScene)
- {
- fsScene->submitForceSampleBatch(batchId, forces, forcesStride, positions, positionsStride, velocities, velocitiesStride, mass, massStride, indices, numIndices);
- }
-}
-
-
-}
-} // end namespace nvidia::apex
diff --git a/APEX_1.4/module/fieldsampler/src/autogen/FieldSamplerModuleParameters.cpp b/APEX_1.4/module/fieldsampler/src/autogen/FieldSamplerModuleParameters.cpp
deleted file mode 100644
index 2b76ff70..00000000
--- a/APEX_1.4/module/fieldsampler/src/autogen/FieldSamplerModuleParameters.cpp
+++ /dev/null
@@ -1,318 +0,0 @@
-// 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-2015 NVIDIA Corporation. All rights reserved.
-
-// This file was generated by NvParameterized/scripts/GenParameterized.pl
-
-
-#include "FieldSamplerModuleParameters.h"
-#include <string.h>
-#include <stdlib.h>
-
-using namespace NvParameterized;
-
-namespace nvidia
-{
-namespace fieldsampler
-{
-
-using namespace FieldSamplerModuleParametersNS;
-
-const char* const FieldSamplerModuleParametersFactory::vptr =
- NvParameterized::getVptr<FieldSamplerModuleParameters, FieldSamplerModuleParameters::ClassAlignment>();
-
-const uint32_t NumParamDefs = 2;
-static NvParameterized::DefinitionImpl* ParamDefTable; // now allocated in buildTree [NumParamDefs];
-
-
-static const size_t ParamLookupChildrenTable[] =
-{
- 1,
-};
-
-#define TENUM(type) nvidia::##type
-#define CHILDREN(index) &ParamLookupChildrenTable[index]
-static const NvParameterized::ParamLookupNode ParamLookupTable[NumParamDefs] =
-{
- { TYPE_STRUCT, false, 0, CHILDREN(0), 1 },
- { TYPE_U32, false, (size_t)(&((ParametersStruct*)0)->unused), NULL, 0 }, // unused
-};
-
-
-bool FieldSamplerModuleParameters::mBuiltFlag = false;
-NvParameterized::MutexType FieldSamplerModuleParameters::mBuiltFlagMutex;
-
-FieldSamplerModuleParameters::FieldSamplerModuleParameters(NvParameterized::Traits* traits, void* buf, int32_t* refCount) :
- NvParameters(traits, buf, refCount)
-{
- //mParameterizedTraits->registerFactory(className(), &FieldSamplerModuleParametersFactoryInst);
-
- if (!buf) //Do not init data if it is inplace-deserialized
- {
- initDynamicArrays();
- initStrings();
- initReferences();
- initDefaults();
- }
-}
-
-FieldSamplerModuleParameters::~FieldSamplerModuleParameters()
-{
- freeStrings();
- freeReferences();
- freeDynamicArrays();
-}
-
-void FieldSamplerModuleParameters::destroy()
-{
- // We cache these fields here to avoid overwrite in destructor
- bool doDeallocateSelf = mDoDeallocateSelf;
- NvParameterized::Traits* traits = mParameterizedTraits;
- int32_t* refCount = mRefCount;
- void* buf = mBuffer;
-
- this->~FieldSamplerModuleParameters();
-
- NvParameters::destroy(this, traits, doDeallocateSelf, refCount, buf);
-}
-
-const NvParameterized::DefinitionImpl* FieldSamplerModuleParameters::getParameterDefinitionTree(void)
-{
- if (!mBuiltFlag) // Double-checked lock
- {
- NvParameterized::MutexType::ScopedLock lock(mBuiltFlagMutex);
- if (!mBuiltFlag)
- {
- buildTree();
- }
- }
-
- return(&ParamDefTable[0]);
-}
-
-const NvParameterized::DefinitionImpl* FieldSamplerModuleParameters::getParameterDefinitionTree(void) const
-{
- FieldSamplerModuleParameters* tmpParam = const_cast<FieldSamplerModuleParameters*>(this);
-
- if (!mBuiltFlag) // Double-checked lock
- {
- NvParameterized::MutexType::ScopedLock lock(mBuiltFlagMutex);
- if (!mBuiltFlag)
- {
- tmpParam->buildTree();
- }
- }
-
- return(&ParamDefTable[0]);
-}
-
-NvParameterized::ErrorType FieldSamplerModuleParameters::getParameterHandle(const char* long_name, Handle& handle) const
-{
- ErrorType Ret = NvParameters::getParameterHandle(long_name, handle);
- if (Ret != ERROR_NONE)
- {
- return(Ret);
- }
-
- size_t offset;
- void* ptr;
-
- getVarPtr(handle, ptr, offset);
-
- if (ptr == NULL)
- {
- return(ERROR_INDEX_OUT_OF_RANGE);
- }
-
- return(ERROR_NONE);
-}
-
-NvParameterized::ErrorType FieldSamplerModuleParameters::getParameterHandle(const char* long_name, Handle& handle)
-{
- ErrorType Ret = NvParameters::getParameterHandle(long_name, handle);
- if (Ret != ERROR_NONE)
- {
- return(Ret);
- }
-
- size_t offset;
- void* ptr;
-
- getVarPtr(handle, ptr, offset);
-
- if (ptr == NULL)
- {
- return(ERROR_INDEX_OUT_OF_RANGE);
- }
-
- return(ERROR_NONE);
-}
-
-void FieldSamplerModuleParameters::getVarPtr(const Handle& handle, void*& ptr, size_t& offset) const
-{
- ptr = getVarPtrHelper(&ParamLookupTable[0], const_cast<FieldSamplerModuleParameters::ParametersStruct*>(&parameters()), handle, offset);
-}
-
-
-/* Dynamic Handle Indices */
-
-void FieldSamplerModuleParameters::freeParameterDefinitionTable(NvParameterized::Traits* traits)
-{
- if (!traits)
- {
- return;
- }
-
- if (!mBuiltFlag) // Double-checked lock
- {
- return;
- }
-
- NvParameterized::MutexType::ScopedLock lock(mBuiltFlagMutex);
-
- if (!mBuiltFlag)
- {
- return;
- }
-
- for (uint32_t i = 0; i < NumParamDefs; ++i)
- {
- ParamDefTable[i].~DefinitionImpl();
- }
-
- traits->free(ParamDefTable);
-
- mBuiltFlag = false;
-}
-
-#define PDEF_PTR(index) (&ParamDefTable[index])
-
-void FieldSamplerModuleParameters::buildTree(void)
-{
-
- uint32_t allocSize = sizeof(NvParameterized::DefinitionImpl) * NumParamDefs;
- ParamDefTable = (NvParameterized::DefinitionImpl*)(mParameterizedTraits->alloc(allocSize));
- memset(ParamDefTable, 0, allocSize);
-
- for (uint32_t i = 0; i < NumParamDefs; ++i)
- {
- NV_PARAM_PLACEMENT_NEW(ParamDefTable + i, NvParameterized::DefinitionImpl)(*mParameterizedTraits);
- }
-
- // Initialize DefinitionImpl node: nodeIndex=0, longName=""
- {
- NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[0];
- ParamDef->init("", TYPE_STRUCT, "STRUCT", true);
-
-#ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS
-
-#else
-
- static HintImpl HintTable[1];
- static Hint* HintPtrTable[1] = { &HintTable[0], };
- HintTable[0].init("shortDescription", "This class is used for initializing the ModuleFieldSampler.", true);
- ParamDefTable[0].setHints((const NvParameterized::Hint**)HintPtrTable, 1);
-
-#endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */
-
-
-
-
-
- }
-
- // Initialize DefinitionImpl node: nodeIndex=1, longName="unused"
- {
- NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[1];
- ParamDef->init("unused", TYPE_U32, NULL, true);
-
-#ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS
-
-#else
-
- static HintImpl HintTable[1];
- static Hint* HintPtrTable[1] = { &HintTable[0], };
- HintTable[0].init("shortDescription", "No parameters necessary", true);
- ParamDefTable[1].setHints((const NvParameterized::Hint**)HintPtrTable, 1);
-
-#endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */
-
-
-
-
-
- }
-
- // SetChildren for: nodeIndex=0, longName=""
- {
- static Definition* Children[1];
- Children[0] = PDEF_PTR(1);
-
- ParamDefTable[0].setChildren(Children, 1);
- }
-
- mBuiltFlag = true;
-
-}
-void FieldSamplerModuleParameters::initStrings(void)
-{
-}
-
-void FieldSamplerModuleParameters::initDynamicArrays(void)
-{
-}
-
-void FieldSamplerModuleParameters::initDefaults(void)
-{
-
- freeStrings();
- freeReferences();
- freeDynamicArrays();
- unused = uint32_t(0);
-
- initDynamicArrays();
- initStrings();
- initReferences();
-}
-
-void FieldSamplerModuleParameters::initReferences(void)
-{
-}
-
-void FieldSamplerModuleParameters::freeDynamicArrays(void)
-{
-}
-
-void FieldSamplerModuleParameters::freeStrings(void)
-{
-}
-
-void FieldSamplerModuleParameters::freeReferences(void)
-{
-}
-
-} // namespace fieldsampler
-} // namespace nvidia
diff --git a/APEX_1.4/module/fieldsampler/src/autogen/FieldSamplerPhysXMonitorParams.cpp b/APEX_1.4/module/fieldsampler/src/autogen/FieldSamplerPhysXMonitorParams.cpp
deleted file mode 100644
index 06762a63..00000000
--- a/APEX_1.4/module/fieldsampler/src/autogen/FieldSamplerPhysXMonitorParams.cpp
+++ /dev/null
@@ -1,358 +0,0 @@
-// 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-2015 NVIDIA Corporation. All rights reserved.
-
-// This file was generated by NvParameterized/scripts/GenParameterized.pl
-
-
-#include "FieldSamplerPhysXMonitorParams.h"
-#include <string.h>
-#include <stdlib.h>
-
-using namespace NvParameterized;
-
-namespace nvidia
-{
-namespace fieldsampler
-{
-
-using namespace FieldSamplerPhysXMonitorParamsNS;
-
-const char* const FieldSamplerPhysXMonitorParamsFactory::vptr =
- NvParameterized::getVptr<FieldSamplerPhysXMonitorParams, FieldSamplerPhysXMonitorParams::ClassAlignment>();
-
-const uint32_t NumParamDefs = 4;
-static NvParameterized::DefinitionImpl* ParamDefTable; // now allocated in buildTree [NumParamDefs];
-
-
-static const size_t ParamLookupChildrenTable[] =
-{
- 1, 2, 3,
-};
-
-#define TENUM(type) nvidia::##type
-#define CHILDREN(index) &ParamLookupChildrenTable[index]
-static const NvParameterized::ParamLookupNode ParamLookupTable[NumParamDefs] =
-{
- { TYPE_STRUCT, false, 0, CHILDREN(0), 3 },
- { TYPE_U32, false, (size_t)(&((ParametersStruct*)0)->maxRBCount), NULL, 0 }, // maxRBCount
- { TYPE_U32, false, (size_t)(&((ParametersStruct*)0)->maxPSCount), NULL, 0 }, // maxPSCount
- { TYPE_U32, false, (size_t)(&((ParametersStruct*)0)->maxParticleCount), NULL, 0 }, // maxParticleCount
-};
-
-
-bool FieldSamplerPhysXMonitorParams::mBuiltFlag = false;
-NvParameterized::MutexType FieldSamplerPhysXMonitorParams::mBuiltFlagMutex;
-
-FieldSamplerPhysXMonitorParams::FieldSamplerPhysXMonitorParams(NvParameterized::Traits* traits, void* buf, int32_t* refCount) :
- NvParameters(traits, buf, refCount)
-{
- //mParameterizedTraits->registerFactory(className(), &FieldSamplerPhysXMonitorParamsFactoryInst);
-
- if (!buf) //Do not init data if it is inplace-deserialized
- {
- initDynamicArrays();
- initStrings();
- initReferences();
- initDefaults();
- }
-}
-
-FieldSamplerPhysXMonitorParams::~FieldSamplerPhysXMonitorParams()
-{
- freeStrings();
- freeReferences();
- freeDynamicArrays();
-}
-
-void FieldSamplerPhysXMonitorParams::destroy()
-{
- // We cache these fields here to avoid overwrite in destructor
- bool doDeallocateSelf = mDoDeallocateSelf;
- NvParameterized::Traits* traits = mParameterizedTraits;
- int32_t* refCount = mRefCount;
- void* buf = mBuffer;
-
- this->~FieldSamplerPhysXMonitorParams();
-
- NvParameters::destroy(this, traits, doDeallocateSelf, refCount, buf);
-}
-
-const NvParameterized::DefinitionImpl* FieldSamplerPhysXMonitorParams::getParameterDefinitionTree(void)
-{
- if (!mBuiltFlag) // Double-checked lock
- {
- NvParameterized::MutexType::ScopedLock lock(mBuiltFlagMutex);
- if (!mBuiltFlag)
- {
- buildTree();
- }
- }
-
- return(&ParamDefTable[0]);
-}
-
-const NvParameterized::DefinitionImpl* FieldSamplerPhysXMonitorParams::getParameterDefinitionTree(void) const
-{
- FieldSamplerPhysXMonitorParams* tmpParam = const_cast<FieldSamplerPhysXMonitorParams*>(this);
-
- if (!mBuiltFlag) // Double-checked lock
- {
- NvParameterized::MutexType::ScopedLock lock(mBuiltFlagMutex);
- if (!mBuiltFlag)
- {
- tmpParam->buildTree();
- }
- }
-
- return(&ParamDefTable[0]);
-}
-
-NvParameterized::ErrorType FieldSamplerPhysXMonitorParams::getParameterHandle(const char* long_name, Handle& handle) const
-{
- ErrorType Ret = NvParameters::getParameterHandle(long_name, handle);
- if (Ret != ERROR_NONE)
- {
- return(Ret);
- }
-
- size_t offset;
- void* ptr;
-
- getVarPtr(handle, ptr, offset);
-
- if (ptr == NULL)
- {
- return(ERROR_INDEX_OUT_OF_RANGE);
- }
-
- return(ERROR_NONE);
-}
-
-NvParameterized::ErrorType FieldSamplerPhysXMonitorParams::getParameterHandle(const char* long_name, Handle& handle)
-{
- ErrorType Ret = NvParameters::getParameterHandle(long_name, handle);
- if (Ret != ERROR_NONE)
- {
- return(Ret);
- }
-
- size_t offset;
- void* ptr;
-
- getVarPtr(handle, ptr, offset);
-
- if (ptr == NULL)
- {
- return(ERROR_INDEX_OUT_OF_RANGE);
- }
-
- return(ERROR_NONE);
-}
-
-void FieldSamplerPhysXMonitorParams::getVarPtr(const Handle& handle, void*& ptr, size_t& offset) const
-{
- ptr = getVarPtrHelper(&ParamLookupTable[0], const_cast<FieldSamplerPhysXMonitorParams::ParametersStruct*>(&parameters()), handle, offset);
-}
-
-
-/* Dynamic Handle Indices */
-
-void FieldSamplerPhysXMonitorParams::freeParameterDefinitionTable(NvParameterized::Traits* traits)
-{
- if (!traits)
- {
- return;
- }
-
- if (!mBuiltFlag) // Double-checked lock
- {
- return;
- }
-
- NvParameterized::MutexType::ScopedLock lock(mBuiltFlagMutex);
-
- if (!mBuiltFlag)
- {
- return;
- }
-
- for (uint32_t i = 0; i < NumParamDefs; ++i)
- {
- ParamDefTable[i].~DefinitionImpl();
- }
-
- traits->free(ParamDefTable);
-
- mBuiltFlag = false;
-}
-
-#define PDEF_PTR(index) (&ParamDefTable[index])
-
-void FieldSamplerPhysXMonitorParams::buildTree(void)
-{
-
- uint32_t allocSize = sizeof(NvParameterized::DefinitionImpl) * NumParamDefs;
- ParamDefTable = (NvParameterized::DefinitionImpl*)(mParameterizedTraits->alloc(allocSize));
- memset(ParamDefTable, 0, allocSize);
-
- for (uint32_t i = 0; i < NumParamDefs; ++i)
- {
- NV_PARAM_PLACEMENT_NEW(ParamDefTable + i, NvParameterized::DefinitionImpl)(*mParameterizedTraits);
- }
-
- // Initialize DefinitionImpl node: nodeIndex=0, longName=""
- {
- NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[0];
- ParamDef->init("", TYPE_STRUCT, "STRUCT", true);
-
-
-
-
-
-
- }
-
- // Initialize DefinitionImpl node: nodeIndex=1, longName="maxRBCount"
- {
- NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[1];
- ParamDef->init("maxRBCount", TYPE_U32, NULL, true);
-
-#ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS
-
-#else
-
- static HintImpl HintTable[1];
- static Hint* HintPtrTable[1] = { &HintTable[0], };
- HintTable[0].init("shortDescription", "Maximum number of rigid bodies in scene", true);
- ParamDefTable[1].setHints((const NvParameterized::Hint**)HintPtrTable, 1);
-
-#endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */
-
-
-
-
-
- }
-
- // Initialize DefinitionImpl node: nodeIndex=2, longName="maxPSCount"
- {
- NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[2];
- ParamDef->init("maxPSCount", TYPE_U32, NULL, true);
-
-#ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS
-
-#else
-
- static HintImpl HintTable[1];
- static Hint* HintPtrTable[1] = { &HintTable[0], };
- HintTable[0].init("shortDescription", "Maximum number of particle systems in scene", true);
- ParamDefTable[2].setHints((const NvParameterized::Hint**)HintPtrTable, 1);
-
-#endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */
-
-
-
-
-
- }
-
- // Initialize DefinitionImpl node: nodeIndex=3, longName="maxParticleCount"
- {
- NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[3];
- ParamDef->init("maxParticleCount", TYPE_U32, NULL, true);
-
-#ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS
-
-#else
-
- static HintImpl HintTable[1];
- static Hint* HintPtrTable[1] = { &HintTable[0], };
- HintTable[0].init("shortDescription", "Maximum number of particles in scene", true);
- ParamDefTable[3].setHints((const NvParameterized::Hint**)HintPtrTable, 1);
-
-#endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */
-
-
-
-
-
- }
-
- // SetChildren for: nodeIndex=0, longName=""
- {
- static Definition* Children[3];
- Children[0] = PDEF_PTR(1);
- Children[1] = PDEF_PTR(2);
- Children[2] = PDEF_PTR(3);
-
- ParamDefTable[0].setChildren(Children, 3);
- }
-
- mBuiltFlag = true;
-
-}
-void FieldSamplerPhysXMonitorParams::initStrings(void)
-{
-}
-
-void FieldSamplerPhysXMonitorParams::initDynamicArrays(void)
-{
-}
-
-void FieldSamplerPhysXMonitorParams::initDefaults(void)
-{
-
- freeStrings();
- freeReferences();
- freeDynamicArrays();
- maxRBCount = uint32_t(10000);
- maxPSCount = uint32_t(128);
- maxParticleCount = uint32_t(100000);
-
- initDynamicArrays();
- initStrings();
- initReferences();
-}
-
-void FieldSamplerPhysXMonitorParams::initReferences(void)
-{
-}
-
-void FieldSamplerPhysXMonitorParams::freeDynamicArrays(void)
-{
-}
-
-void FieldSamplerPhysXMonitorParams::freeStrings(void)
-{
-}
-
-void FieldSamplerPhysXMonitorParams::freeReferences(void)
-{
-}
-
-} // namespace fieldsampler
-} // namespace nvidia