31 Tempest::Vec3
pos = {};
32 Tempest::Vec3
direction[3] = {{1,0,0}, {0,1,0}, {0,0,1}};
41 std::unique_ptr<PfxEmitter>
next;
60 void drawShadow (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const SceneGlobals &scene, uint8_t fId,
int layer);
67 void tick(uint64_t dt,
const Tempest::Vec3& viewPos);
71 enum UboLinkpackage : uint8_t {
90 bool allocated =
false;
91 uint64_t timeTotal = 0;
96 Tempest::Vec3 pos = {};
104 struct ParState final {
105 uint16_t life=0, maxLife=1;
106 Tempest::Vec3 pos, dir;
108 std::vector<Trail> trail;
110 float lifeTime()
const;
114 const Tempest::RenderPipeline* pMain =
nullptr;
115 const Tempest::RenderPipeline* pShadow =
nullptr;
117 Tempest::StorageBuffer pfxGpu;
118 uint64_t timeShift = 0;
120 bool isEmpty()
const;
123 void drawCommon(Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const SceneGlobals &scene,
const Draw& itm,
126 void tickEmit(Block& p, ImplEmitter& emitter, uint64_t emited);
130 void freeBlock(
size_t& s);
132 static float randf();
133 static float randf(
float base,
float var);
135 Block& getBlock(ImplEmitter& emitter);
138 void init (Block& block, ImplEmitter& emitter,
size_t particle);
139 void finalize (
size_t particle);
140 void tick (Block& sys, ImplEmitter& emitter,
size_t particle, uint64_t dt);
141 void tickTrail(ParState& ps, ImplEmitter& emitter, uint64_t dt);
143 void implTickCommon(uint64_t dt,
const Tempest::Vec3& viewPos);
144 void implTickDecals(uint64_t dt,
const Tempest::Vec3& viewPos);
146 void buildSsboTrails();
147 void buildBilboard(PfxState& v,
const Block& p,
const ParState& ps,
const uint32_t color,
148 float szX,
float szY,
float szZ);
149 void buildTrailSegment(PfxState& v,
const Trail& a,
const Trail& b,
float maxT);
150 uint32_t mkTrailColor(
float clA)
const;
155 std::vector<PfxState> pfxCpu;
158 std::vector<PfxState> trlCpu;
160 uint64_t maxTrlTime = 0;
161 size_t blockSize = 0;
163 std::vector<ParState> particles;
164 std::vector<ImplEmitter> impl;
165 std::vector<Block> block;
168 static std::mt19937 rndEngine;