aboutsummaryrefslogtreecommitdiff
path: root/sdk/toolkit/source
diff options
context:
space:
mode:
authorBryan Galdrikian <[email protected]>2017-10-24 15:25:02 -0700
committerBryan Galdrikian <[email protected]>2017-10-24 15:25:02 -0700
commitb0c11962f6012430da3bcaa2727288046b33d648 (patch)
treecf13338fa4fd7072badf64f751f94abeeb437003 /sdk/toolkit/source
parentlinux build fix - all configs (diff)
downloadblast-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.cpp92
-rw-r--r--sdk/toolkit/source/NvBlastTkActorImpl.h83
-rw-r--r--sdk/toolkit/source/NvBlastTkFamilyImpl.cpp4
-rw-r--r--sdk/toolkit/source/NvBlastTkFamilyImpl.h17
-rw-r--r--sdk/toolkit/source/NvBlastTkTaskImpl.cpp2
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)