MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / AcquireParticleBuffer

Method AcquireParticleBuffer

Source/Engine/Particles/Particles.cpp:1453–1501  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1451#endif
1452
1453ParticleBuffer* Particles::AcquireParticleBuffer(ParticleEmitter* emitter)
1454{
1455 PROFILE_CPU();
1456 PROFILE_MEM(Particles);
1457 ParticleBuffer* result = nullptr;
1458 ASSERT(emitter && emitter->IsLoaded());
1459
1460 if (emitter->EnablePooling && EnableParticleBufferPooling)
1461 {
1462 PoolLocker.Lock();
1463 const auto entries = Pool.TryGet(emitter);
1464 if (entries)
1465 {
1466 while (entries->HasItems() && !result)
1467 {
1468 // Reuse buffer
1469 result = entries->Last().Buffer;
1470 entries->RemoveLast();
1471
1472 // Remove old buffers
1473 if (result->Version != emitter->Graph.Version)
1474 {
1475 Delete(result);
1476 result = nullptr;
1477 }
1478 }
1479 }
1480 PoolLocker.Unlock();
1481 }
1482
1483 if (!result)
1484 {
1485 // Create new buffer
1486 result = New<ParticleBuffer>();
1487 if (result->Init(emitter))
1488 {
1489 LOG(Error, "Failed to create particle buffer for emitter {0}", emitter->ToString());
1490 Delete(result);
1491 return nullptr;
1492 }
1493 }
1494 else
1495 {
1496 // Prepare buffer
1497 result->Clear();
1498 }
1499
1500 return result;
1501}
1502
1503void Particles::RecycleParticleBuffer(ParticleBuffer* buffer)
1504{

Callers

nothing calls this directly

Calls 11

DeleteFunction · 0.85
LockMethod · 0.80
RemoveLastMethod · 0.80
UnlockMethod · 0.80
IsLoadedMethod · 0.45
TryGetMethod · 0.45
HasItemsMethod · 0.45
LastMethod · 0.45
InitMethod · 0.45
ToStringMethod · 0.45
ClearMethod · 0.45

Tested by

no test coverage detected