Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
ParticleSource.cpp
Go to the documentation of this file.
1
2
6
7namespace Divide {
8
10 : ParticleSource(context, 0)
11{
12}
13
14ParticleSource::ParticleSource(GFXDevice& context, const F32 emitRate) noexcept
15 : _emitRate(emitRate),
16 _context(context)
17{
18}
19
20void ParticleSource::emit(const U64 deltaTimeUS, const std::shared_ptr<ParticleData>& p) {
21 ParticleData& data = *p;
22
23 const F32 dt = Time::MicrosecondsToSeconds<F32>(deltaTimeUS);
24 const U32 maxNewParticles = to_U32(dt * _emitRate);
25 const U32 startID = data.aliveCount();
26 const U32 endID = std::min(startID + maxNewParticles, data.totalCount() - 1);
27
29
30 Task* generateTask = CreateTask(TASK_NOP);
31 for (const std::shared_ptr<ParticleGenerator>& gen : _particleGenerators) {
32 gen->generate(*generateTask, pool, deltaTimeUS, data, startID, endID);
33 }
34
35 Start(*generateTask, pool);
36 Wait(*generateTask, pool);
37
38 for (U32 i = startID; i < endID; ++i) {
39 p->wake(i);
40 }
41}
42
43} //namespace Divide
Rough around the edges Adapter pattern abstracting the actual rendering API and access to the GPU.
Definition: GFXDevice.h:215
Container to store data for a given set of particles.
Definition: ParticleData.h:59
U32 aliveCount() const noexcept
Definition: ParticleData.h:117
U32 totalCount() const noexcept
Definition: ParticleData.h:118
ParticleSource(GFXDevice &context) noexcept
virtual void emit(U64 deltaTimeUS, const std::shared_ptr< ParticleData > &p)
vector< std::shared_ptr< ParticleGenerator > > _particleGenerators
PlatformContext & context() noexcept
TaskPool & taskPool(const TaskPoolType type) noexcept
Handle console commands that start with a forward slash.
Definition: AIProcessor.cpp:7
constexpr U32 to_U32(const T value)
void Wait(const Task &task, TaskPool &pool)
Definition: Task.cpp:20
Task * CreateTask(Predicate &&threadedFunction, bool allowedInIdle=true)
Definition: TaskPool.inl:45
constexpr auto TASK_NOP
Definition: Task.h:57
void Start(Task &task, TaskPool &pool, TaskPriority priority=TaskPriority::DONT_CARE, const DELEGATE< void > &onCompletionFunction={})
Definition: Task.cpp:9
uint32_t U32
uint64_t U64