MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/Blast / blast

Function blast

test/src/unit/MultithreadingTests.cpp:48–116  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

46
47
48static void blast(std::set<NvBlastActor*>& actorsToDamage, GeneratorAsset* testAsset, GeneratorAsset::Vec3 localPos, float minRadius, float maxRadius, float compressiveDamage)
49{
50 std::vector<NvBlastChunkFractureData> chunkEvents; /* num lower-support chunks + bonds */
51 std::vector<NvBlastBondFractureData> bondEvents; /* num lower-support chunks + bonds */
52 chunkEvents.resize(testAsset->solverChunks.size());
53 bondEvents.resize(testAsset->solverBonds.size());
54
55 NvBlastFractureBuffers events = { static_cast<uint32_t>(bondEvents.size()), static_cast<uint32_t>(chunkEvents.size()), bondEvents.data(), chunkEvents.data() };
56
57 std::vector<float> scratch(chunkEvents.size() + bondEvents.size(), 0.0f);
58
59 std::vector<char> splitScratch;
60 std::vector<NvBlastActor*> newActorsBuffer(testAsset->solverChunks.size());
61
62 NvBlastExtRadialDamageDesc damage = {
63 compressiveDamage,
64 { localPos.x, localPos.y, localPos.z },
65 minRadius,
66 maxRadius
67 };
68
69 NvBlastExtProgramParams programParams =
70 {
71 &damage,
72 nullptr
73 };
74
75 NvBlastDamageProgram program = {
76 NvBlastExtFalloffGraphShader,
77 nullptr
78 };
79
80 size_t totalNewActorsCount = 0;
81 for (std::set<NvBlastActor*>::iterator k = actorsToDamage.begin(); k != actorsToDamage.end();)
82 {
83 NvBlastActor* actor = *k;
84
85 NvBlastActorGenerateFracture(&events, actor, program, &programParams, nullptr, nullptr);
86 NvBlastActorApplyFracture(&events, actor, &events, nullptr, nullptr);
87
88 bool removeActor = false;
89
90 if (events.bondFractureCount + events.chunkFractureCount > 0)
91 {
92 NvBlastActorSplitEvent splitEvent;
93 splitEvent.newActors = &newActorsBuffer.data()[totalNewActorsCount];
94 uint32_t newActorSize = (uint32_t)(newActorsBuffer.size() - totalNewActorsCount);
95
96 splitScratch.resize((size_t)NvBlastActorGetRequiredScratchForSplit(actor, nullptr));
97 const size_t newActorsCount = NvBlastActorSplit(&splitEvent, actor, newActorSize, splitScratch.data(), nullptr, nullptr);
98 totalNewActorsCount += newActorsCount;
99 removeActor = splitEvent.deletedActor != NULL;
100 }
101
102 if (removeActor)
103 {
104 k = actorsToDamage.erase(k);
105 }

Callers 1

processMethod · 0.70

Calls 7

NvBlastActorSplitFunction · 0.85
resizeMethod · 0.80
sizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected