diff options
| author | sschirm <[email protected]> | 2016-12-23 14:20:36 +0100 |
|---|---|---|
| committer | sschirm <[email protected]> | 2016-12-23 14:56:17 +0100 |
| commit | ef6937e69e8ee3f409cf9d460d5ad300a65d5924 (patch) | |
| tree | 710426e8daa605551ce3f34b581897011101c30f /APEX_1.4/module/iofx/include/IofxActorCPU.h | |
| parent | Initial commit: (diff) | |
| download | physx-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/iofx/include/IofxActorCPU.h')
| -rw-r--r-- | APEX_1.4/module/iofx/include/IofxActorCPU.h | 267 |
1 files changed, 0 insertions, 267 deletions
diff --git a/APEX_1.4/module/iofx/include/IofxActorCPU.h b/APEX_1.4/module/iofx/include/IofxActorCPU.h deleted file mode 100644 index b83f5afc..00000000 --- a/APEX_1.4/module/iofx/include/IofxActorCPU.h +++ /dev/null @@ -1,267 +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. - */ - - -#ifndef __IOFX_ACTOR_CPU_H__ -#define __IOFX_ACTOR_CPU_H__ - -#include "Apex.h" -#include "IofxActor.h" -#include "InstancedObjectSimulationIntl.h" -#include "ResourceProviderIntl.h" -#include "ApexActor.h" -#include "IofxActorImpl.h" -#include "IofxSceneCPU.h" - -#include "ModifierData.h" - -namespace nvidia -{ -namespace iofx -{ - -class Modifier; -class IofxAssetImpl; -class IofxManager; -class IofxActorCPU; -class IosObjectCpuData; - -class TaskModifiers : public PxLightCpuTask -{ -public: - TaskModifiers(IofxActorCPU& owner) : mOwner(owner) {} - const char* getName() const - { - return "IofxActorCPU::Modifiers"; - } - void run(); - -protected: - IofxActorCPU& mOwner; - -private: - TaskModifiers& operator=(const TaskModifiers&); -}; - -class IofxActorCPU : public IofxActorImpl -{ -public: - IofxActorCPU(ResID, IofxScene*, IofxManager& ); - ~IofxActorCPU() {} - - void updateBounds(); - - void runModifiers(); - - - template <typename Input, typename PublicState, typename PrivateState, typename OutputLayout> - void updateParticles(const IosObjectCpuData& objData, const OutputLayout& outputLayout, const uint8_t* ptr); - - - TaskModifiers mModifierTask; - - PxBounds3 mWorkingBounds; - ObjectRange mWorkingRange; - uint32_t mWorkingVisibleCount; -}; - -template <typename T> -void FromSlices(IofxSlice** slices, uint32_t idx, T& val) -{ - size_t i = 0; - IofxSlice* data = (IofxSlice*)&val; - for (; i != sizeof(T) / sizeof(IofxSlice); ++i, ++data) - { - *data = slices[i][idx]; - } - - uint32_t tail = sizeof(T) % sizeof(IofxSlice); - if (!tail) - { - return; - } - - uint32_t* u32s = (uint32_t*)data; - - if (4 == tail) - { - u32s[0] = slices[i][idx].x; - } - else if (8 == tail) - { - u32s[0] = slices[i][idx].x; - u32s[1] = slices[i][idx].y; - } - else if (12 == tail) - { - u32s[0] = slices[i][idx].x; - u32s[1] = slices[i][idx].y; - u32s[2] = slices[i][idx].z; - } - else - { - PX_ALWAYS_ASSERT(); - } -} - -template <typename T> -void ToSlices(IofxSlice** slices, uint32_t idx, const T& val) -{ - size_t i = 0; - const IofxSlice* data = (const IofxSlice*)&val; - for (; i != sizeof(T) / sizeof(IofxSlice); ++i, ++data) - { - slices[i][idx] = *data; - } - - uint32_t tail = sizeof(T) % sizeof(IofxSlice); - if (!tail) - { - return; - } - - const uint32_t* u32s = (const uint32_t*)data; - - if (4 == tail) - { - slices[i][idx].x = u32s[0]; - } - else if (8 == tail) - { - slices[i][idx].x = u32s[0]; - slices[i][idx].y = u32s[1]; - } - else if (12 == tail) - { - slices[i][idx].x = u32s[0]; - slices[i][idx].y = u32s[1]; - slices[i][idx].z = u32s[2]; - } - else - { - PX_ALWAYS_ASSERT(); - } -} - -template <typename Input, typename PublicState, typename PrivateState, typename OutputLayout> -void IofxActorCPU::updateParticles(const IosObjectCpuData& objData, const OutputLayout& outputLayout, const uint8_t* ptr) -{ - IofxSlice** inPubState = objData.inPubState; - IofxSlice** inPrivState = objData.inPrivState; - IofxSlice** outPubState = objData.outPubState; - IofxSlice** outPrivState = objData.outPrivState; - - ModifierCommonParams common = objData.getCommonParams(); - - RandState randState(mIofxScene->mApexScene->getSeed()); - - for (uint32_t id = 0; id < mWorkingRange.objectCount; id++) - { - uint32_t outputID = mWorkingRange.startIndex + id; - uint32_t stateID = objData.outputToState[ outputID ]; - PX_ASSERT(stateID != IosBufferDescIntl::NOT_A_PARTICLE); - PX_ASSERT(stateID < objData.maxStateID); - uint32_t inputID = objData.pmaInStateToInput->get(stateID); - - bool newParticle = false; - if (inputID & IosBufferDescIntl::NEW_PARTICLE_FLAG) - { - newParticle = true; - inputID &= ~IosBufferDescIntl::NEW_PARTICLE_FLAG; - } - - const IofxActorIDIntl actorId = objData.pmaActorIdentifiers->get(inputID); - const uint16_t actorClassId = actorId.getActorClassID(); - PX_ASSERT(actorClassId < mMgr.mActorClassTable.size()); - - IofxManagerClient* iofxClient = mMgr.mActorClassTable[ actorClassId ].client; - PX_ASSERT(iofxClient != NULL); - IofxAssetSceneInstCPU* iofxAssetSceneInst = static_cast<IofxAssetSceneInstCPU*>(iofxClient->getAssetSceneInst()); - PX_ASSERT(iofxAssetSceneInst != NULL); - - Input input; - input.load(objData, inputID); - - PublicState pubState; - PrivateState privState; - - if (newParticle) - { - PublicState::initDefault(pubState, iofxClient->getParams().objectScale); - PrivateState::initDefault(privState); - - for (uint32_t j = 0; j < iofxAssetSceneInst->mSpawnModifiersList.size(); j++) - { - const void* params = &iofxAssetSceneInst->mModifiersParamsBuffer[ iofxAssetSceneInst->mSpawnModifiersList[j].paramsOffset ]; - iofxAssetSceneInst->mSpawnModifiersList[j].updateFunc(params, input, pubState, privState, common, randState); - } - } - else - { - PX_ASSERT(stateID < objData.maxObjectCount); - - FromSlices(inPubState, stateID, pubState); - FromSlices(inPrivState, stateID, privState); - } - - ToSlices(outPubState, outputID, pubState); - - for (uint32_t j = 0; j < iofxAssetSceneInst->mContinuousModifiersList.size(); j++) - { - const void* params = &iofxAssetSceneInst->mModifiersParamsBuffer[ iofxAssetSceneInst->mContinuousModifiersList[j].paramsOffset ]; - iofxAssetSceneInst->mContinuousModifiersList[j].updateFunc(params, input, pubState, privState, common, randState); - } - - objData.pmaOutStateToInput->get(outputID) = inputID; - ToSlices(outPrivState, outputID, privState); - - outputLayout.write(outputID, input, pubState, ptr); - } -} - -class ModifierParamsMapperCPUimpl; - -class IofxAssetSceneInstCPU : public IofxAssetSceneInst -{ -public: - IofxAssetSceneInstCPU(IofxAssetImpl* asset, uint32_t semantics, IofxScene* scene); - virtual ~IofxAssetSceneInstCPU() {} - - struct ModifierInfo - { - union - { - ModifierImpl::updateSpriteFunc updateSpriteFunc; - ModifierImpl::updateMeshFunc updateMeshFunc; - }; - void updateFunc(const void* params, const SpriteInput& input, SpritePublicState& pubState, SpritePrivateState& privState, const ModifierCommonParams& common, RandState& randState) - { - updateSpriteFunc(params, input, pubState, privState, common, randState); - } - void updateFunc(const void* params, const MeshInput& input, MeshPublicState& pubState, MeshPrivateState& privState, const ModifierCommonParams& common, RandState& randState) - { - updateMeshFunc(params, input, pubState, privState, common, randState); - } - - uint32_t paramsOffset; - }; - - uint32_t introspectModifiers(ModifierParamsMapperCPUimpl& introspector, ModifierInfo* list, const ModifierStack& stack, ModifierStage stage, uint32_t usageClass); - - physx::Array<ModifierInfo> mSpawnModifiersList; - physx::Array<ModifierInfo> mContinuousModifiersList; - physx::Array<uint8_t> mModifiersParamsBuffer; -}; - - -} -} // namespace nvidia - -#endif // __IOFX_ACTOR_CPU_H__ |