Nebula
Loading...
Searching...
No Matches
particlecontext.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
10//------------------------------------------------------------------------------
12#include "models/model.h"
15#include "particleresource.h"
16#include "jobs/jobs.h"
17#include "jobs2/jobs2.h"
18#include "util/ringbuffer.h"
19#include "particle.h"
20namespace Particles
21{
22
23class EmitterAttrs;
24class EmitterMesh;
27{
29public:
30
36
40 virtual ~ParticleContext();
41
43 static void Create();
44
46 static void Setup(
48 , const Resources::ResourceName& particleResource
50 );
51
53 static void ShowParticle(const Graphics::GraphicsEntityId id);
55 static void HideParticle(const Graphics::GraphicsEntityId id);
56
58 static void Play(const Graphics::GraphicsEntityId id, const PlayMode mode);
60 static void Stop(const Graphics::GraphicsEntityId id);
61
63 static void UpdateParticles(const Graphics::FrameContext& ctx);
65 static void OnPrepareView(const Graphics::ViewId view, const Graphics::FrameContext& ctx);
67 static void WaitForParticleUpdates(const Graphics::FrameContext& ctx);
68
77
78#ifndef PUBLIC_DEBUG
80 static void OnRenderDebug(uint32_t flags);
81#endif
82
83#ifdef WITH_NEBULA_EDITOR
85 static void RecalculateEnvelopeSamples(const Graphics::GraphicsEntityId id);
86#endif
87
89 static Threading::Event totalCompletionEvent;
90private:
91
105
111
132
133 enum
134 {
140 };
141 typedef Ids::IdAllocator<
145 ParticleRuntime,
149
151 static void EmitParticles(ParticleRuntime& rt, ParticleSystemRuntime& srt, float stepTime);
153 static void EmitParticle(ParticleRuntime& rt, ParticleSystemRuntime& srt, IndexT sampleIndex, float initialAge);
155 static void RunParticleStep(ParticleRuntime& rt, ParticleSystemRuntime& srt, float stepTime, bool generateVtxList);
156
160 static void Dealloc(Graphics::ContextEntityId id);
161};
162
163//------------------------------------------------------------------------------
166inline
169{
170 return particleContextAllocator.Alloc();
171}
172
173//------------------------------------------------------------------------------
176inline
177void
182
183} // namespace Particles
Defines a group of primitives as a subset of a vertex buffer and index buffer plus the primitive topo...
Definition primitivegroup.h:20
Definition graphicscontext.h:175
An ID allocator associates an id with a slice in an N number of arrays.
Definition idallocator.h:39
Nebula's bounding box class.
Definition bbox.h:24
A container for particle emitter attributes.
Definition emitterattrs.h:77
An emitter mesh holds positions and normals for particle emission.
Definition emittermesh.h:24
A lookup table for pre-sampled envelope curves.
Definition envelopesamplebuffer.h:19
static void OnPrepareView(const Graphics::ViewId view, const Graphics::FrameContext &ctx)
prepare particles for current view
Definition particlecontext.cc:547
static void OnRenderDebug(uint32_t flags)
debug rendering
Definition particlecontext.cc:700
static void Setup(const Graphics::GraphicsEntityId id, const Resources::ResourceName &particleResource, Graphics::StageMask stageMask=Graphics::ALL_STAGE_MASK)
setup particle context on model
Definition particlecontext.cc:205
static void Create()
create particle context
Definition particlecontext.cc:78
static Graphics::ContextEntityId Alloc()
allocate a new slice for this context
Definition particlecontext.h:168
static void RunParticleStep(ParticleRuntime &rt, ParticleSystemRuntime &srt, float stepTime, bool generateVtxList)
internal function to emit a job for updating particles
Definition particlecontext.cc:954
static ParticleContextAllocator particleContextAllocator
Definition particlecontext.h:148
@ ModelId
Definition particlecontext.h:137
@ Runtime
Definition particlecontext.h:138
@ ParticleSystems
Definition particlecontext.h:136
@ ModelContextId
Definition particlecontext.h:139
@ ParticleResource
Definition particlecontext.h:135
static void EmitParticles(ParticleRuntime &rt, ParticleSystemRuntime &srt, float stepTime)
internal function for emitting new particles
Definition particlecontext.cc:746
static void HideParticle(const Graphics::GraphicsEntityId id)
hide particle
Definition particlecontext.cc:339
virtual ~ParticleContext()
destrucotr
Definition particlecontext.cc:69
static CoreGraphics::VertexLayoutId GetParticleVertexLayout()
get the shared vertex layout
Definition particlecontext.cc:681
static void Stop(const Graphics::GraphicsEntityId id)
stop playing a particle
Definition particlecontext.cc:387
static void WaitForParticleUpdates(const Graphics::FrameContext &ctx)
stop particle updating when frame ends
Definition particlecontext.cc:558
static CoreGraphics::PrimitiveGroup & GetParticlePrimitiveGroup()
get the shared primitive group
Definition particlecontext.cc:690
static CoreGraphics::BufferId GetParticleVertexBuffer()
get the shared vertex buffer
Definition particlecontext.cc:672
static Threading::AtomicCounter ConstantUpdateCounter
Definition particlecontext.h:88
Ids::IdAllocator< Particles::ParticleResourceId, Util::Array< ParticleSystemRuntime >, Graphics::ContextEntityId, ParticleRuntime, Graphics::GraphicsEntityId > ParticleContextAllocator
Definition particlecontext.h:147
PlayMode
Definition particlecontext.h:32
@ IgnoreIfPlaying
Definition particlecontext.h:34
@ RestartIfPlaying
Definition particlecontext.h:33
ParticleContext()
constructor
Definition particlecontext.cc:62
static void UpdateParticles(const Graphics::FrameContext &ctx)
start particle updating when frame starts
Definition particlecontext.cc:399
static Threading::Event totalCompletionEvent
Definition particlecontext.h:89
static CoreGraphics::BufferId GetParticleIndexBuffer()
get the shared particle index buffer
Definition particlecontext.cc:663
static void EmitParticle(ParticleRuntime &rt, ParticleSystemRuntime &srt, IndexT sampleIndex, float initialAge)
internal function for emitting single particle
Definition particlecontext.cc:850
static void ShowParticle(const Graphics::GraphicsEntityId id)
show particle based on index fetched from GetParticleId
Definition particlecontext.cc:321
static void Dealloc(Graphics::ContextEntityId id)
deallocate a slice
Definition particlecontext.h:178
static void Play(const Graphics::GraphicsEntityId id, const PlayMode mode)
start playing particle
Definition particlecontext.cc:357
Nebula's dynamic array class.
Definition array.h:61
Implements a fixed size one-dimensional array.
Definition fixedarray.h:20
A ring buffer stores up to a maximum number of elements in a circular fashion.
Definition ringbuffer.h:21
uint16_t StageMask
Definition view.h:23
static constexpr StageMask ALL_STAGE_MASK
Definition view.h:27
Particle context controls playing and enabling/disabling of particle attrs inside a model.
Definition modelnode.h:37
Util::StringAtom ResourceName
Definition resourceid.h:33
volatile int AtomicCounter
Definition interlocked.h:19
double Time
the time datatype
Definition time.h:18
Definition buffer.h:23
Definition mesh.h:29
Definition vertexlayout.h:16
Definition graphicscontext.h:143
Definition graphicsserver.h:31
The graphics entity is only an Id, to which we can attach GraphicsContexts.
Definition graphicsentity.h:16
Definition view.h:34
A 4x4 single point precision float matrix.
Definition mat4.h:49
Definition particlecontext.h:107
unsigned int numLivingParticles
Definition particlecontext.h:109
Math::bbox bbox
Definition particlecontext.h:108
Definition particlecontext.h:93
bool stopping
Definition particlecontext.h:100
bool initial
Definition particlecontext.h:98
bool firstFrame
Definition particlecontext.h:103
Timing::Time stepTime
Definition particlecontext.h:94
Timing::Time prevEmissionTime
Definition particlecontext.h:95
bool playing
Definition particlecontext.h:99
IndexT emissionCounter
Definition particlecontext.h:97
Timing::Time emissionStartTimeOffset
Definition particlecontext.h:96
bool restarting
Definition particlecontext.h:102
bool stopped
Definition particlecontext.h:101
Math::mat4 transform
Definition particlecontext.h:120
uint32_t baseVertex
Definition particlecontext.h:130
Util::RingBuffer< Particle > particles
Definition particlecontext.h:118
Particles::EmitterMesh emitterMesh
Definition particlecontext.h:116
Util::FixedArray< CoreGraphics::MeshId > meshPerFrame
Definition particlecontext.h:127
const Particles::EmitterAttrs * attrs
Definition particlecontext.h:114
Particles::EnvelopeSampleBuffer sampleBuffer
Definition particlecontext.h:115
SizeT outputCapacity
Definition particlecontext.h:124
uint32_t renderableIndex
Definition particlecontext.h:117
Util::Array< Particle > particlesToRender
Definition particlecontext.h:119
SizeT emissionCounter
Definition particlecontext.h:122
CoreGraphics::MeshId mesh
Definition particlecontext.h:128
uint32_t numParticles
Definition particlecontext.h:130
ParticleJobSliceOutputData outputData
Definition particlecontext.h:125
Math::bbox boundingBox
Definition particlecontext.h:121
Definition particleresource.h:19
int SizeT
Definition types.h:42
int IndexT
Definition types.h:41