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

Function blast

test/src/perf/SolverPerfTests.cpp:35–109  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33
34
35static void blast
36(
37 std::set<NvBlastActor*>& actorsToDamage,
38 GeneratorAsset* testAsset,
39 GeneratorAsset::Vec3 localPos,
40 float minRadius, float maxRadius,
41 float compressiveDamage,
42 NvBlastTimers& timers
43)
44{
45 std::vector<NvBlastChunkFractureData> chunkEvents; /* num lower-support chunks + bonds */
46 std::vector<NvBlastBondFractureData> bondEvents; /* num lower-support chunks + bonds */
47 chunkEvents.resize(testAsset->solverChunks.size());
48 bondEvents.resize(testAsset->solverBonds.size());
49
50 NvBlastExtRadialDamageDesc damage[] = {
51 compressiveDamage,
52 { localPos.x, localPos.y, localPos.z },
53 minRadius,
54 maxRadius
55 };
56
57 NvBlastExtProgramParams programParams =
58 {
59 damage,
60 nullptr
61 };
62
63 NvBlastDamageProgram program = {
64 NvBlastExtFalloffGraphShader,
65 nullptr
66 };
67
68 std::vector<char> splitScratch;
69 std::vector<NvBlastActor*> newActors(testAsset->solverChunks.size());
70
71 size_t totalNewActorsCount = 0;
72 for (std::set<NvBlastActor*>::iterator k = actorsToDamage.begin(); k != actorsToDamage.end();)
73 {
74 NvBlastActor* actor = *k;
75
76 NvBlastFractureBuffers events = { (uint32_t)bondEvents.size(), (uint32_t)chunkEvents.size(), bondEvents.data(), chunkEvents.data() };
77
78 NvBlastActorGenerateFracture(&events, actor, program, &programParams, nullptr, &timers);
79 NvBlastActorApplyFracture(&events, actor, &events, nullptr, &timers);
80
81 bool removeActor = false;
82
83 if (events.bondFractureCount + events.chunkFractureCount > 0)
84 {
85 splitScratch.resize((size_t)NvBlastActorGetRequiredScratchForSplit(actor, nullptr));
86 NvBlastActorSplitEvent result;
87 result.deletedActor = nullptr;
88 result.newActors = &newActors[totalNewActorsCount];
89 const size_t bufferSize = newActors.size() - totalNewActorsCount;
90 const size_t newActorsCount = NvBlastActorSplit(&result, actor, (uint32_t)bufferSize, splitScratch.data(), nullptr, &timers);
91 totalNewActorsCount += newActorsCount;
92 removeActor = newActorsCount > 0;

Callers 1

Calls 7

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

Tested by

no test coverage detected