29 #ifndef NVBLASTACTOR_H 30 #define NVBLASTACTOR_H 65 Actor() : m_familyOffset(0), m_firstVisibleChunkIndex(
UINT32_MAX), m_visibleChunkCount(0), m_firstGraphNodeIndex(
UINT32_MAX), m_graphNodeCount(0), m_leafChunkCount(0) {}
339 uint32_t
damageBond(uint32_t nodeIndex0, uint32_t nodeIndex1,
float healthDamage);
344 void damageBond(uint32_t nodeIndex0, uint32_t nodeIndex1, uint32_t bondIndex,
float healthDamage);
455 uint32_t m_familyOffset;
461 uint32_t m_firstVisibleChunkIndex;
466 uint32_t m_visibleChunkCount;
472 uint32_t m_firstGraphNodeIndex;
477 uint32_t m_graphNodeCount;
482 uint32_t m_leafChunkCount;
502 return (
FamilyHeader*)((uintptr_t)
this - (uintptr_t)m_familyOffset);
514 return m_familyOffset != 0;
520 return m_graphNodeCount == 0;
526 return m_graphNodeCount == 1;
535 const size_t index =
this - header->getActors();
537 return (uint32_t)index;
543 return m_visibleChunkCount;
549 return m_firstVisibleChunkIndex;
555 return m_graphNodeCount;
561 return m_leafChunkCount;
567 return m_firstGraphNodeIndex;
627 uint32_t* graphNodeIndexLinks =
getFamilyHeader()->getGraphNodeIndexLinks();
630 const uint32_t graphNodeIndex = m_firstGraphNodeIndex;
631 m_firstGraphNodeIndex = graphNodeIndexLinks[m_firstGraphNodeIndex];
632 graphNodeIndexLinks[graphNodeIndex] = invalidIndex<uint32_t>();
641 uint32_t* chunkActorIndices = header->getChunkActorIndices();
647 chunkActorIndices[(uint32_t)i] = invalidIndex<uint32_t>();
650 --m_visibleChunkCount;
655 m_leafChunkCount = 0;
666 NVBLASTLL_CHECK(newActorsSize == 0 || newActors !=
nullptr, logFn,
"Nv::Blast::Actor::partition: NULL newActors pointer array input with non-zero newActorCount.",
return 0);
669 return m_graphNodeCount <= 1 ?
684 const uint32_t lastGraphChunkIndex = graph.getChunkIndices()[graph.
m_nodeCount - 1];
703 if (chunkHealths[chunkHealthIndex] <= 0.0f)
705 const uint32_t chunkIndex = m_graphNodeCount == 0 ? m_firstVisibleChunkIndex :
getGraph()->getChunkIndices()[m_firstGraphNodeIndex];
710 return childCount > 0;
716 uint32_t* firstDirtyNodeIndices =
getFamilyGraph()->getFirstDirtyNodeIndices();
743 #if NVBLASTLL_CHECK_PARAMS 764 #endif // ifndef NVBLASTACTOR_H uint32_t getFirstSubsupportChunkIndex() const
Definition: NvBlastActor.h:570
void applyFracture(NvBlastFractureBuffers *eventBuffers, const NvBlastFractureBuffers *commands, NvBlastLog logFn, NvBlastTimers *timers)
Definition: NvBlastTypes.h:395
static Actor * create(NvBlastFamily *family, const NvBlastActorDesc *desc, void *scratch, NvBlastLog logFn)
#define UINT32_MAX
Definition: NvBlastPreprocessorInternal.h:68
uint32_t partitionMultipleGraphNodes(Actor **newActors, uint32_t newActorsSize, NvBlastLog logFn)
Definition: NvBlastFamilyGraph.h:58
NvBlastChunk * getChunks() const
Definition: NvBlastActor.h:585
bool isActive() const
Definition: NvBlastActor.h:512
Definition: NvBlastSupportGraph.h:76
float * getBondHealths() const
Definition: NvBlastActor.h:605
Definition: NvBlastTypes.h:189
uint32_t damageBond(uint32_t nodeIndex0, uint32_t nodeIndex1, float healthDamage)
FamilyHeader * getFamilyHeader() const
Definition: NvBlastActor.h:499
const Asset * getAsset() const
Definition: NvBlastActor.h:506
uint32_t getVisibleChunkCount() const
Definition: NvBlastActor.h:541
uint32_t split(NvBlastActorSplitEvent *result, uint32_t newActorsMaxCount, void *scratch, NvBlastLog logFn, NvBlastTimers *timers)
NvBlastBond * getBonds() const
Definition: NvBlastActor.h:590
uint32_t chunkFractureCount
available elements in chunkFractures
Definition: NvBlastTypes.h:471
Definition: NvBlastTypes.h:453
size_t splitRequiredScratch() const
NV_INLINE bool isInvalidIndex(T index)
Definition: NvBlastIndexFns.h:57
GraphNodeIt(const Actor &actor)
Definition: NvBlastActor.h:736
Actor()
Definition: NvBlastActor.h:65
void updateVisibleChunksFromGraphNodes()
const uint32_t * getGraphNodeIndexLinks() const
Definition: NvBlastActor.h:610
void(* NvBlastLog)(int type, const char *msg, const char *file, int line)
Definition: NvBlastTypes.h:63
NvBlastChunkFractureData * chunkFractures
memory to be filled by fracture functions
Definition: NvBlastTypes.h:473
uint32_t getLeafChunkCount() const
Definition: NvBlastActor.h:559
void generateFracture(NvBlastFractureBuffers *commandBuffers, const NvBlastDamageProgram &program, const void *programParams, NvBlastLog logFn, NvBlastTimers *timers) const
#define NVBLASTLL_CHECK(_expr, _logFn, _msg, _onFail)
Definition: NvBlastPreprocessorInternal.h:59
#define NVBLAST_ASSERT(exp)
Definition: NvBlastAssert.h:37
Definition: NvBlastTypes.h:85
bool isSplitRequired() const
Definition: NvBlastActor.h:695
bool isSingleSupportChunk() const
Definition: NvBlastActor.h:524
Definition: NvBlastTypes.h:584
NvBlastBondFractureData * bondFractures
memory to be filled by fracture functions
Definition: NvBlastTypes.h:472
static size_t createRequiredScratch(const NvBlastFamily *family)
bool isBoundToWorld() const
Definition: NvBlastActor.h:675
Definition: NvBlastTypes.h:481
uint32_t childIndexStop
Definition: NvBlastTypes.h:177
uint32_t m_firstSubsupportChunkIndex
Definition: NvBlastAsset.h:207
uint32_t bondFractureCount
available elements in bondFractures
Definition: NvBlastTypes.h:470
const SupportGraph * getGraph() const
Definition: NvBlastActor.h:575
float * getSubsupportChunkHealths() const
Definition: NvBlastActor.h:600
Definition: NvBlastAsset.h:253
uint32_t findIslands(void *scratch)
Definition: NvBlastActor.h:233
uint32_t serializationRequiredStorage(NvBlastLog logFn) const
uint32_t getFirstVisibleChunkIndex() const
Definition: NvBlastActor.h:547
#define NV_INLINE
Definition: NvPreprocessor.h:350
uint32_t m_nodeCount
Definition: NvBlastSupportGraph.h:81
FamilyGraph * getFamilyGraph() const
Definition: NvBlastActor.h:580
Definition: NvBlastIteratorBase.h:121
Definition: NvBlastDLink.h:50
Definition: NvBlastTypes.h:152
uint32_t partition(Actor **newActors, uint32_t newActorsSize, NvBlastLog logFn)
Definition: NvBlastActor.h:664
SupportGraph m_graph
Definition: NvBlastAsset.h:197
Definition: NvBlastIteratorBase.h:88
Definition: NvBlastTypes.h:468
Definition: NvBlastActor.h:58
bool release()
Definition: NvBlastActor.h:616
uint32_t getIndex() const
Definition: NvBlastActor.h:530
VisibleChunkIt(const Actor &actor)
Definition: NvBlastActor.h:729
uint32_t getFirstGraphNodeIndex() const
Definition: NvBlastActor.h:565
uint32_t getGraphNodeCount() const
Definition: NvBlastActor.h:553
static Actor * deserialize(NvBlastFamily *family, const void *buffer, NvBlastLog logFn)
uint32_t serialize(void *buffer, uint32_t bufferSize, NvBlastLog logFn) const
Definition: NvBlastArray.h:37
uint32_t partitionSingleLowerSupportChunk(Actor **newActors, uint32_t newActorsSize, NvBlastLog logFn)
float * getLowerSupportChunkHealths() const
Definition: NvBlastActor.h:595
bool isSubSupportChunk() const
Definition: NvBlastActor.h:518
Definition: NvBlastTypes.h:387
Definition: NvBlastAsset.h:45
Definition: NvBlastActor.h:253
Definition: NvBlastTypes.h:376
uint32_t firstChildIndex
Definition: NvBlastTypes.h:172