diff options
| author | Bryan Galdrikian <[email protected]> | 2017-10-24 15:25:02 -0700 |
|---|---|---|
| committer | Bryan Galdrikian <[email protected]> | 2017-10-24 15:25:02 -0700 |
| commit | b0c11962f6012430da3bcaa2727288046b33d648 (patch) | |
| tree | cf13338fa4fd7072badf64f751f94abeeb437003 /sdk/toolkit/source | |
| parent | linux build fix - all configs (diff) | |
| download | blast-b0c11962f6012430da3bcaa2727288046b33d648.tar.xz blast-b0c11962f6012430da3bcaa2727288046b33d648.zip | |
Changes for 1.1.1
See README.md
Diffstat (limited to 'sdk/toolkit/source')
| -rw-r--r-- | sdk/toolkit/source/NvBlastTkActorImpl.cpp | 92 | ||||
| -rw-r--r-- | sdk/toolkit/source/NvBlastTkActorImpl.h | 83 | ||||
| -rw-r--r-- | sdk/toolkit/source/NvBlastTkFamilyImpl.cpp | 4 | ||||
| -rw-r--r-- | sdk/toolkit/source/NvBlastTkFamilyImpl.h | 17 | ||||
| -rw-r--r-- | sdk/toolkit/source/NvBlastTkTaskImpl.cpp | 2 |
5 files changed, 25 insertions, 173 deletions
diff --git a/sdk/toolkit/source/NvBlastTkActorImpl.cpp b/sdk/toolkit/source/NvBlastTkActorImpl.cpp index cc2e322..c4515f1 100644 --- a/sdk/toolkit/source/NvBlastTkActorImpl.cpp +++ b/sdk/toolkit/source/NvBlastTkActorImpl.cpp @@ -62,9 +62,9 @@ TkActorImpl* TkActorImpl::create(const TkActorDesc& desc) TkActorImpl* actor = family->addActor(actorLL); - // Add internal joints if (actor != nullptr) { + // Add internal joints const uint32_t internalJointCount = asset->getJointDescCountInternal(); const TkAssetJointDesc* jointDescs = asset->getJointDescsInternal(); const NvBlastSupportGraph graph = asset->getGraph(); @@ -82,6 +82,9 @@ TkActorImpl* TkActorImpl::create(const TkActorDesc& desc) TkJointImpl* joint = new (joints + jointNum) TkJointImpl(jointDesc, family); actor->addJoint(joint->m_links[0]); } + + // Mark as damaged to trigger first split call. It could be the case that asset is already split into few actors initially. + actor->markAsDamaged(); } return actor; @@ -277,7 +280,7 @@ TkActorImpl::operator Nv::Blast::TkActorData() const } -void TkActorImpl::damage(const NvBlastDamageProgram& program, const NvBlastProgramParams* programParams) +void TkActorImpl::damage(const NvBlastDamageProgram& program, const void* programParams) { BLAST_PROFILE_SCOPE_L("TkActor::damage"); @@ -295,57 +298,13 @@ void TkActorImpl::damage(const NvBlastDamageProgram& program, const NvBlastProgr if (NvBlastActorCanFracture(m_actorLL, logLL)) { - m_damageBuffer.pushBack(DamageData(program, programParams)); + m_damageBuffer.pushBack(DamageData{ program, programParams}); makePending(); } } -void TkActorImpl::damage(const NvBlastDamageProgram& program, const void* damageDesc, uint32_t descSize) -{ - damage(program, damageDesc, descSize, m_family->getMaterial()); -} - - -void TkActorImpl::damage(const NvBlastDamageProgram& program, const void* damageDesc, uint32_t descSize, const void* material) -{ - BLAST_PROFILE_SCOPE_L("TkActor::damage"); - - if (m_group == nullptr) - { - NVBLAST_LOG_WARNING("TkActor::damage: actor is not in a group, cannot fracture."); - return; - } - - if (m_group->isProcessing()) - { - NVBLAST_LOG_WARNING("TkActor::damage: group is being processed, cannot fracture this actor."); - return; - } - - if (NvBlastActorCanFracture(m_actorLL, logLL)) - { - bool appended = false; - for (auto& damageData : m_damageBuffer) - { - if (damageData.tryAppend(program, material, damageDesc, descSize)) - { - appended = true; - break; - } - } - - if (!appended) - { - m_damageBuffer.pushBack(DamageData(program, material, damageDesc, descSize)); - } - - makePending(); - } -} - - -void TkActorImpl::generateFracture(NvBlastFractureBuffers* commands, const NvBlastDamageProgram& program, const NvBlastProgramParams* programParams) const +void TkActorImpl::generateFracture(NvBlastFractureBuffers* commands, const NvBlastDamageProgram& program, const void* programParams) const { BLAST_PROFILE_SCOPE_L("TkActor::generateFracture"); @@ -410,42 +369,5 @@ bool TkActorImpl::isBoundToWorld() const } -//////// TkActorImpl::DamageData methods //////// - -static bool operator==(const NvBlastDamageProgram& lhs, const NvBlastDamageProgram& rhs) -{ - return lhs.graphShaderFunction == rhs.graphShaderFunction && lhs.subgraphShaderFunction == rhs.subgraphShaderFunction; -} - - -TkActorImpl::DamageData::DamageData(const NvBlastDamageProgram& program, const NvBlastProgramParams* params) - : m_program(program), m_programParams(params), m_damageDescCount(0) -{ -} - - -TkActorImpl::DamageData::DamageData(const NvBlastDamageProgram& program, const void* material, const void* desc, uint32_t descSize) - : m_program(program), m_material(material), m_damageDescs((char*)desc, (char*)desc + descSize), m_damageDescCount(1) -{ -} - - -bool TkActorImpl::DamageData::tryAppend(const NvBlastDamageProgram& program, const void* material, const void* desc, uint32_t descSize) -{ - if (getType() == Buffered && m_program == program && m_material == material) - { - const uint32_t currentDescSize = m_damageDescs.size() / m_damageDescCount; - if (descSize == currentDescSize) - { - const uint32_t s = m_damageDescs.size(); - m_damageDescs.resizeUninitialized(s + static_cast<uint32_t>(descSize)); - memcpy(m_damageDescs.begin() + s, desc, descSize); - m_damageDescCount++; - return true; - } - } - return false; -} - } // namespace Blast } // namespace Nv diff --git a/sdk/toolkit/source/NvBlastTkActorImpl.h b/sdk/toolkit/source/NvBlastTkActorImpl.h index 33fde68..2076654 100644 --- a/sdk/toolkit/source/NvBlastTkActorImpl.h +++ b/sdk/toolkit/source/NvBlastTkActorImpl.h @@ -103,13 +103,11 @@ public: virtual uint32_t getSplitMaxActorCount() const override; - virtual void damage(const NvBlastDamageProgram& program, const NvBlastProgramParams* programParams) override; - virtual void damage(const NvBlastDamageProgram& program, const void* damageDesc, uint32_t descSize) override; - virtual void damage(const NvBlastDamageProgram& program, const void* damageDesc, uint32_t descSize, const void* material) override; + virtual void damage(const NvBlastDamageProgram& program, const void* programParams) override; virtual bool isPending() const override; - virtual void generateFracture(NvBlastFractureBuffers* commands, const NvBlastDamageProgram& program, const NvBlastProgramParams* programParams) const override; + virtual void generateFracture(NvBlastFractureBuffers* commands, const NvBlastDamageProgram& program, const void* programParams) const override; virtual void applyFracture(NvBlastFractureBuffers* eventBuffers, const NvBlastFractureBuffers* commands) override; @@ -211,36 +209,6 @@ public: private: /** - Used to buffer damage for deferred fracture generation. Unifies 2 different ways to pass and store damage data. - */ - struct DamageData - { - DamageData(const NvBlastDamageProgram& program, const NvBlastProgramParams* params); - DamageData(const NvBlastDamageProgram& program, const void* material, const void* desc, uint32_t descSize); - - bool tryAppend(const NvBlastDamageProgram& program, const void* material, const void* desc, uint32_t descSize); - void generateFracture(NvBlastFractureBuffers* commandBuffers, const NvBlastActor* actorLL, NvBlastTimers* timers) const; - - enum Type - { - Plain, - Buffered - }; - - Type getType() const; - - NvBlastDamageProgram m_program; - union - { - const void* m_material; //!< for Buffered type - const NvBlastProgramParams* m_programParams; //!< for Plain type - }; - Array<char>::type m_damageDescs; - uint32_t m_damageDescCount; - }; - - - /** Functions to raise or check 'damaged' state: this actor will take the split step. 'damaged' actors automatically become 'pending' also. */ @@ -259,17 +227,22 @@ private: void addJoint(TkJointLink& jointLink); void removeJoint(TkJointLink& jointLink); + struct DamageData + { + NvBlastDamageProgram program; + const void* programParams; + }; // Data - NvBlastActor* m_actorLL; //!< The low-level actor associated with this actor - TkFamilyImpl* m_family; //!< The TkFamilyImpl to which this actor belongs - TkGroupImpl* m_group; //!< The TkGroupImpl (if any) to which this actor belongs - uint32_t m_groupJobIndex; //!< The index of this actor's job within its group's job list - physx::PxFlags<TkActorFlag::Enum, char> m_flags; //!< Status flags for this actor - Array<DamageData>::type m_damageBuffer; //!< Buffered damage input - uint32_t m_jointCount; //!< The number of joints referenced in m_jointList - DList m_jointList; //!< A doubly-linked list of joint references + NvBlastActor* m_actorLL; //!< The low-level actor associated with this actor + TkFamilyImpl* m_family; //!< The TkFamilyImpl to which this actor belongs + TkGroupImpl* m_group; //!< The TkGroupImpl (if any) to which this actor belongs + uint32_t m_groupJobIndex; //!< The index of this actor's job within its group's job list + physx::PxFlags<TkActorFlag::Enum, char> m_flags; //!< Status flags for this actor + Array<DamageData>::type m_damageBuffer; //!< Buffered damage input + uint32_t m_jointCount; //!< The number of joints referenced in m_jointList + DList m_jointList; //!< A doubly-linked list of joint references //#if NV_PROFILE NvBlastTimers m_timers; //!< If profiling, each actor stores timing data @@ -351,32 +324,6 @@ NV_INLINE void TkActorImpl::removeJoint(TkJointLink& jointLink) } -//////// TkActorImpl::DamageData inline methods //////// - -NV_INLINE TkActorImpl::DamageData::Type TkActorImpl::DamageData::getType() const -{ - return m_damageDescCount > 0 ? Buffered : Plain; -} - - -NV_INLINE void TkActorImpl::DamageData::generateFracture(NvBlastFractureBuffers* commandBuffers, const NvBlastActor* actorLL, NvBlastTimers* timers) const -{ - if (getType() == Plain) - { - NvBlastActorGenerateFracture(commandBuffers, actorLL, m_program, m_programParams, logLL, timers); - } - else - { - const NvBlastProgramParams programParams = { - m_damageDescs.begin(), - m_damageDescCount, - m_material, - }; - NvBlastActorGenerateFracture(commandBuffers, actorLL, m_program, &programParams, logLL, timers); - } -} - - //////// TkActorImpl::JointIt methods //////// NV_INLINE TkActorImpl::JointIt::JointIt(const TkActorImpl& actor, Direction dir) : DList::It(actor.m_jointList, dir) {} diff --git a/sdk/toolkit/source/NvBlastTkFamilyImpl.cpp b/sdk/toolkit/source/NvBlastTkFamilyImpl.cpp index b62be2e..f12b1d5 100644 --- a/sdk/toolkit/source/NvBlastTkFamilyImpl.cpp +++ b/sdk/toolkit/source/NvBlastTkFamilyImpl.cpp @@ -49,12 +49,12 @@ NVBLASTTK_DEFINE_TYPE_IDENTIFIABLE(Family); //////// Member functions //////// -TkFamilyImpl::TkFamilyImpl() : m_familyLL(nullptr), m_internalJointCount(0), m_asset(nullptr), m_material(nullptr) +TkFamilyImpl::TkFamilyImpl() : m_familyLL(nullptr), m_internalJointCount(0), m_asset(nullptr) { } -TkFamilyImpl::TkFamilyImpl(const NvBlastID& id) : TkFamilyType(id), m_familyLL(nullptr), m_internalJointCount(0), m_asset(nullptr), m_material(nullptr) +TkFamilyImpl::TkFamilyImpl(const NvBlastID& id) : TkFamilyType(id), m_familyLL(nullptr), m_internalJointCount(0), m_asset(nullptr) { } diff --git a/sdk/toolkit/source/NvBlastTkFamilyImpl.h b/sdk/toolkit/source/NvBlastTkFamilyImpl.h index 577326b..7210f0a 100644 --- a/sdk/toolkit/source/NvBlastTkFamilyImpl.h +++ b/sdk/toolkit/source/NvBlastTkFamilyImpl.h @@ -82,10 +82,6 @@ public: virtual const TkAsset* getAsset() const override; virtual void reinitialize(const NvBlastFamily* newFamily, TkGroup* group) override; - - virtual const void* getMaterial() const override; - - virtual void setMaterial(const void* material) override; // End TkFamily // Public methods @@ -145,7 +141,6 @@ private: Array<JointSet*>::type m_jointSets; FamilyIDMap m_familyIDMap; const TkAssetImpl* m_asset; - const void* m_material; TkEventQueue m_queue; }; @@ -187,18 +182,6 @@ NV_INLINE TkActorImpl* TkFamilyImpl::getActorByActorLL(const NvBlastActor* actor } -NV_INLINE const void* TkFamilyImpl::getMaterial() const -{ - return m_material; -} - - -NV_INLINE void TkFamilyImpl::setMaterial(const void* material) -{ - m_material = material; -} - - NV_INLINE Array<TkActorImpl>::type& TkFamilyImpl::getActorsInternal() { return m_actors; diff --git a/sdk/toolkit/source/NvBlastTkTaskImpl.cpp b/sdk/toolkit/source/NvBlastTkTaskImpl.cpp index bc825a7..d88607c 100644 --- a/sdk/toolkit/source/NvBlastTkTaskImpl.cpp +++ b/sdk/toolkit/source/NvBlastTkTaskImpl.cpp @@ -180,7 +180,7 @@ void TkWorker::process(TkWorkerJob& j) NvBlastFractureBuffers commandBuffer = m_tempBuffer; BLAST_PROFILE_ZONE_BEGIN("Material"); - damage.generateFracture(&commandBuffer, actorLL, timers); + NvBlastActorGenerateFracture(&commandBuffer, actorLL, damage.program, damage.programParams, logLL, timers); BLAST_PROFILE_ZONE_END("Material"); if (commandBuffer.chunkFractureCount > 0 || commandBuffer.bondFractureCount > 0) |